Browse Source

Added BGRAThemeCheckBox

lainz 6 years ago
parent
commit
201428b3d1

+ 52 - 0
bgracolortheme.pas

@@ -34,6 +34,8 @@ type
       Focused: boolean; ARect: TRect; DestCanvas: TCanvas); override;
     procedure DrawRadioButton(Caption: string; State: TBGRAThemeButtonState;
       {%H-}Focused: boolean; Checked: boolean; ARect: TRect; DestCanvas: TCanvas); override;
+    procedure DrawCheckBox(Caption: string; State: TBGRAThemeButtonState;
+      {%H-}Focused: boolean; Checked: boolean; ARect: TRect; DestCanvas: TCanvas); override;
   published
     property ColorNormal: TColor read FColorNormal write SetFColorNormal;
     property ColorHover: TColor read FColorHover write SetFColorHover;
@@ -176,4 +178,54 @@ begin
   end;
 end;
 
+procedure TBGRAColorTheme.DrawCheckBox(Caption: string;
+  State: TBGRAThemeButtonState; Focused: boolean; Checked: boolean;
+  ARect: TRect; DestCanvas: TCanvas);
+var
+  Style: TTextStyle;
+  Bitmap: TBGRABitmap;
+  Color: TBGRAPixel;
+  aleft, atop, aright, abottom: integer;
+begin
+  DestCanvas.Font.Color := ColorText;
+  case State of
+    btbsHover: Color := ColorHover;
+    btbsActive: Color := ColorActive;
+    btbsDisabled:
+    begin
+      DestCanvas.Font.Color := ColorDisabled;
+      Color := ColorDisabled;
+    end;
+  else {btbsNormal}
+    Color := ColorNormal;
+  end;
+
+  Bitmap := TBGRABitmap.Create(ARect.Height, ARect.Height);
+  Bitmap.Rectangle(0, 0, Bitmap.Height, Bitmap.Height, Color, BGRAWhite);
+  aleft := 0;
+  aright := Bitmap.Height;
+  atop := 0;
+  abottom := Bitmap.Height;
+  if Checked then
+    Bitmap.DrawPolyLineAntialias(Bitmap.ComputeBezierSpline(
+      [BezierCurve(pointF(aleft + 2, atop + 3), PointF((aleft + aright - 1) / 2, abottom - 3)),
+      BezierCurve(PointF((aleft + aright - 1) / 2, abottom - 3), PointF(
+      (aleft + aright - 1) / 2, (atop * 2 + abottom - 1) / 3), PointF(aright - 2, atop - 2))]),
+      Color, 1.5);
+  Bitmap.Draw(DestCanvas, Arect.Left, Arect.Top, False);
+  Bitmap.Free;
+
+  if Caption <> '' then
+  begin
+    Style.Alignment := taLeftJustify;
+    Style.Layout := tlCenter;
+    Style.Wordbreak := True;
+    Style.SystemFont := False;
+    Style.Clipping := True;
+    Style.Opaque := False;
+    DestCanvas.TextRect(Rect(Arect.Height, 0, ARect.Right, ARect.Bottom),
+      ARect.Height, 0, Caption, Style);
+  end;
+end;
+
 end.

+ 117 - 111
bgracontrols.lpk

@@ -29,7 +29,7 @@
     <Description Value="BGRA Controls is a set of graphical UI elements that you can use with Lazarus LCL applications."/>
     <License Value="Modified LGPL"/>
     <Version Major="6" Minor="3" Release="1"/>
-    <Files Count="55">
+    <Files Count="56">
       <Item1>
         <Filename Value="bcbasectrls.pas"/>
         <AddToUsesPkgSection Value="False"/>
@@ -51,252 +51,258 @@
         <UnitName Value="BCButtonFocus"/>
       </Item4>
       <Item5>
+        <Filename Value="bccombobox.pas"/>
+        <HasRegisterProc Value="True"/>
+        <UnitName Value="BCComboBox"/>
+      </Item5>
+      <Item6>
         <Filename Value="bcdefaultthememanager.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="BCDefaultThemeManager"/>
-      </Item5>
-      <Item6>
-        <Filename Value="bceffect.pas"/>
-        <UnitName Value="BCEffect"/>
       </Item6>
       <Item7>
-        <Filename Value="bcfilters.pas"/>
-        <UnitName Value="bcfilters"/>
+        <Filename Value="bceffect.pas"/>
+        <UnitName Value="BCEffect"/>
       </Item7>
       <Item8>
+        <Filename Value="bcfilters.pas"/>
+        <UnitName Value="bcfilters"/>
+      </Item8>
+      <Item9>
         <Filename Value="bcgamegrid.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCGameGrid"/>
-      </Item8>
-      <Item9>
+      </Item9>
+      <Item10>
+        <Filename Value="bcgradientbutton.pas"/>
+        <HasRegisterProc Value="True"/>
+        <UnitName Value="BCGradientButton"/>
+      </Item10>
+      <Item11>
         <Filename Value="bcimagebutton.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCImageButton"/>
-      </Item9>
-      <Item10>
+      </Item11>
+      <Item12>
         <Filename Value="bckeyboard.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="BCKeyboard"/>
