summaryrefslogtreecommitdiffstats
path: root/src/plugins/styles/modernwindows/qwindows11style.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/styles/modernwindows/qwindows11style.cpp')
-rw-r--r--src/plugins/styles/modernwindows/qwindows11style.cpp267
1 files changed, 151 insertions, 116 deletions
diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp
index 13682256370..6fd857828d3 100644
--- a/src/plugins/styles/modernwindows/qwindows11style.cpp
+++ b/src/plugins/styles/modernwindows/qwindows11style.cpp
@@ -87,34 +87,35 @@ inline ControlState calcControlState(const QStyleOption *option)
} // namespace StyleOptionHelper
-#define AcceptMedium u"\uF78C"_s
-// QStringLiteral(u"\uE73C")
-#define Dash12 u"\uE629"_s
-#define CheckMark u"\uE73E"_s
-
-#define CaretLeftSolid8 u"\uEDD9"_s
-#define CaretRightSolid8 u"\uEDDA"_s
-#define CaretUpSolid8 u"\uEDDB"_s
-#define CaretDownSolid8 u"\uEDDC"_s
-
-#define ChevronDown u"\uE70D"_s
-#define ChevronUp u"\uE70E"_s
-
-#define ChevronDownMed u"\uE972"_s
-#define ChevronLeftMed u"\uE973"_s
-#define ChevronRightMed u"\uE974"_s
-
-#define ChevronUpSmall u"\uE96D"_s
-#define ChevronDownSmall u"\uE96E"_s
-
-#define ChromeMinimize u"\uE921"_s
-#define ChromeMaximize u"\uE922"_s
-#define ChromeRestore u"\uE923"_s
-#define ChromeClose u"\uE8BB"_s
+enum class Icon : ushort
+{
+ AcceptMedium = 0xF78C,
+ Dash12 = 0xE629,
+ CheckMark = 0xE73E,
+ CaretLeftSolid8 = 0xEDD9,
+ CaretRightSolid8 = 0xEDDA,
+ CaretUpSolid8 = 0xEDDB,
+ CaretDownSolid8 = 0xEDDC,
+ ChevronDown = 0xE70D,
+ ChevronUp = 0xE70E,
+ ChevronDownMed = 0xE972,
+ ChevronLeftMed = 0xE973,
+ ChevronRightMed = 0xE974,
+ ChevronUpSmall = 0xE96D,
+ ChevronDownSmall = 0xE96E,
+ ChromeMinimize = 0xE921,
+ ChromeMaximize = 0xE922,
+ ChromeRestore = 0xE923,
+ ChromeClose = 0xE8BB,
+ More = 0xE712,
+ Help = 0xE897,
+ Clear = 0xE894,
+};
-#define More u"\uE712"_s
-#define Help u"\uE897"_s
-#define Clear u"\uE894"_s
+static inline QString fluentIcon(Icon i)
+{
+ return QChar(ushort(i));
+}
template <typename R, typename P, typename B>
static inline void drawRoundedRect(QPainter *p, R &&rect, P &&pen, B &&brush)
@@ -316,7 +317,7 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
{
QWindows11StylePrivate *d = const_cast<QWindows11StylePrivate*>(d_func());
- const auto drawTitleBarButton = [&](ComplexControl control, SubControl sc, const QString &str) {
+ const auto drawTitleBarButton = [&](ComplexControl control, SubControl sc, Icon ico) {
using namespace StyleOptionHelper;
const QRect buttonRect = proxy()->subControlRect(control, option, sc, widget);
if (buttonRect.isValid()) {
@@ -324,10 +325,10 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
if (hover)
painter->fillRect(buttonRect, winUI3Color(subtleHighlightColor));
painter->setPen(option->palette.color(QPalette::WindowText));
- painter->drawText(buttonRect, Qt::AlignCenter, str);
+ painter->drawText(buttonRect, Qt::AlignCenter, fluentIcon(ico));
}
};
- const auto drawTitleBarCloseButton = [&](ComplexControl control, SubControl sc, const QString &str) {
+ const auto drawTitleBarCloseButton = [&](ComplexControl control, SubControl sc, Icon ico) {
using namespace StyleOptionHelper;
const QRect buttonRect = proxy()->subControlRect(control, option, sc, widget);
if (buttonRect.isValid()) {
@@ -349,7 +350,7 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
break;
}
painter->setPen(pen);
- painter->drawText(buttonRect, Qt::AlignCenter, str);
+ painter->drawText(buttonRect, Qt::AlignCenter, fluentIcon(ico));
}
};
@@ -416,18 +417,13 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
sb, sb->rect.size());
if (cp.needsPainting()) {
const auto frameRect = QRectF(option->rect).marginsRemoved(QMarginsF(1.5, 1.5, 1.5, 1.5));
- drawRoundedRect(cp.painter(), frameRect, Qt::NoPen, option->palette.brush(QPalette::Base));
+ drawRoundedRect(cp.painter(), frameRect, Qt::NoPen, inputFillBrush(option, widget));
if (sb->frame && (sub & SC_SpinBoxFrame))
drawLineEditFrame(cp.painter(), frameRect, option);
- const bool isMouseOver = state & State_MouseOver;
- const bool hasFocus = state & State_HasFocus;
- const bool isEnabled = state & QStyle::State_Enabled;
- if (isEnabled && isMouseOver && !hasFocus && !highContrastTheme)
- drawRoundedRect(cp.painter(), frameRect, Qt::NoPen, winUI3Color(subtleHighlightColor));
-
const auto drawUpDown = [&](QStyle::SubControl sc) {
+ const bool isEnabled = state & QStyle::State_Enabled;
const bool isUp = sc == SC_SpinBoxUp;
const QRect rect = proxy()->subControlRect(CC_SpinBox, option, sc, widget);
if (isEnabled && sb->activeSubControls & sc)
@@ -437,7 +433,7 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
cp->setFont(d->assetFont);
cp->setPen(sb->palette.buttonText().color());
cp->setBrush(Qt::NoBrush);
- cp->drawText(rect, Qt::AlignCenter, isUp ? ChevronUp : ChevronDown);
+ cp->drawText(rect, Qt::AlignCenter, fluentIcon(isUp ? Icon::ChevronUp : Icon::ChevronDown));
};
if (sub & SC_SpinBoxUp) drawUpDown(SC_SpinBoxUp);
if (sub & SC_SpinBoxDown) drawUpDown(SC_SpinBoxDown);
@@ -586,21 +582,22 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
case CC_ComboBox:
if (const QStyleOptionComboBox *combobox = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
const auto frameRect = QRectF(option->rect).marginsRemoved(QMarginsF(1.5, 1.5, 1.5, 1.5));
- drawRoundedRect(painter, frameRect, Qt::NoPen, option->palette.brush(QPalette::Base));
+ QStyleOption opt(*option);
+ opt.state.setFlag(QStyle::State_On, false);
+ drawRoundedRect(painter, frameRect, Qt::NoPen,
+ combobox->editable ? inputFillBrush(option, widget)
+ : controlFillBrush(&opt, ControlType::Control));
if (combobox->frame)
drawLineEditFrame(painter, frameRect, combobox, combobox->editable);
const bool hasFocus = state & State_HasFocus;
- QStyleOption opt(*option);
- opt.state.setFlag(QStyle::State_On, false);
- drawRoundedRect(painter, frameRect, Qt::NoPen, controlFillBrush(&opt, ControlType::Control));
if (sub & SC_ComboBoxArrow) {
- QRectF rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget).adjusted(4, 0, -4, 1);
+ QRectF rect = proxy()->subControlRect(CC_ComboBox, option, SC_ComboBoxArrow, widget);
painter->setFont(d->assetFont);
painter->setPen(controlTextColor(option));
- painter->drawText(rect, Qt::AlignCenter, ChevronDownMed);
+ painter->drawText(rect, Qt::AlignCenter, fluentIcon(Icon::ChevronDownMed));
}
if (state & State_KeyboardFocusChange && hasFocus) {
QStyleOptionFocusRect fropt;
@@ -662,9 +659,9 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
f.setPointSize(6);
cp->setFont(f);
cp->setPen(Qt::gray);
- const auto str = vertical ? CaretDownSolid8
- : (isRtl ? CaretLeftSolid8 : CaretRightSolid8);
- cp->drawText(rect, Qt::AlignCenter, str);
+ const auto ico = vertical ? Icon::CaretDownSolid8
+ : (isRtl ? Icon::CaretLeftSolid8 : Icon::CaretRightSolid8);
+ cp->drawText(rect, Qt::AlignCenter, fluentIcon(ico));
}
}
if (sub & SC_ScrollBarSubLine) {
@@ -674,9 +671,9 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
f.setPointSize(6);
cp->setFont(f);
cp->setPen(Qt::gray);
- const auto str = vertical ? CaretUpSolid8
- : (isRtl ? CaretRightSolid8 : CaretLeftSolid8);
- cp->drawText(rect, Qt::AlignCenter, str);
+ const auto ico = vertical ? Icon::CaretUpSolid8
+ : (isRtl ? Icon::CaretRightSolid8 : Icon::CaretLeftSolid8);
+ cp->drawText(rect, Qt::AlignCenter, fluentIcon(ico));
}
}
}
@@ -686,9 +683,9 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
QFont buttonFont = QFont(d->assetFont);
buttonFont.setPointSize(8);
painter->setFont(buttonFont);
- drawTitleBarCloseButton(CC_MdiControls, SC_MdiCloseButton, ChromeClose);
- drawTitleBarButton(CC_MdiControls, SC_MdiNormalButton, ChromeRestore);
- drawTitleBarButton(CC_MdiControls, SC_MdiMinButton, ChromeMinimize);
+ drawTitleBarCloseButton(CC_MdiControls, SC_MdiCloseButton, Icon::ChromeClose);
+ drawTitleBarButton(CC_MdiControls, SC_MdiNormalButton, Icon::ChromeRestore);
+ drawTitleBarButton(CC_MdiControls, SC_MdiMinButton, Icon::ChromeMinimize);
}
break;
case CC_TitleBar:
@@ -716,18 +713,18 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
// min button
if (shouldDrawButton(SC_TitleBarMinButton, Qt::WindowMinimizeButtonHint) &&
!(titlebar->titleBarState & Qt::WindowMinimized)) {
- drawTitleBarButton(CC_TitleBar, SC_TitleBarMinButton, ChromeMinimize);
+ drawTitleBarButton(CC_TitleBar, SC_TitleBarMinButton, Icon::ChromeMinimize);
}
// max button
if (shouldDrawButton(SC_TitleBarMaxButton, Qt::WindowMaximizeButtonHint) &&
!(titlebar->titleBarState & Qt::WindowMaximized)) {
- drawTitleBarButton(CC_TitleBar, SC_TitleBarMaxButton, ChromeMaximize);
+ drawTitleBarButton(CC_TitleBar, SC_TitleBarMaxButton, Icon::ChromeMaximize);
}
// close button
if (shouldDrawButton(SC_TitleBarCloseButton, Qt::WindowSystemMenuHint))
- drawTitleBarCloseButton(CC_TitleBar, SC_TitleBarCloseButton, ChromeClose);
+ drawTitleBarCloseButton(CC_TitleBar, SC_TitleBarCloseButton, Icon::ChromeClose);
// normalize button
if ((titlebar->subControls & SC_TitleBarNormalButton) &&
@@ -735,20 +732,20 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
(titlebar->titleBarState & Qt::WindowMinimized)) ||
((titlebar->titleBarFlags & Qt::WindowMaximizeButtonHint) &&
(titlebar->titleBarState & Qt::WindowMaximized)))) {
- drawTitleBarButton(CC_TitleBar, SC_TitleBarNormalButton, ChromeRestore);
+ drawTitleBarButton(CC_TitleBar, SC_TitleBarNormalButton, Icon::ChromeRestore);
}
// context help button
if (shouldDrawButton(SC_TitleBarContextHelpButton, Qt::WindowContextHelpButtonHint))
- drawTitleBarButton(CC_TitleBar, SC_TitleBarContextHelpButton, Help);
+ drawTitleBarButton(CC_TitleBar, SC_TitleBarContextHelpButton, Icon::Help);
// shade button
if (shouldDrawButton(SC_TitleBarShadeButton, Qt::WindowShadeButtonHint))
- drawTitleBarButton(CC_TitleBar, SC_TitleBarShadeButton, ChevronUpSmall);
+ drawTitleBarButton(CC_TitleBar, SC_TitleBarShadeButton, Icon::ChevronUpSmall);
// unshade button
if (shouldDrawButton(SC_TitleBarUnshadeButton, Qt::WindowShadeButtonHint))
- drawTitleBarButton(CC_TitleBar, SC_TitleBarUnshadeButton, ChevronDownSmall);
+ drawTitleBarButton(CC_TitleBar, SC_TitleBarUnshadeButton, Icon::ChevronDownSmall);
// window icon for system menu
if (shouldDrawButton(SC_TitleBarSysMenu, Qt::WindowSystemMenuHint)) {
@@ -872,9 +869,9 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
f.setPointSize(6);
painter->setFont(f);
painter->setPen(header->palette.text().color());
- painter->drawText(option->rect, Qt::AlignCenter,
- indicator == QStyleOptionHeader::SortUp ? ChevronDown
- : ChevronUp);
+ const auto ico = indicator == QStyleOptionHeader::SortUp ? Icon::ChevronDown
+ : Icon::ChevronUp;
+ painter->drawText(option->rect, Qt::AlignCenter, fluentIcon(ico));
}
}
break;
@@ -892,8 +889,9 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
painter->setFont(d->assetFont);
painter->setPen(controlTextColor(option, QPalette::Window));
qreal clipWidth = 1.0;
+ const QString str = fluentIcon(Icon::AcceptMedium);
QFontMetrics fm(d->assetFont);
- QRectF clipRect = fm.boundingRect(AcceptMedium);
+ QRectF clipRect = fm.boundingRect(str);
if (d->transitionsEnabled() && option->styleObject) {
QNumberStyleAnimation *animation = qobject_cast<QNumberStyleAnimation *>(
d->animation(option->styleObject));
@@ -904,13 +902,13 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
clipRect.moveCenter(center);
clipRect.setLeft(rect.x() + (rect.width() - clipRect.width()) / 2.0 + 0.5);
clipRect.setWidth(clipWidth * clipRect.width());
- painter->drawText(clipRect, Qt::AlignVCenter | Qt::AlignLeft, AcceptMedium);
+ painter->drawText(clipRect, Qt::AlignVCenter | Qt::AlignLeft, str);
} else if (isPartial) {
QFont f(d->assetFont);
f.setPointSize(6);
painter->setFont(f);
painter->setPen(controlTextColor(option, QPalette::Window));
- painter->drawText(rect, Qt::AlignCenter, Dash12);
+ painter->drawText(rect, Qt::AlignCenter, fluentIcon(Icon::Dash12));
}
}
break;
@@ -923,8 +921,10 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
painter->setFont(f);
painter->setPen(option->palette.color(isOpen ? QPalette::Active : QPalette::Disabled,
QPalette::WindowText));
- const auto str = isOpen ? ChevronDownMed : (isReverse ? ChevronLeftMed : ChevronRightMed);
- painter->drawText(option->rect, Qt::AlignCenter, str);
+ const auto ico = isOpen ? Icon::ChevronDownMed
+ : (isReverse ? Icon::ChevronLeftMed
+ : Icon::ChevronRightMed);
+ painter->drawText(option->rect, Qt::AlignCenter, fluentIcon(ico));
}
}
break;
@@ -995,10 +995,17 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
}
case PE_PanelLineEdit:
if (const auto *panel = qstyleoption_cast<const QStyleOptionFrame *>(option)) {
- const auto frameRect = QRectF(option->rect).marginsRemoved(QMarginsF(1.5, 1.5, 1.5, 1.5));
- drawRoundedRect(painter, frameRect, Qt::NoPen, inputFillBrush(option, widget));
- if (panel->lineWidth > 0)
- proxy()->drawPrimitive(PE_FrameLineEdit, panel, painter, widget);
+ const bool isInSpinBox =
+ widget && qobject_cast<const QAbstractSpinBox *>(widget->parent()) != nullptr;
+ const bool isInComboBox =
+ widget && qobject_cast<const QComboBox *>(widget->parent()) != nullptr;
+ if (!isInSpinBox && !isInComboBox) {
+ const auto frameRect =
+ QRectF(option->rect).marginsRemoved(QMarginsF(1.5, 1.5, 1.5, 1.5));
+ drawRoundedRect(painter, frameRect, Qt::NoPen, inputFillBrush(option, widget));
+ if (panel->lineWidth > 0)
+ proxy()->drawPrimitive(PE_FrameLineEdit, panel, painter, widget);
+ }
}
break;
case PE_FrameLineEdit: {
@@ -1511,7 +1518,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
if (isEnabled)
penColor.setAlpha(percentToAlpha(60.63)); // fillColorTextSecondary
painter->setPen(penColor);
- painter->drawText(vindRect, Qt::AlignCenter, ChevronDownMed);
+ painter->drawText(vindRect, Qt::AlignCenter, fluentIcon(Icon::ChevronDownMed));
}
}
break;
@@ -1587,8 +1594,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
QPainterStateGuard psg(painter);
painter->setFont(d->assetFont);
painter->setPen(option->palette.text().color());
- const auto textToDraw = QStringLiteral(u"\uE73E");
- painter->drawText(vRect, Qt::AlignCenter, textToDraw);
+ painter->drawText(vRect, Qt::AlignCenter, fluentIcon(Icon::CheckMark));
}
if (menuitem->menuHasCheckableItems)
xOffset += checkMarkWidth + contentItemHMargin;
@@ -1669,8 +1675,8 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
QRect vSubMenuRect = visualMenuRect(submenuRect);
painter->setPen(option->palette.text().color());
const bool isReverse = option->direction == Qt::RightToLeft;
- const auto str = isReverse ? ChevronLeftMed : ChevronRightMed;
- painter->drawText(vSubMenuRect, Qt::AlignCenter, str);
+ const auto ico = isReverse ? Icon::ChevronLeftMed : Icon::ChevronRightMed;
+ painter->drawText(vSubMenuRect, Qt::AlignCenter, fluentIcon(ico));
}
}
break;
@@ -1936,32 +1942,31 @@ QRect QWindows11Style::subControlRect(ComplexControl control, const QStyleOption
#if QT_CONFIG(spinbox)
case CC_SpinBox:
if (const QStyleOptionSpinBox *spinbox = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) {
- QSize bs;
- int fw = spinbox->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget) : 0;
- bs.setHeight(qMax(8, spinbox->rect.height() - fw));
- bs.setWidth(16);
- int y = fw + spinbox->rect.y();
- int x, lx, rx;
- x = spinbox->rect.x() + spinbox->rect.width() - fw - 2 * bs.width();
- lx = fw;
- rx = x - fw;
+ const bool hasButtons = spinbox->buttonSymbols != QAbstractSpinBox::NoButtons;
+ const int fw = spinbox->frame
+ ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, spinbox, widget)
+ : 0;
+ const int buttonHeight = hasButtons
+ ? qMin(spinbox->rect.height() - 3 * fw, spinbox->fontMetrics.height() * 5 / 4)
+ : 0;
+ const QSize buttonSize(buttonHeight * 6 / 5, buttonHeight);
+ const int textFieldLength = spinbox->rect.width() - 2 * fw - 2 * buttonSize.width();
+ const QPoint topLeft(spinbox->rect.topLeft() + QPoint(fw, fw));
switch (subControl) {
case SC_SpinBoxUp:
- if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons)
+ case SC_SpinBoxDown: {
+ if (!hasButtons)
return QRect();
- ret = QRect(x, y, bs.width(), bs.height());
- break;
- case SC_SpinBoxDown:
- if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons)
- return QRect();
- ret = QRect(x + bs.width(), y, bs.width(), bs.height());
+ const int yOfs = ((spinbox->rect.height() - 2 * fw) - buttonSize.height()) / 2;
+ ret = QRect(topLeft.x() + textFieldLength, topLeft.y() + yOfs, buttonSize.width(),
+ buttonSize.height());
+ if (subControl == SC_SpinBoxDown)
+ ret.moveRight(ret.right() + buttonSize.width());
break;
+ }
case SC_SpinBoxEditField:
- if (spinbox->buttonSymbols == QAbstractSpinBox::NoButtons) {
- ret = QRect(lx, fw, spinbox->rect.width() - 2*fw, spinbox->rect.height() - 2*fw);
- } else {
- ret = QRect(lx, fw, rx, spinbox->rect.height() - 2*fw);
- }
+ ret = QRect(topLeft,
+ spinbox->rect.bottomRight() - QPoint(fw + 2 * buttonSize.width(), fw));
break;
case SC_SpinBoxFrame:
ret = spinbox->rect;
@@ -2076,16 +2081,37 @@ QRect QWindows11Style::subControlRect(ComplexControl control, const QStyleOption
break;
}
case CC_ComboBox: {
- if (subControl == SC_ComboBoxArrow) {
+ if (const auto *cb = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
const auto indicatorWidth =
proxy()->pixelMetric(PM_MenuButtonIndicator, option, widget);
- const int endX = option->rect.right() - contentHMargin - 2;
- const int startX = endX - indicatorWidth;
- const QRect rect(QPoint(startX, option->rect.top()),
- QPoint(endX, option->rect.bottom()));
- ret = visualRect(option->direction, option->rect, rect);
- } else {
- ret = QWindowsVistaStyle::subControlRect(control, option, subControl, widget);
+ switch (subControl) {
+ case SC_ComboBoxArrow: {
+ const int fw =
+ cb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, cb, widget) : 0;
+ const int buttonHeight =
+ qMin(cb->rect.height() - 3 * fw, cb->fontMetrics.height() * 5 / 4);
+ const QSize buttonSize(buttonHeight * 6 / 5, buttonHeight);
+ const int textFieldLength = cb->rect.width() - 2 * fw - buttonSize.width();
+ const QPoint topLeft(cb->rect.topLeft() + QPoint(fw, fw));
+ const int yOfs = ((cb->rect.height() - 2 * fw) - buttonSize.height()) / 2;
+ ret = QRect(topLeft.x() + textFieldLength, topLeft.y() + yOfs, buttonSize.width(),
+ buttonSize.height());
+ ret = visualRect(option->direction, option->rect, ret);
+ break;
+ }
+ case SC_ComboBoxEditField: {
+ ret = option->rect;
+ if (cb->frame) {
+ const int fw = proxy()->pixelMetric(PM_ComboBoxFrameWidth, cb, widget);
+ ret = ret.marginsRemoved(QMargins(fw, fw, fw, fw));
+ }
+ ret.setWidth(ret.width() - indicatorWidth - contentHMargin * 2);
+ break;
+ }
+ default:
+ ret = QWindowsVistaStyle::subControlRect(control, option, subControl, widget);
+ break;
+ }
}
break;
}
@@ -2177,15 +2203,15 @@ QSize QWindows11Style::sizeFromContents(ContentsType type, const QStyleOption *o
break;
#endif // QT_CONFIG(menu)
#if QT_CONFIG(spinbox)
- case QStyle::CT_SpinBox: {
+ case CT_SpinBox: {
if (const auto *spinBoxOpt = qstyleoption_cast<const QStyleOptionSpinBox *>(option)) {
// Add button + frame widths
- const qreal dpi = QStyleHelper::dpi(option);
const bool hasButtons = (spinBoxOpt->buttonSymbols != QAbstractSpinBox::NoButtons);
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;
+ const int buttonWidth = hasButtons ? 16 + contentItemHMargin : 0;
+ const int frameWidth = spinBoxOpt->frame
+ ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, option, widget)
+ : 0;
contentSize += QSize(2 * buttonWidth + 2 * frameWidth + 2 * margins, 2 * frameWidth);
}
@@ -2196,7 +2222,7 @@ QSize QWindows11Style::sizeFromContents(ContentsType type, const QStyleOption *o
case CT_ComboBox:
if (const auto *comboBoxOpt = qstyleoption_cast<const QStyleOptionComboBox *>(option)) {
contentSize = QWindowsStyle::sizeFromContents(type, option, size, widget); // don't rely on QWindowsThemeData
- contentSize += QSize(4, 4); // default win11 style margins
+ contentSize += QSize(0, 4); // for the lineedit frame
if (comboBoxOpt->subControls & SC_ComboBoxArrow) {
const auto w = proxy()->pixelMetric(PM_MenuButtonIndicator, option, widget);
contentSize.rwidth() += w + contentItemHMargin;
@@ -2204,6 +2230,13 @@ QSize QWindows11Style::sizeFromContents(ContentsType type, const QStyleOption *o
}
break;
#endif
+ case CT_LineEdit: {
+ if (qstyleoption_cast<const QStyleOptionFrame *>(option)) {
+ contentSize = QWindowsStyle::sizeFromContents(type, option, size, widget); // don't rely on QWindowsThemeData
+ contentSize += QSize(0, 4); // for the lineedit frame
+ }
+ break;
+ }
case CT_HeaderSection:
// windows vista does not honor the indicator (as it was drawn above the text, not on the
// side) so call QWindowsStyle::styleHint directly to get the correct size hint
@@ -2335,7 +2368,7 @@ int QWindows11Style::pixelMetric(PixelMetric metric, const QStyleOption *option,
QFont f(d->assetFont);
f.setPointSize(qRound(fontSize * 0.9f)); // a little bit smaller
QFontMetrics fm(f);
- const auto width = fm.horizontalAdvance(ChevronDownMed);
+ const auto width = fm.horizontalAdvance(fluentIcon(Icon::ChevronDownMed));
m_fontPoint2ChevronDownMedWidth.insert(fontSize, width);
res += width;
} else {
@@ -2346,6 +2379,8 @@ int QWindows11Style::pixelMetric(PixelMetric metric, const QStyleOption *option,
}
break;
}
+ case PM_ComboBoxFrameWidth:
+ case PM_SpinBoxFrameWidth:
case PM_DefaultFrameWidth:
res = 2;
break;
@@ -2601,7 +2636,7 @@ QIcon QWindows11Style::standardIcon(StandardPixmap standardIcon,
switch (standardIcon) {
case SP_LineEditClearButton: {
if (d->m_lineEditClearButton.isNull()) {
- auto e = new WinFontIconEngine(Clear, d->assetFont);
+ auto e = new WinFontIconEngine(fluentIcon(Icon::Clear), d->assetFont);
d->m_lineEditClearButton = QIcon(e);
}
return d->m_lineEditClearButton;
@@ -2609,7 +2644,7 @@ QIcon QWindows11Style::standardIcon(StandardPixmap standardIcon,
case SP_ToolBarHorizontalExtensionButton:
case SP_ToolBarVerticalExtensionButton: {
if (d->m_toolbarExtensionButton.isNull()) {
- auto e = new WinFontIconEngine(More, d->assetFont);
+ auto e = new WinFontIconEngine(fluentIcon(Icon::More), d->assetFont);
e->setScale(1.0);
d->m_toolbarExtensionButton = QIcon(e);
}