15
PGtkDigit = ^TGtkDigit;
17
ParentWidget : TGtkWidget;
20
Corners : Array [1..6] of TPoint;
23
PGtkDigitClass = ^TGtkDigitClass;
24
TGtkDigitClass = Record
25
Parent_Class : TGtkWidgetClass;
28
Function GtkDigit_get_type : Guint;cdecl;
29
Function GtkDigit_new : PGtkWidget;cdecl;
30
Procedure GtkDigit_set_digit (Obj : PGtkDigit; Digit : guint);cdecl;
31
Function GtkDigit_get_digit (Obj : PGtkDigit) : guint;cdecl;
34
PGtkActiveDigit = ^TGtkActiveDigit;
35
TGtkActiveDigit = Record
36
ParentWidget : TGtkDigit;
40
PGtkActiveDigitClass = ^TGtkActiveDigitClass;
41
TGtkActiveDigitClass = Record
42
Parent_Class : TGtkDigitClass;
45
Function GtkActiveDigit_get_type : Guint;cdecl;
46
Function GtkActiveDigit_new : PGtkWidget;cdecl;
51
TLEDSegment = (lsTop,lsCenter,lsBottom,
53
lsLeftBottom, lsRightBottom);
54
TLedSegments = Array[TLedSegment] of boolean;
55
TSegmentCorners = Array [1..2] of Byte;
58
DigitSegments : Array[0..9] of TLEDSegments =
60
(true,false,true,true,true,true,true), // 0
61
(false,false,false,false,true,false,true), // 1
62
(true,true,true,false,true,true,false), // 2
63
(true,true,true,false,true,false,true), // 3
64
(false,true,false,true,true,false,true), // 4
65
(true,true,true,true,false,false,true), // 5
66
(true,true,true,true,false,true,true), // 6
67
(true,false,false,false,true,false,true), // 7
68
(true,true,true,true,true,true,true), // 8
69
(true,true,true,true,true,false,true) // 9
72
SegmentCorners : Array [TLEDSegment] of TSegmentCorners =
84
GtkDigitType : guint = 0;
86
Procedure GTKDigitSizeRequest (Widget : PGtkWidget;
87
Request : PGtkRequisition);cdecl;
92
With PGTKDigit(Widget)^ do
101
Function GTKDigitExpose (Widget : PGTKWidget;
102
ExposeEvent : PGDKEventExpose) : gint;cdecl;
106
Segment : TLedSegment;
109
With PGTKDigit(Widget)^ do
110
For Segment:=lsTop to lsRightBottom do
111
if DigitSegments[Digit][Segment] then
112
gdk_draw_line(widget^.window,
113
PgtkStyle(widget^.thestyle)^.fg_gc[widget^.state],
114
Corners[SegmentCorners[Segment][1]].X,
115
Corners[SegmentCorners[Segment][1]].Y,
116
Corners[SegmentCorners[Segment][2]].X,
117
Corners[SegmentCorners[Segment][2]].Y
120
gdk_draw_line(widget^.window,
121
PgtkStyle(widget^.thestyle)^.bg_gc[widget^.state],
122
Corners[SegmentCorners[Segment][1]].X,
123
Corners[SegmentCorners[Segment][1]].Y,
124
Corners[SegmentCorners[Segment][2]].X,
125
Corners[SegmentCorners[Segment][2]].Y
130
Procedure SetDigitCorners(Digit : PGtkDigit; IgnoreOffset : Boolean);
139
Widget:=PGTKWidget(Digit);
140
BW:=Digit^.Borderwidth;
148
SX:=Widget^.Allocation.x;
149
SY:=Widget^.Allocation.y;
151
W:=Widget^.Allocation.Width-2*BW;
152
H:=(Widget^.Allocation.Height-2*BW) div 2;
153
With PGTKDigit(Widget)^ do
158
1,3,5 : Corners[i].X:=SX+BW;
159
2,4,6 : Corners[i].X:=SX+BW+W;
163
1,2 : Corners[i].Y:=SY+BW;
164
3,4 : Corners[i].Y:=SY+BW+H;
165
5,6 : Corners[i].Y:=SY+BW+2*H
170
procedure GTKDigitSizeAllocate(Widget : PGTKWidget;
171
Allocation : PGTKAllocation);cdecl;
174
Widget^.Allocation:=Allocation^;
175
SetDigitCorners(PGtkDigit(Widget),False);
178
Procedure GtkDigitClassInit (CObj : PGtkDigitClass);cdecl;
181
With PGtkWidgetClass(Cobj)^ do
183
size_request:=@GTKDigitSizeRequest;
184
expose_event:=@GTKDigitExpose;
185
size_allocate:=@GTKDigitSizeAllocate;
190
Procedure GtkDigitInit (Obj : PGtkDigit);cdecl;
195
gtk_widget_set_flags(pgtkWidget(obj),GTK_NO_WINDOW);
209
Function GtkDigit_get_type : Guint;cdecl;
212
GtkDigitInfo : TGtkTypeInfo =
213
(type_name : 'GtkDigit';
214
object_size : SizeOf(TGtkDigit);
215
class_size : SizeOf(TGtkDigitClass);
216
class_init_func : TGtkClassInitFunc(@GtkDigitClassInit);
217
object_init_func : TGtkObjectInitFunc(@GtkDigitInit);
220
base_class_init_func : Nil
224
if (GtkDigitType=0) then
225
GtkDigitType:=gtk_type_unique(gtk_widget_get_type,@GtkDigitInfo);
226
Result:=GtkDigitType;
229
Function GtkDigit_new : PGtkWidget;cdecl;
232
Result:=gtk_type_new(GtkDigit_get_type)
235
Procedure GtkDigit_set_digit (Obj : PGtkDigit; Digit : guint);cdecl;
238
if Digit in [0..9] then
241
gtk_widget_draw(PGTKWidget(Obj),Nil);
245
Function GtkDigit_get_digit (Obj : PGtkDigit) : guint;cdecl;
251
{ ---------------------------------------------------------------------
253
---------------------------------------------------------------------}
255
Procedure GtkActiveDigitRealize(widget : PgtkWidget);cdecl;
258
attr : TGDKWindowAttr;
262
GTK_WIDGET_SET_FLAGS(widget,GTK_REALIZED);
265
x := widget^.allocation.x;
266
y := widget^.allocation.y;
267
width:=widget^.allocation.width;
268
height:=widget^.allocation.height;
269
wclass:=GDK_INPUT_OUTPUT;
270
window_type:=gdk_window_child;
271
event_mask:=gtk_widget_get_events(widget) or GDK_EXPOSURE_MASK or
272
GDK_BUTTON_PRESS_MASK OR GDK_BUTTON_RELEASE_MASK;
273
visual:=gtk_widget_get_visual(widget);
274
colormap:=gtk_widget_get_colormap(widget);
276
Mask:=GDK_WA_X or GDK_WA_Y or GDK_WA_VISUAL or GDK_WA_COLORMAP;
277
widget^.Window:=gdk_window_new(widget^.parent^.window,@attr,mask);
278
widget^.thestyle:=gtk_style_attach(widget^.thestyle,widget^.window);
279
gdk_window_set_user_data(widget^.window,widget);
280
gtk_style_set_background(widget^.thestyle,widget^.window,GTK_STATE_ACTIVE);
283
procedure GTKActiveDigitSizeAllocate(Widget : PGTKWidget;
284
Allocation : PGTKAllocation);cdecl;
286
Widget^.allocation:=Allocation^;
287
if GTK_WIDGET_REALIZED(widget) then
288
gdk_window_move_resize(widget^.window,
293
SetDigitCorners(PGTKDigit(Widget),True);
296
Function GtkActiveDigitButtonPress(Widget: PGtKWidget;
297
Event : PGdkEventButton) : gint;cdecl;
300
PGTKActiveDigit(Widget)^.Button:=Event^.Button;
303
Function GtkActiveDigitButtonRelease(Widget: PGtKWidget;
304
Event : PGdkEventButton) : gint;cdecl;
311
Digit:=PGTKDigit(Widget);
312
D:=gtkdigit_get_digit(Digit);
313
If PGTKActiveDigit(Digit)^.Button=Event^.Button then
315
If Event^.Button=1 then
316
GTKDigit_set_digit(Digit,D+1)
317
else if Event^.Button=3 then
318
GTKDigit_set_digit(Digit,D-1)
320
GTKDigit_set_digit(Digit,0);
322
PGTKActiveDigit(Digit)^.Button:=0;
325
Procedure GtkActiveDigitClassInit (CObj : PGtkActiveDigitClass);cdecl;
328
With PGtkWidgetClass(Cobj)^ do
330
realize := @GtkActiveDigitRealize;
331
size_allocate := @GtkActiveDigitSizeAllocate;
332
button_press_event:=@GtkActiveDigitButtonPress;
333
button_release_event:=@GtkActiveDigitButtonRelease;
338
Procedure GtkActiveDigitInit (Obj : PGtkActiveDigit);cdecl;
343
gtk_widget_unset_flags(pgtkWidget(obj),GTK_NO_WINDOW);
349
GtkActiveDigitType : guint = 0;
351
Function GtkActiveDigit_get_type : Guint;cdecl;
354
GtkActiveDigitInfo : TGtkTypeInfo =
355
(type_name : 'GtkActiveDigit';
356
object_size : SizeOf(TGtkActiveDigit);
357
class_size : SizeOf(TGtkActiveDigitClass);
358
class_init_func : TGtkClassInitFunc(@GtkActiveDigitClassInit);
359
object_init_func : TGtkObjectInitFunc(@GtkActiveDigitInit);
362
base_class_init_func : Nil
366
if (GtkActiveDigitType=0) then
367
GtkActiveDigitType:=gtk_type_unique(gtkdigit_get_type,@GtkActiveDigitInfo);
368
Result:=GtkActiveDigitType;
372
Function GtkActiveDigit_new : PGtkWidget;cdecl;
375
Result:=gtk_type_new(GtkActiveDigit_get_type)
b'\\ No newline at end of file'