-      </Item10>
-      <Item11>
+      </Item12>
+      <Item13>
         <Filename Value="bclabel.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCLabel"/>
-      </Item11>
-      <Item12>
+      </Item13>
+      <Item14>
         <Filename Value="bclistbox.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCListBox"/>
-      </Item12>
-      <Item13>
+      </Item14>
+      <Item15>
         <Filename Value="bcmaterialdesignbutton.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCMaterialDesignButton"/>
-      </Item13>
-      <Item14>
+      </Item15>
+      <Item16>
         <Filename Value="bcmdbutton.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCMDButton"/>
-      </Item14>
-      <Item15>
+      </Item16>
+      <Item17>
         <Filename Value="bcmdbuttonfocus.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCMDButtonFocus"/>
-      </Item15>
-      <Item16>
+      </Item17>
+      <Item18>
         <Filename Value="bcnumerickeyboard.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="BCNumericKeyboard"/>
-      </Item16>
-      <Item17>
+      </Item18>
+      <Item19>
         <Filename Value="bcpanel.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCPanel"/>
-      </Item17>
-      <Item18>
+      </Item19>
+      <Item20>
         <Filename Value="bcradialprogressbar.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCRadialProgressBar"/>
-      </Item18>
-      <Item19>
+      </Item20>
+      <Item21>
         <Filename Value="bcrtti.pas"/>
         <UnitName Value="BCRTTI"/>
-      </Item19>
-      <Item20>
+      </Item21>
+      <Item22>
         <Filename Value="bcsamples.pas"/>
         <UnitName Value="BCSamples"/>
-      </Item20>
-      <Item21>
+      </Item22>
+      <Item23>
         <Filename Value="bcstylesform.pas"/>
         <UnitName Value="BCStylesForm"/>
-      </Item21>
-      <Item22>
+      </Item23>
+      <Item24>
         <Filename Value="bcsvgbutton.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCSVGButton"/>
-      </Item22>
-      <Item23>
+      </Item24>
+      <Item25>
         <Filename Value="bcsvgviewer.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCSVGViewer"/>
-      </Item23>
-      <Item24>
+      </Item25>
+      <Item26>
         <Filename Value="bcthememanager.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="BCThemeManager"/>
-      </Item24>
-      <Item25>
+      </Item26>
+      <Item27>
         <Filename Value="bctoolbar.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCToolBar"/>
-      </Item25>
-      <Item26>
+      </Item27>
+      <Item28>
         <Filename Value="bctools.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="BCTools"/>
-      </Item26>
-      <Item27>
+      </Item28>
+      <Item29>
         <Filename Value="bctrackbarupdown.pas"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="BCTrackbarUpdown"/>
-      </Item27>
-      <Item28>
+      </Item29>
+      <Item30>
         <Filename Value="bctypes.pas"/>
         <AddToUsesPkgSection Value="False"/>
         <UnitName Value="BCTypes"/>
-      </Item28>
-      <Item29>
-        <Filename Value="bgracustomdrawn.pas"/>
-        <UnitName Value="BGRACustomDrawn"/>
-      </Item29>
-      <Item30>
-        <Filename Value="bgraflashprogressbar.pas"/>
-        <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAFlashProgressBar"/>
       </Item30>
       <Item31>
-        <Filename Value="bgragraphiccontrol.pas"/>
+        <Filename Value="bgracolortheme.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAGraphicControl"/>
+        <UnitName Value="BGRAColorTheme"/>
       </Item31>
       <Item32>
-        <Filename Value="bgraimagelist.pas"/>
-        <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAImageList"/>
+        <Filename Value="bgracontrolsinfo.pas"/>
+        <UnitName Value="bgracontrolsinfo"/>
       </Item32>
       <Item33>
-        <Filename Value="bgraimagemanipulation.pas"/>
-        <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAImageManipulation"/>
+        <Filename Value="bgracustomdrawn.pas"/>
+        <UnitName Value="BGRACustomDrawn"/>
       </Item33>
       <Item34>
-        <Filename Value="bgraknob.pas"/>
+        <Filename Value="bgraflashprogressbar.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAKnob"/>
+        <UnitName Value="BGRAFlashProgressBar"/>
       </Item34>
       <Item35>
-        <Filename Value="bgraresizespeedbutton.pas"/>
+        <Filename Value="bgragraphiccontrol.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAResizeSpeedButton"/>
+        <UnitName Value="BGRAGraphicControl"/>
       </Item35>
       <Item36>
-        <Filename Value="bgrashape.pas"/>
+        <Filename Value="bgraimagelist.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAShape"/>
+        <UnitName Value="BGRAImageList"/>
       </Item36>
       <Item37>
-        <Filename Value="bgraspeedbutton.pas"/>
+        <Filename Value="bgraimagemanipulation.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRASpeedButton"/>
+        <UnitName Value="BGRAImageManipulation"/>
       </Item37>
       <Item38>
-        <Filename Value="bgraspriteanimation.pas"/>
+        <Filename Value="bgraimagetheme.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRASpriteAnimation"/>
+        <UnitName Value="BGRAImageTheme"/>
       </Item38>
       <Item39>
