Increase padding for LineEdit controls in QWindows11Style

Change-Id: Ibf8e43160d7ae0aff04040f0e2bcf5bfbda52e1d
Reviewed-by: Oliver Wolff <oliver.wolff@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
(cherry picked from commit 172422fcee0036b8c14bf9bda42dfe7d05804d5a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Wladimir Leuschner 2023-11-24 15:14:11 +01:00 committed by Qt Cherry-pick Bot
parent 7384f78b2f
commit 4ff72f1bfd
3 changed files with 44 additions and 7 deletions

View File

@ -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<const QStyleOptionComboBox *>(option)) {
if (const QStyleOptionComboBox *combobox = qstyleoption_cast<const QStyleOptionComboBox *>(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<const QStyleOptionComboBox *>(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<const QStyleOptionSpinBox *>(option)) {

View File

@ -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,

View File

@ -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;