lazarus/lcl/interfaces/gtk3/gtk3wsbuttons.pp
2013-06-23 10:35:00 +00:00

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.