-        <Filename Value="bgravirtualscreen.pas"/>
+        <Filename Value="bgraknob.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAVirtualScreen"/>
+        <UnitName Value="BGRAKnob"/>
       </Item39>
       <Item40>
-        <Filename Value="colorspeedbutton.pas"/>
+        <Filename Value="bgraresizespeedbutton.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="ColorSpeedButton"/>
+        <UnitName Value="BGRAResizeSpeedButton"/>
       </Item40>
       <Item41>
-        <Filename Value="dtanalogclock.pas"/>
+        <Filename Value="bgrashape.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="DTAnalogClock"/>
+        <UnitName Value="BGRAShape"/>
       </Item41>
       <Item42>
-        <Filename Value="dtanalogcommon.pas"/>
-        <UnitName Value="DTAnalogCommon"/>
+        <Filename Value="bgraspeedbutton.pas"/>
+        <HasRegisterProc Value="True"/>
+        <UnitName Value="BGRASpeedButton"/>
       </Item42>
       <Item43>
-        <Filename Value="dtanaloggauge.pas"/>
+        <Filename Value="bgraspriteanimation.pas"/>
         <HasRegisterProc Value="True"/>
-        <AddToUsesPkgSection Value="False"/>
-        <UnitName Value="DTAnalogGauge"/>
+        <UnitName Value="BGRASpriteAnimation"/>
       </Item43>
       <Item44>
-        <Filename Value="dtthemedclock.pas"/>
+        <Filename Value="bgratheme.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="dtthemedclock"/>
+        <UnitName Value="BGRATheme"/>
       </Item44>
       <Item45>
-        <Filename Value="dtthemedgauge.pas"/>
+        <Filename Value="bgrathemebutton.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="dtthemedgauge"/>
+        <UnitName Value="BGRAThemeButton"/>
       </Item45>
       <Item46>
-        <Filename Value="materialcolors.pas"/>
-        <UnitName Value="MaterialColors"/>
+        <Filename Value="bgrathemecheckbox.pas"/>
+        <HasRegisterProc Value="True"/>
+        <UnitName Value="bgrathemecheckbox"/>
       </Item46>
       <Item47>
-        <Filename Value="mouseandkeyinput/mouseandkeyinput.pas"/>
+        <Filename Value="bgrathemeradiobutton.pas"/>
+        <HasRegisterProc Value="True"/>
         <AddToUsesPkgSection Value="False"/>
-        <UnitName Value="MouseAndKeyInput"/>
+        <UnitName Value="BGRAThemeRadioButton"/>
       </Item47>
       <Item48>
-        <Filename Value="bgraimagetheme.pas"/>
+        <Filename Value="bgravirtualscreen.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAImageTheme"/>
+        <UnitName Value="BGRAVirtualScreen"/>
       </Item48>
       <Item49>
-        <Filename Value="bgrathemebutton.pas"/>
+        <Filename Value="colorspeedbutton.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAThemeButton"/>
+        <UnitName Value="ColorSpeedButton"/>
       </Item49>
       <Item50>
-        <Filename Value="bgratheme.pas"/>
+        <Filename Value="dtanalogclock.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRATheme"/>
+        <UnitName Value="DTAnalogClock"/>
       </Item50>
       <Item51>
-        <Filename Value="bgracolortheme.pas"/>
-        <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAColorTheme"/>
+        <Filename Value="dtanalogcommon.pas"/>
+        <UnitName Value="DTAnalogCommon"/>
       </Item51>
       <Item52>
-        <Filename Value="bgrathemeradiobutton.pas"/>
+        <Filename Value="dtanaloggauge.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BGRAThemeRadioButton"/>
+        <AddToUsesPkgSection Value="False"/>
+        <UnitName Value="DTAnalogGauge"/>
       </Item52>
       <Item53>
-        <Filename Value="bgracontrolsinfo.pas"/>
-        <UnitName Value="bgracontrolsinfo"/>
+        <Filename Value="dtthemedclock.pas"/>
+        <HasRegisterProc Value="True"/>
+        <UnitName Value="dtthemedclock"/>
       </Item53>
       <Item54>
-        <Filename Value="bcgradientbutton.pas"/>
+        <Filename Value="dtthemedgauge.pas"/>
         <HasRegisterProc Value="True"/>
-        <UnitName Value="BCGradientButton"/>
+        <UnitName Value="dtthemedgauge"/>
       </Item54>
       <Item55>
-        <Filename Value="bccombobox.pas"/>
-        <HasRegisterProc Value="True"/>
-        <UnitName Value="BCComboBox"/>
+        <Filename Value="materialcolors.pas"/>
+        <UnitName Value="MaterialColors"/>
       </Item55>
+      <Item56>
+        <Filename Value="mouseandkeyinput/mouseandkeyinput.pas"/>
+        <AddToUsesPkgSection Value="False"/>
+        <UnitName Value="MouseAndKeyInput"/>
+      </Item56>
     </Files>
     <RequiredPkgs Count="2">
       <Item1>

+ 18 - 17
bgracontrols.pas

@@ -8,17 +8,17 @@ unit bgracontrols;
 interface
 
 uses
