mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-20 13:22:31 +02:00
165 lines
5.3 KiB
ObjectPascal
165 lines
5.3 KiB
ObjectPascal
{
|
|
*****************************************************************************
|
|
* Gtk3WSButtons.pp *
|
|
* ------------ *
|
|
* *
|
|
* *
|
|
*****************************************************************************
|
|
|
|
*****************************************************************************
|
|
This file is part of the Lazarus Component Library (LCL)
|
|
|
|
See the file COPYING.modifiedLGPL.txt, included in this distribution,
|
|
for details about the license.
|
|
*****************************************************************************
|
|
}
|
|
unit Gtk3WSButtons;
|
|
|
|
{$mode objfpc}{$H+}
|
|
{$I gtk3defines.inc}
|
|
|
|
interface
|
|
////////////////////////////////////////////////////
|
|
// I M P O R T A N T
|
|
////////////////////////////////////////////////////
|
|
// 1) Only class methods allowed
|
|
// 2) Class methods have to be published and virtual
|
|
// 3) To get as little as posible circles, the uses
|
|
// clause should contain only those LCL units
|
|
// needed for registration. WSxxx units are OK
|
|
// 4) To improve speed, register only classes in the
|
|
// initialization section which actually
|
|
// implement something
|
|
// 5) To enable your XXX widgetset units, look at
|
|
// the uses clause of the XXXintf.pp
|
|
////////////////////////////////////////////////////
|
|
uses
|
|
////////////////////////////////////////////////////
|
|
// To get as little as posible circles,
|
|
// uncomment only when needed for registration
|
|
////////////////////////////////////////////////////
|
|
Classes, Controls, Buttons, Graphics,
|
|
////////////////////////////////////////////////////
|
|
WSLCLClasses, WSButtons, WSProc,
|
|
Gtk3WSControls, LCLType, LCLIntf, LCLProc,
|
|
gtk3widgets, LazGtk3, LazGdk3, LazGdkPixbuf2, LazGObject2;
|
|
|
|
type
|
|
|
|
{ TGtk3WSBitBtn }
|
|
|
|
TGtk3WSBitBtn = class(TWSBitBtn)
|
|
published
|
|
class function CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
|
|
class procedure GetPreferredSize(const AWinControl: TWinControl;
|
|
var PreferredWidth, PreferredHeight: integer;
|
|
WithThemeSpace: Boolean); override;
|
|
class procedure SetGlyph(const ABitBtn: TCustomBitBtn; const AValue: TButtonGlyph); override;
|
|
class procedure SetLayout(const ABitBtn: TCustomBitBtn; const AValue: TButtonLayout); override;
|
|
class procedure SetMargin(const ABitBtn: TCustomBitBtn; const AValue: Integer); override;
|
|
class procedure SetSpacing(const ABitBtn: TCustomBitBtn; const AValue: Integer); override;
|
|
end;
|
|
TGtk3WSBitBtnClass = class of TGtk3WSBitBtn;
|
|
|
|
{ TGtk3WSSpeedButton }
|
|
|
|
TGtk3WSSpeedButton = class(TWSSpeedButton)
|
|
private
|
|
protected
|
|
public
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
LResources, gtk3objects, gtk3procs;
|
|
|
|
|
|
{ TGtk3WSCustomBitBtn }
|
|
|
|
class function TGtk3WSBitBtn.CreateHandle(const AWinControl: TWinControl;
|
|
const AParams: TCreateParams): TLCLIntfHandle;
|
|
var
|
|
ABitBtn: TGtk3Button;
|
|
ARect: TGdkRectangle;
|
|
begin
|
|
{$IFDEF GTK3DEBUGCORE}
|
|
DebugLn('TGtk3WSBitBtn.CreateHandle');
|
|
{$ENDIF}
|
|
ABitBtn := TGtk3Button.Create(AWinControl, AParams);
|
|
with ARect do
|
|
begin
|
|
x := AWinControl.Left;
|
|
y := AWinControl.Top;
|
|
width := AWinControl.Width;
|
|
height := AWinControl.Height;
|
|
end;
|
|
|
|
ABitBtn.Widget^.set_allocation(@ARect);
|
|
|
|
Result := TLCLIntfHandle(ABitBtn);
|
|
{$IFDEF GTK3DEBUGCORE}
|
|
DebugLn('TGtk3WSBitBtn.CreateHandle Handle=',dbgs(Result));
|
|
{$ENDIF}
|
|
end;
|
|
|
|
class procedure TGtk3WSBitBtn.GetPreferredSize(const AWinControl: TWinControl;
|
|
var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean);
|
|
begin
|
|
if not WSCheckHandleAllocated(AWinControl, 'GetPreferredSize') then
|
|
Exit;
|
|
TGtk3Button(AWinControl.Handle).preferredSize(PreferredWidth, PreferredHeight, WithThemeSpace);
|
|
end;
|
|
|
|
class procedure TGtk3WSBitBtn.SetGlyph(const ABitBtn: TCustomBitBtn;
|
|
const AValue: TButtonGlyph);
|
|
var
|
|
AImage: PGtkImage;
|
|
begin
|
|
{$IFDEF GTK3DEBUGCORE}
|
|
DebugLn('TGtk3WSBitBtn.SetGlyph');
|
|
{$ENDIF}
|
|
if not WSCheckHandleAllocated(ABitBtn, 'SetGlyph') then
|
|
Exit;
|
|
if ABitBtn.CanShowGlyph then
|
|
AImage := gtk_image_new_from_pixbuf(TGtk3Image(ABitBtn.Glyph.Handle).Handle)
|
|
else
|
|
AImage := nil;
|
|
gtk_button_set_image(PGtkButton(TGtk3Button(ABitBtn.Handle).Widget), AImage);
|
|
end;
|
|
|
|
class procedure TGtk3WSBitBtn.SetLayout(const ABitBtn: TCustomBitBtn;
|
|
const AValue: TButtonLayout);
|
|
begin
|
|
{$IFDEF GTK3DEBUGCORE}
|
|
DebugLn('TGtk3WSBitBtn.SetLayout');
|
|
{$ENDIF}
|
|
if not WSCheckHandleAllocated(ABitBtn, 'SetLayout') then
|
|
Exit;
|
|
TGtk3Button(ABitBtn.Handle).Layout := Ord(AValue);
|
|
end;
|
|
|
|
class procedure TGtk3WSBitBtn.SetMargin(const ABitBtn: TCustomBitBtn;
|
|
const AValue: Integer);
|
|
begin
|
|
{$IFDEF GTK3DEBUGCORE}
|
|
DebugLn('TGtk3WSBitBtn.SetMargin');
|
|
{$ENDIF}
|
|
if not WSCheckHandleAllocated(ABitBtn, 'SetMargin') then
|
|
Exit;
|
|
TGtk3Button(ABitBtn.Handle).Margin := AValue;
|
|
end;
|
|
|
|
class procedure TGtk3WSBitBtn.SetSpacing(const ABitBtn: TCustomBitBtn;
|
|
const AValue: Integer);
|
|
begin
|
|
{$IFDEF GTK3DEBUGCORE}
|
|
DebugLn('TGtk3WSBitBtn.SetSpacing');
|
|
{$ENDIF}
|
|
if not WSCheckHandleAllocated(ABitBtn, 'SetSpacing') then
|
|
Exit;
|
|
TGtk3Button(ABitBtn.Handle).Spacing := AValue;
|
|
end;
|
|
|
|
end.
|