mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-16 23:09:16 +02:00
LCL/TCustomCheckbox and descendants: Measure size of checkbox/radiobutton symbol from ThemeServices rather than from SystemMetrics. Fixes issue #39398.
This commit is contained in:
parent
736e71078e
commit
d33a33921c
@ -1988,17 +1988,33 @@ end;
|
|||||||
class procedure TWin32WSCustomCheckBox.GetPreferredSize(const AWinControl: TWinControl;
|
class procedure TWin32WSCustomCheckBox.GetPreferredSize(const AWinControl: TWinControl;
|
||||||
var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean);
|
var PreferredWidth, PreferredHeight: integer; WithThemeSpace: Boolean);
|
||||||
var
|
var
|
||||||
|
dx: Integer; // pixel spacing between checkbox and text
|
||||||
iconHeight: integer;
|
iconHeight: integer;
|
||||||
|
iconWidth: Integer;
|
||||||
|
details: TThemedElementDetails;
|
||||||
begin
|
begin
|
||||||
if MeasureText(AWinControl, AWinControl.Caption, PreferredWidth, PreferredHeight) then
|
if MeasureText(AWinControl, AWinControl.Caption, PreferredWidth, PreferredHeight) then
|
||||||
begin
|
begin
|
||||||
Inc(PreferredWidth, GetSystemMetrics(SM_CXMENUCHECK));
|
|
||||||
// pixels spacing between checkbox and text
|
|
||||||
if ThemeServices.ThemesEnabled then
|
if ThemeServices.ThemesEnabled then
|
||||||
Inc(PreferredWidth, 4)
|
begin
|
||||||
else
|
dx := 4;
|
||||||
Inc(PreferredWidth, 6);
|
if AWinControl is TRadioButton then
|
||||||
iconHeight := GetSystemMetrics(SM_CYMENUCHECK);
|
details := ThemeServices.GetElementDetails(tbRadioButtonCheckedNormal)
|
||||||
|
else
|
||||||
|
// ToDo: Handle TToggleBox separately from TCheckbox
|
||||||
|
details := ThemeServices.GetElementDetails(tbCheckBoxCheckedNormal);
|
||||||
|
with ThemeServices.GetDetailSize(details) do
|
||||||
|
begin
|
||||||
|
iconWidth := CX;
|
||||||
|
iconHeight := CY;
|
||||||
|
end;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
dx := 6;
|
||||||
|
iconWidth := GetSystemMetrics(SM_CXMENUCHECK);
|
||||||
|
iconHeight := GetSystemMetrics(SM_CYMENUCHECK);
|
||||||
|
end;
|
||||||
|
Inc(PreferredWidth, iconWidth + dx);
|
||||||
if iconHeight > PreferredHeight then
|
if iconHeight > PreferredHeight then
|
||||||
PreferredHeight := iconHeight;
|
PreferredHeight := iconHeight;
|
||||||
if WithThemeSpace then
|
if WithThemeSpace then
|
||||||
|
Loading…
Reference in New Issue
Block a user