-  BCButton, BCButtonFocus, BCEffect, bcfilters, BCGameGrid, BCImageButton, 
-  BCLabel, BCListBox, BCMaterialDesignButton, BCMDButton, BCMDButtonFocus, 
-  BCPanel, BCRadialProgressBar, BCRTTI, BCSamples, BCStylesForm, BCSVGButton, 
-  BCSVGViewer, BCToolBar, BCTrackbarUpdown, BGRACustomDrawn, 
+  BCButton, BCButtonFocus, BCComboBox, BCEffect, bcfilters, BCGameGrid, 
+  BCGradientButton, BCImageButton, BCLabel, BCListBox, BCMaterialDesignButton, 
+  BCMDButton, BCMDButtonFocus, BCPanel, BCRadialProgressBar, BCRTTI, 
+  BCSamples, BCStylesForm, BCSVGButton, BCSVGViewer, BCToolBar, 
+  BCTrackbarUpdown, BGRAColorTheme, bgracontrolsinfo, BGRACustomDrawn, 
   BGRAFlashProgressBar, BGRAGraphicControl, BGRAImageList, 
-  BGRAImageManipulation, BGRAKnob, BGRAResizeSpeedButton, BGRAShape, 
-  BGRASpeedButton, BGRASpriteAnimation, BGRAVirtualScreen, ColorSpeedButton, 
-  DTAnalogClock, DTAnalogCommon, DTAnalogGauge, dtthemedclock, dtthemedgauge, 
-  MaterialColors, BGRAImageTheme, BGRAThemeButton, BGRATheme, BGRAColorTheme, 
-  BGRAThemeRadioButton, bgracontrolsinfo, BCGradientButton, BCComboBox, 
-  LazarusPackageIntf;
+  BGRAImageManipulation, BGRAImageTheme, BGRAKnob, BGRAResizeSpeedButton, 
+  BGRAShape, BGRASpeedButton, BGRASpriteAnimation, BGRATheme, BGRAThemeButton, 
+  BGRAThemeCheckBox, BGRAThemeRadioButton, BGRAVirtualScreen, 
+  ColorSpeedButton, DTAnalogClock, DTAnalogCommon, DTAnalogGauge, 
+  dtthemedclock, dtthemedgauge, MaterialColors, LazarusPackageIntf;
 
 implementation
 
@@ -26,7 +26,9 @@ procedure Register;
 begin
   RegisterUnit('BCButton', @BCButton.Register);
   RegisterUnit('BCButtonFocus', @BCButtonFocus.Register);
+  RegisterUnit('BCComboBox', @BCComboBox.Register);
   RegisterUnit('BCGameGrid', @BCGameGrid.Register);
+  RegisterUnit('BCGradientButton', @BCGradientButton.Register);
   RegisterUnit('BCImageButton', @BCImageButton.Register);
   RegisterUnit('BCLabel', @BCLabel.Register);
   RegisterUnit('BCListBox', @BCListBox.Register);
@@ -39,28 +41,27 @@ begin
   RegisterUnit('BCSVGViewer', @BCSVGViewer.Register);
   RegisterUnit('BCToolBar', @BCToolBar.Register);
   RegisterUnit('BCTrackbarUpdown', @BCTrackbarUpdown.Register);
+  RegisterUnit('BGRAColorTheme', @BGRAColorTheme.Register);
   RegisterUnit('BGRAFlashProgressBar', @BGRAFlashProgressBar.Register);
   RegisterUnit('BGRAGraphicControl', @BGRAGraphicControl.Register);
   RegisterUnit('BGRAImageList', @BGRAImageList.Register);
   RegisterUnit('BGRAImageManipulation', @BGRAImageManipulation.Register);
+  RegisterUnit('BGRAImageTheme', @BGRAImageTheme.Register);
   RegisterUnit('BGRAKnob', @BGRAKnob.Register);
   RegisterUnit('BGRAResizeSpeedButton', @BGRAResizeSpeedButton.Register);
   RegisterUnit('BGRAShape', @BGRAShape.Register);
   RegisterUnit('BGRASpeedButton', @BGRASpeedButton.Register);
   RegisterUnit('BGRASpriteAnimation', @BGRASpriteAnimation.Register);
+  RegisterUnit('BGRATheme', @BGRATheme.Register);
+  RegisterUnit('BGRAThemeButton', @BGRAThemeButton.Register);
+  RegisterUnit('BGRAThemeCheckBox', @BGRAThemeCheckBox.Register);
+  RegisterUnit('BGRAThemeRadioButton', @BGRAThemeRadioButton.Register);
   RegisterUnit('BGRAVirtualScreen', @BGRAVirtualScreen.Register);
   RegisterUnit('ColorSpeedButton', @ColorSpeedButton.Register);
   RegisterUnit('DTAnalogClock', @DTAnalogClock.Register);
   RegisterUnit('DTAnalogGauge', @DTAnalogGauge.Register);
   RegisterUnit('dtthemedclock', @dtthemedclock.Register);
   RegisterUnit('dtthemedgauge', @dtthemedgauge.Register);
