qt, qt5, qt6: Fix AutoSize of multi-lined TToggleBox and TButton, issue #41696.

This commit is contained in:
wp_xyz 2025-06-14 19:26:14 +02:00
parent f5f0f6d377
commit 2b0787fbf3
3 changed files with 48 additions and 8 deletions

View File

@ -6009,6 +6009,11 @@ procedure TQtPushButton.preferredSize(var PreferredWidth,
var
Size: TSize;
function HasLineBreak(AText: WideString): Boolean;
begin
Result := (pos(#10, AText) > 0) or (pos(#13, AText) > 0);
end;
function AutoSizeButtonFromStyle(const ASize: TSize): TSize;
var
AOpt: QStyleOptionButtonH;
@ -6018,6 +6023,7 @@ var
BtnHeight: Integer;
AIcon: QIconH;
IconSize: TSize;
R: TRect;
{style pixel metrics}
BtnMargin, FocusH, FocusV, ShiftH, ShiftV: Integer;
begin
@ -6029,8 +6035,16 @@ var
AMetrics := QFontMetrics_create(QWidget_font(Widget));
try
QStyleOption_fontMetrics(AOpt, AMetrics);
BtnWidth := QFontMetrics_width(AMetrics, PWideString(@AText));
BtnHeight := QFontMetrics_height(AMetrics);
if HasLineBreak(AText) then
begin
QFontMetrics_boundingrect(AMetrics, @R, 0, 0, 10000, 10000, 0, PWideString(@AText));
BtnWidth := R.Right - R.Left;
BtnHeight := R.Bottom - R.Top;
end else
begin
BtnWidth := QFontMetrics_width(AMetrics, PWideString(@AText));
BtnHeight := QFontMetrics_height(AMetrics);
end;
Result.cx := BtnWidth;
Result.cy := BtnHeight;

View File

@ -6259,6 +6259,11 @@ procedure TQtPushButton.preferredSize(var PreferredWidth,
var
Size: TSize;
function HasLineBreak(AText: WideString): Boolean;
begin
Result := (pos(#10, AText) > 0) or (pos(#13, AText) > 0);
end;
function AutoSizeButtonFromStyle(const ASize: TSize): TSize;
var
AOpt: QStyleOptionButtonH;
@ -6268,6 +6273,7 @@ var
BtnHeight: Integer;
AIcon: QIconH;
IconSize: TSize;
R: TRect;
{style pixel metrics}
BtnMargin, FocusH, FocusV, ShiftH, ShiftV: Integer;
begin
@ -6279,8 +6285,16 @@ var
AMetrics := QFontMetrics_create(QWidget_font(Widget));
try
QStyleOption_fontMetrics(AOpt, AMetrics);
BtnWidth := QFontMetrics_width(AMetrics, PWideString(@AText));
BtnHeight := QFontMetrics_height(AMetrics);
if HasLineBreak(AText) then
begin
QFontMetrics_boundingrect(AMetrics, @R, 0, 0, 10000, 10000, 0, PWideString(@AText));
BtnWidth := R.Right - R.Left;
BtnHeight := R.Bottom - R.Top;
end else
begin
BtnWidth := QFontMetrics_width(AMetrics, PWideString(@AText));
BtnHeight := QFontMetrics_height(AMetrics);
end;
Result.cx := BtnWidth;
Result.cy := BtnHeight;

View File

@ -6212,6 +6212,11 @@ procedure TQtPushButton.preferredSize(var PreferredWidth,
var
Size: TSize;
function HasLineBreak(AText: WideString): Boolean;
begin
Result := (pos(#10, AText) > 0) or (pos(#13, AText) > 0);
end;
function AutoSizeButtonFromStyle(const ASize: TSize): TSize;
var
AOpt: QStyleOptionButtonH;
@ -6221,9 +6226,9 @@ var
BtnHeight: Integer;
AIcon: QIconH;
IconSize: TSize;
R: TRect;
{style pixel metrics}
BtnMargin, FocusH, FocusV, ShiftH, ShiftV: Integer;
ARect: TRect;
begin
Result := ASize;
AOpt := QStyleOptionButton_create();
@ -6233,9 +6238,16 @@ var
AMetrics := QFontMetrics_create(QWidget_font(Widget));
try
QStyleOption_fontMetrics(AOpt, AMetrics);
//QFontMetrics_boundingRect(AMetrics,@ARect, 0, 0, 10000,10000, 0, PWideString(@AText));
BtnWidth := QFontMetrics_width(AMetrics, PWideString(@AText));
BtnHeight := QFontMetrics_height(AMetrics);
if HasLineBreak(AText) then
begin
QFontMetrics_boundingrect(AMetrics, @R, 0, 0, 10000, 10000, 0, PWideString(@AText));
BtnWidth := R.Right - R.Left;
BtnHeight := R.Bottom - R.Top;
end else
begin
BtnWidth := QFontMetrics_width(AMetrics, PWideString(@AText));
BtnHeight := QFontMetrics_height(AMetrics);
end;
Result.cx := BtnWidth;
Result.cy := BtnHeight;