From 9107817eaceaacc968dbc767c24594566d637b8c Mon Sep 17 00:00:00 2001 From: Wladimir Leuschner Date: Fri, 18 Oct 2024 12:27:26 +0200 Subject: [PATCH] QWindows11Style: Calculate Spinbox size based on CommonStyle size Use the calculation from Commonstyle and add the increased padding and horizontally layouted buttons to the horizontal size hint. Fixes: QTBUG-130288 Change-Id: I7932b782e7873a0178091a51379f17453eb585fd Reviewed-by: Oliver Wolff (cherry picked from commit 96d46cad43517adefa2eb7cb8819a0b2cc9241e6) Reviewed-by: Qt Cherry-pick Bot --- .../styles/modernwindows/qwindows11style.cpp | 31 ++++--------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp index a0b3c8c2b91..66b1ae4f544 100644 --- a/src/plugins/styles/modernwindows/qwindows11style.cpp +++ b/src/plugins/styles/modernwindows/qwindows11style.cpp @@ -2042,41 +2042,22 @@ QSize QWindows11Style::sizeFromContents(ContentsType type, const QStyleOption *o } break; #endif // QT_CONFIG(menu) +#if QT_CONFIG(spinbox) case QStyle::CT_SpinBox: { if (const auto *spinBoxOpt = qstyleoption_cast(option)) { // Add button + frame widths - int width = 0; -#if QT_CONFIG(datetimeedit) - if (const QDateTimeEdit *spinBox = qobject_cast(widget)) { - const QSize textSizeMin = spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, spinBox->minimumDateTime().toString(spinBox->displayFormat())); - const QSize textSizeMax = spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, spinBox->maximumDateTime().toString(spinBox->displayFormat())); - width = qMax(textSizeMin.width(),textSizeMax.width()); - } else -#endif - if (const QSpinBox *spinBox = qobject_cast(widget)) { - const QSize textSizeMin = spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, QString::number(spinBox->minimum())); - const QSize textSizeMax = spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, QString::number(spinBox->maximum())); - width = qMax(textSizeMin.width(),textSizeMax.width()); - width += spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, spinBox->prefix()).width(); - width += spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, spinBox->suffix()).width(); - - } else if (const QDoubleSpinBox *spinBox = qobject_cast(widget)) { - const QSize textSizeMin = spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, QString::number(spinBox->minimum())); - const QSize textSizeMax = spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, QString::number(spinBox->maximum())); - width = qMax(textSizeMin.width(),textSizeMax.width()); - width += spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, spinBox->prefix()).width(); - width += spinBoxOpt->fontMetrics.size(Qt::TextSingleLine, spinBox->suffix()).width(); - } const qreal dpi = QStyleHelper::dpi(option); const bool hasButtons = (spinBoxOpt->buttonSymbols != QAbstractSpinBox::NoButtons); - const int buttonWidth = hasButtons ? 2 * qRound(QStyleHelper::dpiScaled(16, dpi)) : 0; + const int margins = 8; + const int buttonWidth = hasButtons ? qRound(QStyleHelper::dpiScaled(16, dpi)) : 0; const int frameWidth = spinBoxOpt->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinBoxOpt, widget) : 0; - contentSize.setWidth(2 * 12 + width); - contentSize += QSize(buttonWidth + 2 * frameWidth, 2 * frameWidth); + + contentSize += QSize(2 * buttonWidth + 2 * frameWidth + 2 * margins, 2 * frameWidth); } break; } +#endif default: contentSize = QWindowsVistaStyle::sizeFromContents(type, option, size, widget); break;