-  RegisterUnit('BGRAImageTheme', @BGRAImageTheme.Register);
-  RegisterUnit('BGRAThemeButton', @BGRAThemeButton.Register);
-  RegisterUnit('BGRATheme', @BGRATheme.Register);
-  RegisterUnit('BGRAColorTheme', @BGRAColorTheme.Register);
-  RegisterUnit('BGRAThemeRadioButton', @BGRAThemeRadioButton.Register);
-  RegisterUnit('BCGradientButton', @BCGradientButton.Register);
-  RegisterUnit('BCComboBox', @BCComboBox.Register);
 end;
 
 initialization

+ 57 - 4
bgratheme.pas

@@ -22,7 +22,11 @@ type
     procedure DrawButton(Caption: string; State: TBGRAThemeButtonState;
       Focused: boolean; ARect: TRect; DestCanvas: TCanvas); virtual;
     procedure DrawRadioButton(Caption: string; State: TBGRAThemeButtonState;
-      {%H-}Focused: boolean; Checked: boolean; ARect: TRect; DestCanvas: TCanvas); virtual;
+    {%H-}Focused: boolean; Checked: boolean; ARect: TRect;
+      DestCanvas: TCanvas); virtual;
+    procedure DrawCheckBox(Caption: string; State: TBGRAThemeButtonState;
+    {%H-}Focused: boolean; Checked: boolean; ARect: TRect;
+      DestCanvas: TCanvas); virtual;
   published
 
   end;
@@ -91,8 +95,8 @@ begin
       DestCanvas.Font.Color := clGray;
       Color := BGRA(204, 204, 204);
     end;
-  else {btbsNormal}
-    Color := BGRABlack;
+    else {btbsNormal}
+      Color := BGRABlack;
   end;
 
   Bitmap := TBGRABitmap.Create(ARect.Height, ARect.Height);
@@ -119,8 +123,57 @@ begin
   end;
 end;
 
+procedure TBGRATheme.DrawCheckBox(Caption: string; State: TBGRAThemeButtonState;
+  Focused: boolean; Checked: boolean; ARect: TRect; DestCanvas: TCanvas);
+var
+  Style: TTextStyle;
+  Bitmap: TBGRABitmap;
+  Color: TBGRAPixel;
+  aleft, atop, aright, abottom: integer;
+begin
+  DestCanvas.Font.Color := clBlack;
+  case State of
+    btbsHover: Color := BGRA(0, 120, 215);
+    btbsActive: Color := BGRA(0, 84, 153);
+    btbsDisabled:
+    begin
+      DestCanvas.Font.Color := clGray;
+      Color := BGRA(204, 204, 204);
+    end;
+    else {btbsNormal}
+      Color := BGRABlack;
+  end;
+
+  Bitmap := TBGRABitmap.Create(ARect.Height, ARect.Height);
+  Bitmap.Rectangle(0, 0, Bitmap.Height, Bitmap.Height, Color, BGRAWhite);
+  aleft := 0;
+  aright := Bitmap.Height;
+  atop := 0;
+  abottom := Bitmap.Height;
+  if Checked then
+    Bitmap.DrawPolyLineAntialias(Bitmap.ComputeBezierSpline(
+      [BezierCurve(pointF(aleft + 2, atop + 3), PointF((aleft + aright - 1) / 2, abottom - 3)),
+      BezierCurve(PointF((aleft + aright - 1) / 2, abottom - 3), PointF(
+      (aleft + aright - 1) / 2, (atop * 2 + abottom - 1) / 3), PointF(aright - 2, atop - 2))]),
+      Color, 1.5);
+  Bitmap.Draw(DestCanvas, Arect.Left, Arect.Top, False);
+  Bitmap.Free;
+
+  if Caption <> '' then
+  begin
+    Style.Alignment := taLeftJustify;
+    Style.Layout := tlCenter;
+    Style.Wordbreak := True;
+    Style.SystemFont := False;
+    Style.Clipping := True;
+    Style.Opaque := False;
+    DestCanvas.TextRect(Rect(Arect.Height, 0, ARect.Right, ARect.Bottom),
+      ARect.Height, 0, Caption, Style);
+  end;
+end;
+
 var
-  BasicTheme : TBGRATheme;
+  BasicTheme: TBGRATheme;
 
 initialization
 

+ 154 - 0
bgrathemecheckbox.pas

