mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-22 14:59:30 +02:00
checkboxthemed: High-DPI
git-svn-id: trunk@54237 -
This commit is contained in:
parent
c4bbb8fbea
commit
9d2597a2b5
@ -45,8 +45,10 @@ type
|
||||
procedure SetCheckBoxHovered(AValue: Boolean);
|
||||
procedure SetChecked(AValue: Boolean);
|
||||
procedure SetState(AValue: TCheckBoxState);
|
||||
private class var
|
||||
FThemeCheckBoxSize: TSize;
|
||||
protected
|
||||
class var CheckBoxSize: TSize;
|
||||
class function GetCheckBoxSize(const PixelsPerInch: Integer): TSize;
|
||||
protected
|
||||
CheckBoxPressed: Boolean;
|
||||
KnobPosUnchecked, KnobPosChecked, KnobPosGrayed: Integer;
|
||||
@ -54,7 +56,7 @@ type
|
||||
{%H-}WithThemeSpace: Boolean); override;
|
||||
procedure CMBiDiModeChanged(var {%H-}Message: TLMessage); message CM_BIDIMODECHANGED;
|
||||
procedure CMEnabledChanged(var Message: TLMessage); message CM_ENABLEDCHANGED;
|
||||
class constructor InitCheckBoxSize;
|
||||
class procedure InitCheckBoxSize;
|
||||
function DialogChar(var Message: TLMKey): Boolean; override;
|
||||
procedure DoClick;
|
||||
procedure DoEnter; override;
|
||||
@ -197,8 +199,9 @@ procedure TCustomCheckBoxThemed.CalculatePreferredSize(var PreferredWidth,
|
||||
PreferredHeight: Integer; WithThemeSpace: Boolean);
|
||||
var aDetails: TThemedElementDetails;
|
||||
aFlags: Cardinal;
|
||||
aTextSize: TSize;
|
||||
aTextSize, CheckBoxSize: TSize;
|
||||
begin
|
||||
CheckBoxSize := GetCheckBoxSize(Font.PixelsPerInch);
|
||||
if Caption <> '' then begin
|
||||
aDetails := ThemeServices.GetElementDetails(tbCheckBoxCheckedNormal);
|
||||
aFlags := DT_CENTER + DT_VCENTER;
|
||||
@ -226,10 +229,10 @@ begin
|
||||
inherited CMEnabledChanged(Message);
|
||||
end;
|
||||
|
||||
class constructor TCustomCheckBoxThemed.InitCheckBoxSize;
|
||||
class procedure TCustomCheckBoxThemed.InitCheckBoxSize;
|
||||
begin
|
||||
with ThemeServices do
|
||||
CheckBoxSize := GetDetailSize(GetElementDetails(tbCheckBoxCheckedNormal));
|
||||
FThemeCheckBoxSize := GetDetailSize(GetElementDetails(tbCheckBoxCheckedNormal));
|
||||
end;
|
||||
|
||||
function TCustomCheckBoxThemed.DialogChar(var Message: TLMKey): Boolean;
|
||||
@ -276,6 +279,15 @@ begin
|
||||
Result := TCheckBoxThemedActionLink;
|
||||
end;
|
||||
|
||||
class function TCustomCheckBoxThemed.GetCheckBoxSize(
|
||||
const PixelsPerInch: Integer): TSize;
|
||||
begin
|
||||
if FThemeCheckBoxSize.cx<=0 then
|
||||
InitCheckBoxSize;
|
||||
Result.cx := MulDiv(FThemeCheckBoxSize.cx, PixelsPerInch, Screen.PixelsPerInch);
|
||||
Result.cy := MulDiv(FThemeCheckBoxSize.cy, PixelsPerInch, Screen.PixelsPerInch);
|
||||
end;
|
||||
|
||||
procedure TCustomCheckBoxThemed.KeyDown(var Key: Word; Shift: TShiftState);
|
||||
begin
|
||||
inherited KeyDown(Key, Shift);
|
||||
@ -333,7 +345,7 @@ var aCaptionPoint, aCheckBoxPoint: TPoint;
|
||||
aDetails: TThemedElementDetails;
|
||||
aFlags: Cardinal;
|
||||
aHelpRect: TRect;
|
||||
aTextSize: TSize; { Hovered, Pressed, State }
|
||||
aTextSize, CheckBoxSize: TSize; { Hovered, Pressed, State }
|
||||
const caEnabledDetails: array [False..True, False..True, cbUnchecked..cbGrayed] of TThemedButton =
|
||||
(((tbCheckBoxUncheckedNormal, tbCheckBoxCheckedNormal, tbCheckBoxMixedNormal),
|
||||
(tbCheckBoxUncheckedPressed, tbCheckBoxCheckedPressed, tbCheckBoxMixedPressed)),
|
||||
@ -342,6 +354,7 @@ const caEnabledDetails: array [False..True, False..True, cbUnchecked..cbGrayed]
|
||||
const caDisabledDetails: array [cbUnchecked..cbGrayed] of TThemedButton =
|
||||
(tbCheckBoxUncheckedDisabled, tbCheckBoxCheckedDisabled, tbCheckBoxMixedDisabled);
|
||||
begin
|
||||
CheckBoxSize := GetCheckBoxSize(ACanvas.Font.PixelsPerInch);
|
||||
{ Calculate }
|
||||
if AEnabled then
|
||||
aDetails := ThemeServices.GetElementDetails(caEnabledDetails[AHovered, False, AState])
|
||||
|
Loading…
Reference in New Issue
Block a user