diff options
Diffstat (limited to 'src/plugins/styles')
-rw-r--r-- | src/plugins/styles/modernwindows/qwindows11style.cpp | 280 | ||||
-rw-r--r-- | src/plugins/styles/modernwindows/qwindows11style_p.h | 1 | ||||
-rw-r--r-- | src/plugins/styles/modernwindows/qwindowsvistastyle.cpp | 2 |
3 files changed, 150 insertions, 133 deletions
diff --git a/src/plugins/styles/modernwindows/qwindows11style.cpp b/src/plugins/styles/modernwindows/qwindows11style.cpp index a79aac76ef..784f491681 100644 --- a/src/plugins/styles/modernwindows/qwindows11style.cpp +++ b/src/plugins/styles/modernwindows/qwindows11style.cpp @@ -434,12 +434,21 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt #if QT_CONFIG(combobox) case CC_ComboBox: 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); + QBrush fillColor = combobox->palette.brush(QPalette::Base); QRectF rect = option->rect.adjusted(2,2,-2,-2); painter->setBrush(fillColor); painter->setPen(Qt::NoPen); painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); + // In case the QComboBox is hovered overdraw the background with a alpha mask to + // highlight the QComboBox. + if (state & State_MouseOver) { + fillColor = QBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]); + painter->setBrush(fillColor); + painter->setPen(Qt::NoPen); + painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); + } + rect.adjust(0.5,0.5,-0.5,-0.5); painter->setBrush(Qt::NoBrush); painter->setPen(highContrastTheme == true ? combobox->palette.buttonText().color() : WINUI3Colors[colorSchemeIndex][frameColorLight]); @@ -905,12 +914,20 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption if (widget && widget->objectName() == "qt_spinbox_lineedit") break; if (const auto *panel = qstyleoption_cast<const QStyleOptionFrame *>(option)) { - QBrush fillColor = state & State_MouseOver && !(state & State_HasFocus) ? QBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]) : option->palette.brush(QPalette::Base); - painter->setBrush(fillColor); - painter->setPen(Qt::NoPen); QRectF frameRect = option->rect; frameRect.adjust(0.5,0.5,-0.5,-0.5); + QBrush fillColor = option->palette.brush(QPalette::Base); + painter->setBrush(fillColor); + painter->setPen(Qt::NoPen); painter->drawRoundedRect(frameRect, secondLevelRoundingRadius, secondLevelRoundingRadius); + // In case the QLineEdit is hovered overdraw the background with a alpha mask to + // highlight the QLineEdit. + if (state & State_MouseOver && !(state & State_HasFocus)) { + fillColor = QBrush(WINUI3Colors[colorSchemeIndex][subtleHighlightColor]); + painter->setBrush(fillColor); + painter->setPen(Qt::NoPen); + painter->drawRoundedRect(frameRect, secondLevelRoundingRadius, secondLevelRoundingRadius); + } if (panel->lineWidth > 0) proxy()->drawPrimitive(PE_FrameLineEdit, panel, painter, widget); } @@ -1104,7 +1121,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op rect.translate(shiftX, shiftY); painter->setFont(toolbutton->font); const QString text = d->toolButtonElideText(toolbutton, rect, alignment); - if (toolbutton->state & State_Raised) + if (toolbutton->state & State_Raised || toolbutton->palette.isBrushSet(QPalette::Current, QPalette::ButtonText)) painter->setPen(QPen(toolbutton->palette.buttonText().color())); else painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary])); @@ -1158,7 +1175,7 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op } tr.translate(shiftX, shiftY); const QString text = d->toolButtonElideText(toolbutton, tr, alignment); - if (toolbutton->state & State_Raised) + if (toolbutton->state & State_Raised || toolbutton->palette.isBrushSet(QPalette::Current, QPalette::ButtonText)) painter->setPen(QPen(toolbutton->palette.buttonText().color())); else painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary])); @@ -1207,75 +1224,72 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op break; case QStyle::CE_ProgressBarGroove:{ if (const QStyleOptionProgressBar* progbaropt = qstyleoption_cast<const QStyleOptionProgressBar*>(option)) { - if (const QProgressBar* bar = qobject_cast<const QProgressBar*>(widget)) { - QRect rect = subElementRect(SE_ProgressBarContents, progbaropt, widget); - QPointF center = rect.center(); - if (bar->orientation() & Qt::Horizontal) { - rect.setHeight(1); - rect.moveTop(center.y()); - } else { - rect.setWidth(1); - rect.moveLeft(center.x()); - } - painter->setPen(Qt::NoPen); - painter->setBrush(Qt::gray); - painter->drawRect(rect); + QRect rect = subElementRect(SE_ProgressBarContents, progbaropt, widget); + QPointF center = rect.center(); + if (progbaropt->state & QStyle::State_Horizontal) { + rect.setHeight(1); + rect.moveTop(center.y()); + } else { + rect.setWidth(1); + rect.moveLeft(center.x()); } + painter->setPen(Qt::NoPen); + painter->setBrush(Qt::gray); + painter->drawRect(rect); } break; } case QStyle::CE_ProgressBarContents: if (const QStyleOptionProgressBar* progbaropt = qstyleoption_cast<const QStyleOptionProgressBar*>(option)) { - if (const QProgressBar* bar = qobject_cast<const QProgressBar*>(widget)) { - const qreal progressBarThickness = 3; - const qreal progressBarHalfThickness = progressBarThickness / 2.0; - QRectF rect = subElementRect(SE_ProgressBarContents, progbaropt, widget); - QRectF originalRect = rect; - QPointF center = rect.center(); - bool isIndeterminate = progbaropt->maximum == 0 && progbaropt->minimum == 0; - float fillPercentage = 0; - const qreal offset = (bar->orientation() == Qt::Horizontal && int(rect.height()) % 2 == 0) - || (bar->orientation() == Qt::Vertical && int(rect.width()) % 2 == 0) ? 0.5 : 0.0; - - if (!isIndeterminate) { - fillPercentage = ((float(progbaropt->progress) - float(progbaropt->minimum)) / (float(progbaropt->maximum) - float(progbaropt->minimum))); - if (bar->orientation() == Qt::Horizontal) { - rect.setHeight(progressBarThickness); - rect.moveTop(center.y() - progressBarHalfThickness - offset); - rect.setWidth(rect.width() * fillPercentage); - } else { - float oldHeight = rect.height(); - rect.setWidth(progressBarThickness); - rect.moveLeft(center.x() - progressBarHalfThickness - offset); - rect.moveTop(oldHeight * (1.0f - fillPercentage)); - rect.setHeight(oldHeight * fillPercentage); - } + const qreal progressBarThickness = 3; + const qreal progressBarHalfThickness = progressBarThickness / 2.0; + QRectF rect = subElementRect(SE_ProgressBarContents, progbaropt, widget); + QRectF originalRect = rect; + QPointF center = rect.center(); + bool isIndeterminate = progbaropt->maximum == 0 && progbaropt->minimum == 0; + float fillPercentage = 0; + const Qt::Orientation orientation = (progbaropt->state & QStyle::State_Horizontal) ? Qt::Horizontal : Qt::Vertical; + const qreal offset = (orientation == Qt::Horizontal && int(rect.height()) % 2 == 0) + || (orientation == Qt::Vertical && int(rect.width()) % 2 == 0) ? 0.5 : 0.0; + + if (!isIndeterminate) { + fillPercentage = ((float(progbaropt->progress) - float(progbaropt->minimum)) / (float(progbaropt->maximum) - float(progbaropt->minimum))); + if (orientation == Qt::Horizontal) { + rect.setHeight(progressBarThickness); + rect.moveTop(center.y() - progressBarHalfThickness - offset); + rect.setWidth(rect.width() * fillPercentage); } else { - auto elapsedTime = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()); - fillPercentage = (elapsedTime.time_since_epoch().count() % 5000)/(5000.0f*0.75); - if (bar->orientation() == Qt::Horizontal) { - float barBegin = qMin(qMax(fillPercentage-0.25,0.0) * rect.width(), float(rect.width())); - float barEnd = qMin(fillPercentage * rect.width(), float(rect.width())); - rect = QRect(QPoint(rect.left() + barBegin, rect.top()), QPoint(rect.left() + barEnd, rect.bottom())); - rect.setHeight(progressBarThickness); - rect.moveTop(center.y() - progressBarHalfThickness - offset); - } else { - float barBegin = qMin(qMax(fillPercentage-0.25,0.0) * rect.height(), float(rect.height())); - float barEnd = qMin(fillPercentage * rect.height(), float(rect.height())); - rect = QRect(QPoint(rect.left(), rect.bottom() - barEnd), QPoint(rect.right(), rect.bottom() - barBegin)); - rect.setWidth(progressBarThickness); - rect.moveLeft(center.x() - progressBarHalfThickness - offset); - } - const_cast<QWidget*>(widget)->update(); + float oldHeight = rect.height(); + rect.setWidth(progressBarThickness); + rect.moveLeft(center.x() - progressBarHalfThickness - offset); + rect.moveTop(oldHeight * (1.0f - fillPercentage)); + rect.setHeight(oldHeight * fillPercentage); } - if (progbaropt->invertedAppearance && bar->orientation() == Qt::Horizontal) - rect.moveLeft(originalRect.width() * (1.0 - fillPercentage)); - else if (progbaropt->invertedAppearance && bar->orientation() == Qt::Vertical) - rect.moveBottom(originalRect.height() * fillPercentage); - painter->setPen(Qt::NoPen); - painter->setBrush(progbaropt->palette.accent()); - painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); + } else { + auto elapsedTime = std::chrono::time_point_cast<std::chrono::milliseconds>(std::chrono::system_clock::now()); + fillPercentage = (elapsedTime.time_since_epoch().count() % 5000)/(5000.0f*0.75); + if (orientation == Qt::Horizontal) { + float barBegin = qMin(qMax(fillPercentage-0.25,0.0) * rect.width(), float(rect.width())); + float barEnd = qMin(fillPercentage * rect.width(), float(rect.width())); + rect = QRect(QPoint(rect.left() + barBegin, rect.top()), QPoint(rect.left() + barEnd, rect.bottom())); + rect.setHeight(progressBarThickness); + rect.moveTop(center.y() - progressBarHalfThickness - offset); + } else { + float barBegin = qMin(qMax(fillPercentage-0.25,0.0) * rect.height(), float(rect.height())); + float barEnd = qMin(fillPercentage * rect.height(), float(rect.height())); + rect = QRect(QPoint(rect.left(), rect.bottom() - barEnd), QPoint(rect.right(), rect.bottom() - barBegin)); + rect.setWidth(progressBarThickness); + rect.moveLeft(center.x() - progressBarHalfThickness - offset); + } + const_cast<QWidget*>(widget)->update(); } + if (progbaropt->invertedAppearance && orientation == Qt::Horizontal) + rect.moveLeft(originalRect.width() * (1.0 - fillPercentage)); + else if (progbaropt->invertedAppearance && orientation == Qt::Vertical) + rect.moveBottom(originalRect.height() * fillPercentage); + painter->setPen(Qt::NoPen); + painter->setBrush(progbaropt->palette.accent()); + painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); } break; case QStyle::CE_ProgressBarLabel: @@ -1364,13 +1378,15 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op } else { QRectF rect = btn->rect.marginsRemoved(QMargins(2,2,2,2)); painter->setPen(Qt::NoPen); - if (flags & (State_Sunken)) - painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(120) : WINUI3Colors[colorSchemeIndex][controlFillTertiary]); - else if (flags & State_MouseOver) - painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(110) : WINUI3Colors[colorSchemeIndex][controlFillSecondary]); - else - painter->setBrush(flags & State_On ? option->palette.accent() : option->palette.button()); + painter->setBrush(flags & State_On ? option->palette.accent() : option->palette.button()); painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); + if (flags.testFlags(State_Sunken | State_MouseOver)) { + if (flags & (State_Sunken)) + painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(120) : WINUI3Colors[colorSchemeIndex][controlFillTertiary]); + else if (flags & State_MouseOver) + painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(110) : WINUI3Colors[colorSchemeIndex][controlFillSecondary]); + painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius); + } rect.adjust(0.5,0.5,-0.5,-0.5); painter->setBrush(Qt::NoBrush); @@ -1578,7 +1594,13 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op break; case CE_HeaderSection: { if (const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>(option)) { + painter->setPen(Qt::NoPen); + painter->setBrush(header->palette.button()); + painter->drawRect(header->rect); + painter->setPen(highContrastTheme == true ? header->palette.buttonText().color() : WINUI3Colors[colorSchemeIndex][frameColorLight]); + painter->setBrush(Qt::NoBrush); + if (header->position == QStyleOptionHeader::OnlyOneSection) { break; } @@ -2014,17 +2036,19 @@ void QWindows11Style::polish(QWidget* widget) QLineEdit *le = cb->lineEdit(); le->setFrame(false); } + } else if (widget->inherits("QAbstractButton") || widget->inherits("QToolButton")) { + widget->setAutoFillBackground(false); } else if (qobject_cast<QGraphicsView *>(widget) && !qobject_cast<QTextEdit *>(widget)) { QPalette pal = widget->palette(); pal.setColor(QPalette::Base, pal.window().color()); widget->setPalette(pal); } else if (const auto *scrollarea = qobject_cast<QAbstractScrollArea *>(widget); scrollarea && !qobject_cast<QMdiArea *>(widget)) { - QPalette pal = widget->palette(); - QColor backgroundColor = widget->palette().base().color(); - backgroundColor.setAlpha(255); - pal.setColor(scrollarea->viewport()->backgroundRole(), backgroundColor); + QPalette pal = scrollarea->viewport()->palette(); + const QPalette originalPalette = pal; + pal.setColor(scrollarea->viewport()->backgroundRole(), Qt::transparent); scrollarea->viewport()->setPalette(pal); + scrollarea->viewport()->setProperty("_q_original_background_palette", originalPalette); } else if (qobject_cast<QCommandLinkButton *>(widget)) { widget->setProperty("_qt_usingVistaStyle",false); QPalette pal = widget->palette(); @@ -2034,53 +2058,50 @@ void QWindows11Style::polish(QWidget* widget) } } +void QWindows11Style::unpolish(QWidget *widget) +{ + QWindowsVistaStyle::unpolish(widget); + if (const auto *scrollarea = qobject_cast<QAbstractScrollArea *>(widget); + scrollarea && !qobject_cast<QMdiArea *>(widget)) { + const QPalette pal = scrollarea->viewport()->property("_q_original_background_palette").value<QPalette>(); + scrollarea->viewport()->setPalette(pal); + scrollarea->viewport()->setProperty("_q_original_background_palette", QVariant()); + } +} /* The colors for Windows 11 are taken from the official WinUI3 Figma style at https://www.figma.com/community/file/1159947337437047524 */ +#define SET_IF_UNRESOLVED(GROUP, ROLE, VALUE) \ + if (!result.isBrushSet(QPalette::Inactive, ROLE) || styleSheetChanged) \ + result.setColor(GROUP, ROLE, VALUE) + static void populateLightSystemBasePalette(QPalette &result) { static QString oldStyleSheet; const bool styleSheetChanged = oldStyleSheet != qApp->styleSheet(); - QPalette standardPalette = QApplication::palette(); const QColor textColor = QColor(0x00,0x00,0x00,0xE4); - const QColor btnFace = QColor(0xFF,0xFF,0xFF,0xB3); const QColor btnHighlight = result.accent().color(); const QColor btnColor = result.button().color(); - if (standardPalette.color(QPalette::Highlight) == result.color(QPalette::Highlight) || styleSheetChanged) - result.setColor(QPalette::Highlight, btnHighlight); - if (standardPalette.color(QPalette::WindowText) == result.color(QPalette::WindowText) || styleSheetChanged) - result.setColor(QPalette::WindowText, textColor); - if (standardPalette.color(QPalette::Button) == result.color(QPalette::Button) || styleSheetChanged) - result.setColor(QPalette::Button, btnFace); - if (standardPalette.color(QPalette::Light) == result.color(QPalette::Light) || styleSheetChanged) - result.setColor(QPalette::Light, btnColor.lighter(150)); - if (standardPalette.color(QPalette::Dark) == result.color(QPalette::Dark) || styleSheetChanged) - result.setColor(QPalette::Dark, btnColor.darker(200)); - if (standardPalette.color(QPalette::Mid) == result.color(QPalette::Mid) || styleSheetChanged) - result.setColor(QPalette::Mid, btnColor.darker(150)); - if (standardPalette.color(QPalette::Text) == result.color(QPalette::Text) || styleSheetChanged) - result.setColor(QPalette::Text, textColor); - if (standardPalette.color(QPalette::BrightText) != result.color(QPalette::BrightText) || styleSheetChanged) - result.setColor(QPalette::BrightText, btnHighlight); - if (standardPalette.color(QPalette::Base) == result.color(QPalette::Base) || styleSheetChanged) - result.setColor(QPalette::Base, btnFace); - if (standardPalette.color(QPalette::Window) == result.color(QPalette::Window) || styleSheetChanged) - result.setColor(QPalette::Window, QColor(0xF3,0xF3,0xF3,0xFF)); - if (standardPalette.color(QPalette::ButtonText) == result.color(QPalette::ButtonText) || styleSheetChanged) - result.setColor(QPalette::ButtonText, textColor); - if (standardPalette.color(QPalette::Midlight) == result.color(QPalette::Midlight) || styleSheetChanged) - result.setColor(QPalette::Midlight, btnColor.lighter(125)); - if (standardPalette.color(QPalette::Shadow) == result.color(QPalette::Shadow) || styleSheetChanged) - result.setColor(QPalette::Shadow, Qt::black); - if (standardPalette.color(QPalette::ToolTipBase) == result.color(QPalette::ToolTipBase) || styleSheetChanged) - result.setColor(QPalette::ToolTipBase, result.window().color()); - if (standardPalette.color(QPalette::ToolTipText) == result.color(QPalette::ToolTipText) || styleSheetChanged) - result.setColor(QPalette::ToolTipText, result.windowText().color()); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Highlight, btnHighlight); + SET_IF_UNRESOLVED(QPalette::All, QPalette::WindowText, textColor); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Button, btnFace); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Light, btnColor.lighter(150)); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Dark, btnColor.darker(200)); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Mid, btnColor.darker(150)); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Text, textColor); + SET_IF_UNRESOLVED(QPalette::All, QPalette::BrightText, btnHighlight); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Base, btnFace); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Window, QColor(0xF3,0xF3,0xF3,0xFF)); + SET_IF_UNRESOLVED(QPalette::All, QPalette::ButtonText, textColor); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Midlight, btnColor.lighter(125)); + SET_IF_UNRESOLVED(QPalette::All, QPalette::Shadow, Qt::black); + SET_IF_UNRESOLVED(QPalette::All, QPalette::ToolTipBase, result.window().color()); + SET_IF_UNRESOLVED(QPalette::All, QPalette::ToolTipText, result.windowText().color()); if (result.midlight() == result.button()) result.setColor(QPalette::Midlight, btnColor.lighter(110)); @@ -2090,35 +2111,30 @@ static void populateLightSystemBasePalette(QPalette &result) /*! \internal */ -void QWindows11Style::polish(QPalette& pal) +void QWindows11Style::polish(QPalette& result) { - highContrastTheme = QGuiApplicationPrivate::colorScheme() == Qt::ColorScheme::Unknown; - colorSchemeIndex = QGuiApplicationPrivate::colorScheme() == Qt::ColorScheme::Light ? 0 : 1; + highContrastTheme = QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Unknown; + colorSchemeIndex = QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Light ? 0 : 1; if (!highContrastTheme && colorSchemeIndex == 0) - populateLightSystemBasePalette(pal); - - if (standardPalette().color(QPalette::Inactive, QPalette::Button) == pal.color(QPalette::Inactive, QPalette::Button)) - pal.setColor(QPalette::Inactive, QPalette::Button, pal.button().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::Window) == pal.color(QPalette::Inactive, QPalette::Window)) - pal.setColor(QPalette::Inactive, QPalette::Window, pal.window().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::Light) == pal.color(QPalette::Inactive, QPalette::Light)) - pal.setColor(QPalette::Inactive, QPalette::Light, pal.light().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::Dark) == pal.color(QPalette::Inactive, QPalette::Dark)) - pal.setColor(QPalette::Inactive, QPalette::Dark, pal.dark().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::Accent) == pal.color(QPalette::Inactive, QPalette::Accent)) - pal.setColor(QPalette::Inactive, QPalette::Accent, pal.accent().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::Highlight) == pal.color(QPalette::Inactive, QPalette::Highlight)) - pal.setColor(QPalette::Inactive, QPalette::Highlight, pal.highlight().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::HighlightedText) == pal.color(QPalette::Inactive, QPalette::HighlightedText)) - pal.setColor(QPalette::Inactive, QPalette::HighlightedText, pal.highlightedText().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::Text) == pal.color(QPalette::Inactive, QPalette::Text)) - pal.setColor(QPalette::Inactive, QPalette::Text, pal.text().color()); - if (standardPalette().color(QPalette::Inactive, QPalette::WindowText) == pal.color(QPalette::Inactive, QPalette::WindowText)) - pal.setColor(QPalette::Inactive, QPalette::WindowText, pal.windowText().color()); + populateLightSystemBasePalette(result); + + const bool styleSheetChanged = false; // so the macro works + + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::Button, result.button().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::Window, result.window().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::Light, result.light().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::Dark, result.dark().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::Accent, result.accent().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::Highlight, result.highlight().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::HighlightedText, result.highlightedText().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::Text, result.text().color()); + SET_IF_UNRESOLVED(QPalette::Inactive, QPalette::WindowText, result.windowText().color()); if (highContrastTheme) - pal.setColor(QPalette::Active, QPalette::HighlightedText, pal.windowText().color()); + result.setColor(QPalette::Active, QPalette::HighlightedText, result.windowText().color()); } +#undef SET_IF_UNRESOLVED + QT_END_NAMESPACE diff --git a/src/plugins/styles/modernwindows/qwindows11style_p.h b/src/plugins/styles/modernwindows/qwindows11style_p.h index 90e368f1ea..9c54afd967 100644 --- a/src/plugins/styles/modernwindows/qwindows11style_p.h +++ b/src/plugins/styles/modernwindows/qwindows11style_p.h @@ -48,6 +48,7 @@ public: int pixelMetric(PixelMetric metric, const QStyleOption *option = nullptr, const QWidget *widget = nullptr) const override; void polish(QPalette &pal) override; + void unpolish(QWidget *widget) override; protected: QWindows11Style(QWindows11StylePrivate &dd); private: diff --git a/src/plugins/styles/modernwindows/qwindowsvistastyle.cpp b/src/plugins/styles/modernwindows/qwindowsvistastyle.cpp index 1df134b629..beee1d6f31 100644 --- a/src/plugins/styles/modernwindows/qwindowsvistastyle.cpp +++ b/src/plugins/styles/modernwindows/qwindowsvistastyle.cpp @@ -4755,7 +4755,7 @@ void QWindowsVistaStyle::polish(QPalette &pal) { Q_D(QWindowsVistaStyle); - if (QGuiApplicationPrivate::colorScheme() == Qt::ColorScheme::Dark) { + if (QGuiApplication::styleHints()->colorScheme() == Qt::ColorScheme::Dark) { // System runs in dark mode, but the Vista style cannot use a dark palette. // Overwrite with the light system palette. using QWindowsApplication = QNativeInterface::Private::QWindowsApplication; |