@@ -0,0 +1,154 @@
+unit BGRAThemeCheckBox;
+
+{$mode delphi}
+
+interface
+
+uses
+  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs,
+  BGRATheme, Types;
+
+type
+
+  { TBGRAThemeCheckBox }
+
+  TBGRAThemeCheckBox = class(TCustomControl)
+  private
+    FChecked: boolean;
+    FOnChange: TNotifyEvent;
+    FTheme: TBGRATheme;
+    FState: TBGRAThemeButtonState;
+    procedure SetFChecked(AValue: boolean);
+    procedure SetFTheme(AValue: TBGRATheme);
+  protected
+    class function GetControlClassDefaultSize: TSize; override;
+    procedure MouseEnter; override;
+    procedure MouseLeave; override;
+    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
+      X, Y: integer); override;
+    procedure MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: integer); override;
+    procedure Click; override;
+    procedure SetEnabled(Value: boolean); override;
+    procedure TextChanged; override;
+    procedure Paint; override;
+  public
+    constructor Create(AOwner: TComponent); override;
+  published
+    property Caption;
+    property Checked: boolean read FChecked write SetFChecked;
+    property Font;
+    property Enabled;
+    property Theme: TBGRATheme read FTheme write SetFTheme;
+    property OnChange: TNotifyEvent read FOnChange write FOnChange;
+  end;
+
+procedure Register;
+
+implementation
+
+uses BGRABitmapTypes;
+
+procedure Register;
+begin
+  RegisterComponents('BGRA Themes', [TBGRAThemeCheckBox]);
+end;
+
+{ TBGRAThemeCheckBox }
+
+procedure TBGRAThemeCheckBox.SetFTheme(AValue: TBGRATheme);
+begin
+  if FTheme = AValue then
+    Exit;
+  FTheme := AValue;
+  Invalidate;
+end;
+
+procedure TBGRAThemeCheckBox.SetFChecked(AValue: boolean);
+begin
+  if FChecked = AValue then
+    Exit;
+  FChecked := AValue;
+  Invalidate;
+  if Assigned(FOnChange) then FOnChange(Self);
+end;
+
+class function TBGRAThemeCheckBox.GetControlClassDefaultSize: TSize;
+begin
+  Result.CX := 165;
+  Result.CY := 19;
+end;
+
+procedure TBGRAThemeCheckBox.MouseEnter;
+begin
+  inherited MouseEnter;
+  FState := btbsHover;
+  Invalidate;
+end;
+
+procedure TBGRAThemeCheckBox.MouseLeave;
+begin
+  inherited MouseLeave;
+  FState := btbsNormal;
+  Invalidate;
+end;
+
+procedure TBGRAThemeCheckBox.MouseDown(Button: TMouseButton;
+  Shift: TShiftState; X, Y: integer);
+begin
+  inherited MouseDown(Button, Shift, X, Y);
+  FState := btbsActive;
+  Invalidate;
+end;
+
+procedure TBGRAThemeCheckBox.MouseUp(Button: TMouseButton;
+  Shift: TShiftState; X, Y: integer);
+begin
+  inherited MouseUp(Button, Shift, X, Y);
+  if ClientRect.Contains(Point(X, Y)) then
+    FState := btbsHover
+  else
+    FState := btbsNormal;
+  Invalidate;
+end;
+
+procedure TBGRAThemeCheckBox.Click;
+begin
+  inherited Click;
+  SetFChecked(not FChecked);
+end;
+
+procedure TBGRAThemeCheckBox.SetEnabled(Value: boolean);
+begin
+  inherited SetEnabled(Value);
+  if Value then
+    FState := btbsNormal
+  else
+    FState := btbsDisabled;
+  Invalidate;
+end;
+
+procedure TBGRAThemeCheckBox.TextChanged;
+begin
+  inherited TextChanged;
+  Invalidate;
+end;
+
+procedure TBGRAThemeCheckBox.Paint;
+begin
+  if Assigned(Theme) then
+    Theme.DrawCheckBox(Caption, FState, Focused, Checked, ClientRect, Canvas)
+  else
+    BGRADefaultTheme.DrawCheckBox(Caption, FState, Focused, Checked,
+      ClientRect, Canvas);
+end;
+
+constructor TBGRAThemeCheckBox.Create(AOwner: TComponent);
+begin
+  inherited Create(AOwner);
+  FState := btbsNormal;
+
+  with GetControlClassDefaultSize do
+    SetInitialBounds(0, 0, CX, CY);
+end;
+
+end.

+ 69 - 0
images/bgracontrols_images.lrs

@@ -9158,3 +9158,72 @@ LazarusResources.Add('tbccombobox_200','PNG',[
   +#176'u6i'#127#18#224#30#176#132#11#160#198#5'P;'#188#11#233#158#199#184#226
   +#239#19'`'#140'1Z/KNXa'#213#162#133'j'#0#0#0#0'IEND'#174'B`'#130
 ]);
