diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp index 8fa0da06583..3eef938df26 100644 --- a/src/plugins/styles/modernwindows/qwindows11style.cpp +++ b/src/plugins/styles/modernwindows/qwindows11style.cpp @@ -415,19 +415,19 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt #endif #if QT_CONFIG(combobox) case CC_ComboBox: - if (const QStyleOptionComboBox *sb = qstyleoption_cast(option)) { + if (const QStyleOptionComboBox *combobox = qstyleoption_cast(option)) { QBrush fillColor = state & State_MouseOver && !(state & State_HasFocus) ? QBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]) : option->palette.brush(QPalette::Base); QRectF rect = option->rect.adjusted(2,2,-2,-2); painter->setBrush(fillColor); - painter->setPen(highContrastTheme == true ? sb->palette.buttonText().color() : WINUI3Colors[colorSchemeIndex][frameColorLight]); + painter->setPen(highContrastTheme == true ? combobox->palette.buttonText().color() : WINUI3Colors[colorSchemeIndex][frameColorLight]); painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); if (sub & SC_ComboBoxArrow) { - QRectF rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget).adjusted(0, 0, 0, 1); + QRectF rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget).adjusted(-4, 0, -4, 1); painter->setFont(assetFont); - painter->setPen(sb->palette.text().color()); + painter->setPen(combobox->palette.text().color()); painter->drawText(rect,"\uE019", Qt::AlignVCenter | Qt::AlignHCenter); } - if (sb->editable) { + if (combobox->editable) { QColor lineColor = state & State_HasFocus ? option->palette.accent().color() : QColor(0,0,0); painter->setPen(QPen(lineColor)); painter->drawLine(rect.bottomLeft() + QPoint(2,1), rect.bottomRight() + QPoint(-2,1)); @@ -1620,6 +1620,27 @@ int QWindows11Style::styleHint(StyleHint hint, const QStyleOption *opt, } } +QRect QWindows11Style::subElementRect(QStyle::SubElement element, const QStyleOption *option, + const QWidget *widget) const +{ + QRect ret; + switch (element) { + case QStyle::SE_LineEditContents: + ret = option->rect.adjusted(8,0,-8,0); + break; + case QStyle::SE_ItemViewItemText: + if (widget && widget->parentWidget() && + widget->parentWidget()->inherits("QComboBoxPrivateContainer")) + ret = option->rect.adjusted(5,0,-5,0); + else + ret = QWindowsVistaStyle::subElementRect(element, option, widget); + break; + default: + ret = QWindowsVistaStyle::subElementRect(element, option, widget); + } + return ret; +} + /*! \internal */ @@ -1629,6 +1650,19 @@ QRect QWindows11Style::subControlRect(ComplexControl control, const QStyleOption QRect ret; switch (control) { +#if QT_CONFIG(combobox) + case QStyle::CC_ComboBox: + if (const QStyleOptionComboBox *combobox = qstyleoption_cast(option)) { + switch (subControl) { + case SC_ComboBoxEditField: + ret = combobox->rect.adjusted(8,0,0,0); + break; + default: + ret = QWindowsVistaStyle::subControlRect(control, option, subControl, widget); + } + } + break; +#endif #if QT_CONFIG(spinbox) case CC_SpinBox: if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast(option)) { diff --git a/src/plugins/styles/modernwindows/qwindows11style_p.h b/src/plugins/styles/modernwindows/qwindows11style_p.h index c4798977bf2..90e368f1ea4 100644 --- a/src/plugins/styles/modernwindows/qwindows11style_p.h +++ b/src/plugins/styles/modernwindows/qwindows11style_p.h @@ -33,6 +33,8 @@ public: QPainter *painter, const QWidget *widget) const override; void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const override; + QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, + const QWidget *widget = nullptr) const override; QRect subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const override; void drawControl(ControlElement element, const QStyleOption *option, diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index 7742d2ac59a..208627394d3 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -3554,11 +3554,12 @@ void tst_QLineEdit::textMargin_data() QLineEdit testWidget; QFontMetrics metrics(testWidget.font()); const QString s = QLatin1String("MMM MMM MMM"); + const int windows11StyleHorizontalOffset = qApp->style()->inherits("QWindows11Style") ? 8 : 0; // Different styles generate different offsets, so // calculate the width rather than hardcode it. - const int pixelWidthOfM = metrics.horizontalAdvance(s, 1); - const int pixelWidthOfMMM_MM = metrics.horizontalAdvance(s, 6); + const int pixelWidthOfM = windows11StyleHorizontalOffset + metrics.horizontalAdvance(s, 1); + const int pixelWidthOfMMM_MM = windows11StyleHorizontalOffset + metrics.horizontalAdvance(s, 6); QTest::newRow("default-0") << 0 << 0 << 0 << 0 << QPoint(pixelWidthOfMMM_MM, 0) << 6; QTest::newRow("default-1") << 0 << 0 << 0 << 0 << QPoint(1, 1) << 0;