30
glib2, gtk2, gdk2, gdk2pixbuf, Gtk2WSPrivate,
29
glib2, gtk2, gdk2, gdk2pixbuf,
31
30
////////////////////////////////////////////////////
32
31
LCLType, Controls, Buttons, Graphics, GraphType,
33
32
////////////////////////////////////////////////////
34
33
WSButtons, WSLCLClasses, WSProc,
38
37
PBitBtnWidgetInfo = ^TBitBtnWidgetInfo;
59
58
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
60
59
class procedure SetGlyph(const ABitBtn: TCustomBitBtn; const AValue: TButtonGlyph); override;
61
class procedure SetLayout(const ABitBtn: TCustomBitBtn; const AValue: TButtonLayout); override;
60
class procedure SetLayout(const ABitBtn: TCustomBitBtn; const {%H-}AValue: TButtonLayout); override;
62
61
class procedure SetMargin(const ABitBtn: TCustomBitBtn; const AValue: Integer); override;
63
62
class procedure SetSpacing(const ABitBtn: TCustomBitBtn; const AValue: Integer); override;
64
63
class procedure SetText(const AWinControl: TWinControl; const AText: String); override;
99
98
TWinControlAccess = class(TWinControl)
102
procedure GtkWSBitBtn_StateChanged(AWidget: PGtkWidget; AState: TGtkStateType; AInfo: PWidgetInfo); cdecl;
101
procedure GtkWSBitBtn_StateChanged(AWidget: PGtkWidget; {%H-}AState: TGtkStateType; AInfo: PWidgetInfo); cdecl;
104
103
BitBtn: TCustomBitBtnAccess;
195
194
BitBtnInfo: PBitBtnWidgetInfo;
196
195
Allocation: TGTKAllocation;
198
Result := TLCLIntfHandle(PtrUInt(gtk_button_new));
197
Result := TLCLIntfHandle({%H-}PtrUInt(gtk_button_new));
199
198
if Result = 0 then Exit;
200
199
{$IFDEF DebugLCLComponents}
201
200
DebugGtkWidgets.MarkCreated(Pointer(Result),dbgsName(AWinControl));
204
WidgetInfo := CreateWidgetInfo(Pointer(Result), BitBtn, AParams);
203
WidgetInfo := CreateWidgetInfo({%H-}Pointer(Result), BitBtn, AParams);
207
206
FillChar(BitBtnInfo^, SizeOf(BitBtnInfo^), 0);
208
207
WidgetInfo^.UserData := BitBtnInfo;
209
208
WidgetInfo^.DataOwner := True;
211
gtk_widget_show(PGtkWidget(Result));
210
gtk_widget_show({%H-}PGtkWidget(Result));
213
212
Allocation.X := AParams.X;
214
213
Allocation.Y := AParams.Y;
215
214
Allocation.Width := AParams.Width;
216
215
Allocation.Height := AParams.Height;
217
gtk_widget_size_allocate(PGtkWidget(Result), @Allocation);
216
gtk_widget_size_allocate({%H-}PGtkWidget(Result), @Allocation);
219
Set_RC_Name(AWinControl, PGtkWidget(Result));
220
SetCallbacks(PGtkWidget(Result), WidgetInfo);
218
Set_RC_Name(AWinControl, {%H-}PGtkWidget(Result));
219
SetCallbacks({%H-}PGtkWidget(Result), WidgetInfo);
223
222
class procedure TGtk2WSBitBtn.SetGlyph(const ABitBtn: TCustomBitBtn;
231
230
if not WSCheckHandleAllocated(ABitBtn, 'SetGlyph') then
233
MainWidget := PGtkWidget(ABitBtn.Handle);
232
MainWidget := {%H-}PGtkWidget(ABitBtn.Handle);
234
233
WidgetInfo := GetWidgetInfo(MainWidget);
235
234
BitBtnInfo := WidgetInfo^.UserData;
236
235
BuildNeeded := UpdateGlyph(ABitBtn, BitBtnInfo, AValue, GtkStateToButtonState[GTK_WIDGET_STATE(MainWidget)]);
237
236
// at initialization widget will be built in SetLayout
238
if not (wcfInitializing in TWinControlAccess(ABitBtn).FWinControlFlags) and BuildNeeded then
237
if not (wcfInitializing in {%H-}TWinControlAccess(ABitBtn).FWinControlFlags) and BuildNeeded then
239
238
BuildWidget(ABitBtn, MainWidget, BitBtnInfo, ABitBtn.Caption);
249
248
if not WSCheckHandleAllocated(ABitBtn, 'SetLayout') then
251
MainWidget := Pointer(ABitBtn.Handle);
250
MainWidget := {%H-}Pointer(ABitBtn.Handle);
252
251
WidgetInfo := GetWidgetInfo(MainWidget);
253
252
BitBtnInfo := WidgetInfo^.UserData;
254
253
BuildWidget(ABitBtn, MainWidget, BitBtnInfo, ABitBtn.Caption);
263
262
if not WSCheckHandleAllocated(ABitBtn, 'SetMargin') then
265
MainWidget := PGtkWidget(ABitBtn.Handle);
264
MainWidget := {%H-}PGtkWidget(ABitBtn.Handle);
266
265
AlignWidget := PGtkAlignment(gtk_bin_get_child(PGtkBin(MainWidget)));
267
266
if GTK_IS_ALIGNMENT(AlignWidget) then
268
267
UpdateMargin(ABitBtn, AlignWidget, AValue);
277
276
if not WSCheckHandleAllocated(ABitBtn, 'SetSpacing') then
279
MainWidget := Pointer(ABitBtn.Handle);
278
MainWidget := {%H-}Pointer(ABitBtn.Handle);
280
279
ChildWidget := gtk_bin_get_child(PGtkBin(MainWidget));
281
280
if GTK_IS_ALIGNMENT(ChildWidget) then
299
298
if (wcfInitializing in TWinControlAccess(AWinControl).FWinControlFlags)
300
299
or not WSCheckHandleAllocated(AWincontrol, 'SetText') then
302
MainWidget := Pointer(AWinControl.Handle);
301
MainWidget := {%H-}Pointer(AWinControl.Handle);
303
302
WidgetInfo := GetWidgetInfo(MainWidget);
304
303
BitBtnInfo := WidgetInfo^.UserData;
305
304
LabelWidget := BitBtnInfo^.LabelWidget;
318
317
Widget: PGTKWidget;
320
319
if not AWinControl.HandleAllocated then exit;
321
Widget:= PGtkWidget(AWinControl.Handle);
320
Widget:= {%H-}PGtkWidget(AWinControl.Handle);
322
321
Gtk2WidgetSet.SetWidgetColor(Widget, clNone, AWinControl.color,
323
322
[GTK_STATE_NORMAL,GTK_STATE_ACTIVE,GTK_STATE_PRELIGHT,GTK_STATE_SELECTED]);
333
332
if not AWinControl.HandleAllocated then exit;
335
WidgetInfo := GetWidgetInfo(PGtkWidget(AWinControl.Handle));
334
WidgetInfo := GetWidgetInfo({%H-}PGtkWidget(AWinControl.Handle));
336
335
BitBtnInfo := WidgetInfo^.UserData;
337
336
LabelWidget := BitBtnInfo^.LabelWidget;
338
337
if LabelWidget <> nil then