+LazarusResources.Add('tbgrathemecheckbox','PNG',[
+  #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#24#8#6#0#0#0#224'w='#248#0
+  +#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149'+'
+  +#14#27#0#0#0#25'tEXtSoftware'#0'www.inkscape.org'#155#238'<'#26#0#0#1'ZIDATH'
+  +#137#237'T'#205'j'#194'@'#16#254'6'#241#167#245'`_'#162'go'#161#210#231#240
+  +#224#19#168#144','#20#138#136#15#224'A'#164#1'O'#226#173#208'g'#177#234#197
+  +''''#233#165#161'M46;'#30#210#196'Hv'#149#205#165'P'#28'X>v2'#243'}3Lf'#129
+  +#171#253#181'1'#153#243#241'y'#253#25#9#170#235#146#153#6#243#222'_'#30#238
+  +#178#190#146',0'#18'T'#127'{'#186#199'M'#153'@D'#16'B'#128#136#210#147#220
+  +#179#232#239#8#252#245'#W'#148'T'#0#0'j'#21#224#182'b'#252#146'$'#8#8'A b9$!'
+  +#164'<'#134'J@Ui'#22#151'Kvr'#215#18#184'D'#238#186'%'#180#219'5'#140#199#213
+  +#212'_'#184#131#197#130'r'#228#211'i'#21#0'0'#159'W'#177'Z'#153#197';'#152'L'
+  +#24'Z'#173#10'F#3G'#14#0#156#7#176#172'P'#217#129'r'#200'q'#229#12#174#27#135
+  +#204'fel6'#6#214'k3'#141'q'#28#31#182#237#23#159'A'#179#25'a8'#220#167#190','
+  +'9'#231#1#28#199'?'#153#141#150'@'#146#212#235#133#24#12'v'''#223'8'#15'`'
+  +#219#223#185#193'k'#11'$'#201#221#238#14#253'~p'#150'\%pv'#6#241#18#197'$'
+  +#157#206#22#141'F'#8#203#218'+'#127']-'#129#227#230#30'I,+:'#187#31'Z'#2'_['
+  +#129#253#207#229'7('#193' '#148#243'H'#5'L'#131'y'#178#135#235#146#25#12#158
+  +'n'#206#213#254#129#29#0'rf'#147#185'i'#193'`'#6#0#0#0#0'IEND'#174'B`'#130
+]);
+LazarusResources.Add('tbgrathemecheckbox_150','PNG',[
+  #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0'$'#0#0#0'$'#8#6#0#0#0#225#0#152#152
+  +#0#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149
+  +'+'#14#27#0#0#0#25'tEXtSoftware'#0'www.inkscape.org'#155#238'<'#26#0#0#1#142
+  +'IDATX'#133#237#214#191'N'#194'@'#28#7#240#239#149#211'X'#193#20'V'#158#0#195
+  +#214'.&nL'#188#0#225#223'#'#16'&_'#192#23'pr.'#166#240#22#192#194'`'#144#174
+  +#236#237#192#0'qRi'#252'CK'#207#129'HTJ[L/'#196#208'o'#210#165#151#187#251'\'
+  +'.'#247#187#3#226#196#137's`!~'#141#151'W'#15's'#199'E*'#202#9#169#0#235#254
+  +#230#226'lk'#187'_g'#199'E'#170'{}'#14#198'Xd_'#245#246#209'w'#129'B'#208#138
+  +#162#196'0'#198#130#166'; '#208'b'#225#221'w/ '#195#0#10#5#17#189'^b'#255' '
+  +#195#0#170#213'SL&'#2#26#13#17#253'>'#229#15'r]'#127#204'l'#182#170'&'#182'M'
+  +#208'l&1'#24'P~ ]''('#22#143'0'#157#194#23#243#21'Qd'#200'd\> ]'''#168#215')'
+  +#198'c'#130'R'#233'x'#141#218#134#145'$'#134'V'#235#5#249#188#29'=h4"'#168
+  +#213'(,k'#245#223'4'#9#202#229#19#12#135#130'''&'#157'v'#161'i'#207'?0a@'#190
+  +#149#250';'#136#16#128#252#186'hL'#147#160'R'#17'7'#250'H'#18#131#170#206#145
+  +#203'9'#252'N'#153#162','#209#233'| '#21'p'#179'ym'#19#183'S'#166'(K'#180#219
+  +#239'H&'#189#7#14#194'p9e'#178#236'@'#211#222'6Pa0'#220#234#144',;'#184#187
+  +'{]'#163#194'b'#184'VjY'#182#161#170#22#178'Y74&'#210'S'#182#13#213#237'>'
+  +#129'R7'#20#134';'#136'1'#6'Jw'#187#235#130'r8'#239#161#191'`'#128#128'-'#163
+  +#2#172#160'7'#240#174'I'#16'fE9^'#156'8q'#254'}>'#1'/'#174#202#189#221'Z!'#28
+  +#0#0#0#0'IEND'#174'B`'#130
+]);
+LazarusResources.Add('tbgrathemecheckbox_200','PNG',[
+  #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0'0'#0#0#0'0'#8#6#0#0#0'W'#2#249#135
+  +#0#0#0#4'sBIT'#8#8#8#8'|'#8'd'#136#0#0#0#9'pHYs'#0#0#14#196#0#0#14#196#1#149
+  +'+'#14#27#0#0#0#25'tEXtSoftware'#0'www.inkscape.org'#155#238'<'#26#0#0#2#11
+  +'IDATh'#129#237#152#193'N"1'#28#135#191#194#0#198'l/>'#132#217#139'z\'#15'.'
+  +#137'w'#19'o'#26#162#23#223'`'#223'@'#230#13#136#156'E4'#26#159#193#179#30'v'
+  +#143'$>'#0#30'L'#200#198#196#136'f'#179#11#218'z '#152#193#29#198#169#208#2
+  +'I'#191#132#16'2C'#251#253#242#239#159#150#1#143#199#227#241'xf'#24#145#230
+  +#166'o?~^"X'#179'-3'#128#230#234'We'#245#251'G'#183'eR'#13#230'Z'#222'`'#206
+  +#192'd'#204#139#253#175#0'h'#173#223'^6>'#151#170#191'S;'#165#171'@'#4#219
+  +#242#253'w+'#1'\'#200';'#9#224'"'#140#181#0#227#144'SJsw7|<k'#1#198'%'#31#134
+  +'y66'#230#185#185#201#204'V'#15#244#229#235#245'<'#173'V'#134'Ri'#158'fS'#204
+  +'F'#15'D'#229#251#180'Z'#25'vv'#190#196'V'#194'Z'#128'8'#185'N''9'#156'R'#154
+  +'ryP>'#26'bwWr{+'#140#229#141#3#196#201'=<'#192#230'f'#192#225'av'#168'|'#24
+  +#230'9>'#254'_'#190#207#226#226'3'#11#11'/o'#223'7'#193'h'''#142#147#223#222
+  +#14'h4'#4#141'F'#128#214#154#189#189'n'#226#178'yO'#177#216#161'ZmS(8'#238
+  +#129#168'|'#239#26#148#203'9j'#181'`$y'#235#21#0#184#191#135#173#173#128#235
+  +'k'#241#238':'#132'a'#30#173'5'#205#166'H\6'#235#235']'#14#14#30#201#229'F'
+  +#219#7#140#2#244'$5B@6'#171#137';'#141#247'B'#20#18#199'('#22';T*'#237'Xy''K'
+  +'HJ'#197#249'y'#151#149#21'e4'#25'$/'#27#167'= '#165#226#236#236#159'Q'#136
+  +'4'#242'N'#247#1')'#21#167#167#127'S'#133#176'!o'#28' n2)'#21''''''#127'X^~'
+  +#25#139#252'D'#206'BI!L'#229'''v'#22#146'RQ'#175'?'#13#132#248#140#252'D'#206
+  +'B'#209'J'#28#29'='#178#180#244#236'D'#30'>'#185#15'|T'#137'Z'#173#205#220
+  +#156#30#250';?'#206#30#24#233',4'#188#18#254'?'#177#189#0#211'$o'#28'`'#218
+  +#228#193#176#7'L'#158#152#185'"]'#5'4W'#150'='#166'cN'#143#199#227#241'x\'
+  +#243#10#169' '#197#236#182#215'#b'#0#0#0#0'IEND'#174'B`'#130
+]);

+ 4 - 1
images/bgracontrols_images_list.txt

@@ -99,4 +99,7 @@ tbgrathemeradiobutton_150.png
 tbgrathemeradiobutton_200.png
 tbccombobox.png
 tbccombobox_150.png
-tbccombobox_200.png
+tbccombobox_200.png
+tbgrathemecheckbox.png
+tbgrathemecheckbox_150.png
+tbgrathemecheckbox_200.png

BIN
images/tbgrathemecheckbox.png


BIN
images/tbgrathemecheckbox_150.png


BIN
images/tbgrathemecheckbox_200.png


+ 32 - 6
test/test_bgrathemes/umain.lfm

@@ -80,6 +80,32 @@ object frmBGRAThemesButton: TfrmBGRAThemesButton
     ListBox.Style = lbOwnerDrawFixed
     ListBox.TabOrder = 0
   end
+  object BGRAThemeCheckBox1: TBGRAThemeCheckBox
+    Left = 168
+    Height = 16
+    Top = 104
+    Width = 160
+    Caption = 'CheckBox'
+    Checked = False
+  end
+  object BGRAThemeCheckBox2: TBGRAThemeCheckBox
+    Left = 168
+    Height = 16
+    Top = 128
+    Width = 160
+    Caption = 'CheckBox'
+    Checked = True
+    Enabled = False
+  end
+  object BGRAThemeCheckBox3: TBGRAThemeCheckBox
+    Left = 168
+    Height = 16
+    Top = 152
+    Width = 160
+    Caption = 'CheckBox'
+    Checked = False
+    Enabled = False
+  end
   object BGRAColorTheme1: TBGRAColorTheme
     ColorNormal = 4227327
     ColorHover = 16744576
@@ -87,16 +113,16 @@ object frmBGRAThemesButton: TfrmBGRAThemesButton
     ColorDisabled = clGray
     ColorFocused = clBlack
     ColorText = clWhite
-    Left = 232
-    Top = 73
+    Left = 368
+    Top = 81
   end
   object BGRAImageTheme1: TBGRAImageTheme
     BackgroundColor = clWhite
-    Left = 224
-    Top = 130
+    Left = 368
+    Top = 138
   end
   object BGRATheme1: TBGRATheme
-    Left = 232
-    Top = 24
+    Left = 368
+    Top = 32
   end
 end

+ 4 - 1
test/test_bgrathemes/umain.pas

@@ -7,7 +7,7 @@ interface
 uses
   Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, BGRATheme,
   BGRAThemeButton, BGRAColorTheme, BGRAImageTheme, BGRAThemeRadioButton,
-  BCListBox;
+  BCListBox, BGRAThemeCheckBox;
 
 type
 
@@ -19,6 +19,9 @@ type
     BGRATheme1: TBGRATheme;
     BGRAThemeButton1: TBGRAThemeButton;
     BGRAThemeButton2: TBGRAThemeButton;
+    BGRAThemeCheckBox1: TBGRAThemeCheckBox;
+    BGRAThemeCheckBox2: TBGRAThemeCheckBox;
+    BGRAThemeCheckBox3: TBGRAThemeCheckBox;
     BGRAThemeRadioButton1: TBGRAThemeRadioButton;
     BGRAThemeRadioButton2: TBGRAThemeRadioButton;
     BGRAThemeRadioButton3: TBGRAThemeRadioButton;