diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-07-24 15:26:13 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-07-25 21:59:37 +0200 |
commit | 6d4b3582adaf3cea23b0ef777a1bf3e7597fd8da (patch) | |
tree | e5ba098842acc19330caa11ac542f3752b0a5034 /src/plugins/platforms | |
parent | f06dfb60b96004971917a27559713314b7f60de6 (diff) |
Windows QPA: Move dark mode handling to the new interface
Move options to new interface, making them settable from
code on this occasion.
Task-number: QTBUG-83252
Change-Id: Idd80667c502a8cde5d7c66d7e597ea34c22738e7
Reviewed-by: André de la Rocha <andre.rocha@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms')
9 files changed, 43 insertions, 37 deletions
diff --git a/src/plugins/platforms/windows/qwindowsapplication.cpp b/src/plugins/platforms/windows/qwindowsapplication.cpp index 082db98a4f..c137b2a8a8 100644 --- a/src/plugins/platforms/windows/qwindowsapplication.cpp +++ b/src/plugins/platforms/windows/qwindowsapplication.cpp @@ -94,4 +94,19 @@ bool QWindowsApplication::setWinTabEnabled(bool enabled) return enabled ? ctx->initTablet() : ctx->disposeTablet(); } +bool QWindowsApplication::isDarkMode() const +{ + return QWindowsContext::isDarkMode(); +} + +QWindowsApplication::DarkModeHandling QWindowsApplication::darkModeHandling() const +{ + return m_darkModeHandling; +} + +void QWindowsApplication::setDarkModeHandling(QWindowsApplication::DarkModeHandling handling) +{ + m_darkModeHandling = handling; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsapplication.h b/src/plugins/platforms/windows/qwindowsapplication.h index 309fc7151f..6cf8577ab5 100644 --- a/src/plugins/platforms/windows/qwindowsapplication.h +++ b/src/plugins/platforms/windows/qwindowsapplication.h @@ -58,9 +58,14 @@ public: bool isWinTabEnabled() const override; bool setWinTabEnabled(bool enabled) override; + bool isDarkMode() const override; + DarkModeHandling darkModeHandling() const override; + void setDarkModeHandling(DarkModeHandling handling) override; + private: WindowActivationBehavior m_windowActivationBehavior = DefaultActivateWindow; TouchWindowTouchTypes m_touchWindowTouchTypes = NormalTouch; + DarkModeHandling m_darkModeHandling; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp index 39278f31e8..1e5b247f0f 100644 --- a/src/plugins/platforms/windows/qwindowscontext.cpp +++ b/src/plugins/platforms/windows/qwindowscontext.cpp @@ -1244,15 +1244,12 @@ bool QWindowsContext::windowsProc(HWND hwnd, UINT message, const bool darkMode = QWindowsTheme::queryDarkMode(); if (darkMode != QWindowsContextPrivate::m_darkMode) { QWindowsContextPrivate::m_darkMode = darkMode; - auto nativeInterface = - static_cast<QWindowsNativeInterface *>(QWindowsIntegration::instance()->nativeInterface()); - emit nativeInterface->darkModeChanged(darkMode); - const auto options = QWindowsIntegration::instance()->options(); - if ((options & QWindowsIntegration::DarkModeWindowFrames) != 0) { + auto integration = QWindowsIntegration::instance(); + if (integration->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames)) { for (QWindowsWindow *w : d->m_windows) w->setDarkBorder(QWindowsContextPrivate::m_darkMode); } - if ((options & QWindowsIntegration::DarkModeStyle) != 0) { + if (integration->darkModeHandling().testFlag(QWindowsApplication::DarkModeStyle)) { QWindowsTheme::instance()->refresh(); for (QWindowsWindow *w : d->m_windows) QWindowSystemInterface::handleThemeChange(w->window()); diff --git a/src/plugins/platforms/windows/qwindowsintegration.cpp b/src/plugins/platforms/windows/qwindowsintegration.cpp index aeafff9962..6ec5f6e37f 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.cpp +++ b/src/plugins/platforms/windows/qwindowsintegration.cpp @@ -135,9 +135,11 @@ QT_BEGIN_NAMESPACE struct QWindowsIntegrationPrivate { Q_DISABLE_COPY_MOVE(QWindowsIntegrationPrivate) - explicit QWindowsIntegrationPrivate(const QStringList ¶mList); + explicit QWindowsIntegrationPrivate() = default; ~QWindowsIntegrationPrivate(); + void parseOptions(QWindowsIntegration *q, const QStringList ¶mList); + unsigned m_options = 0; QWindowsContext m_context; QPlatformFontDatabase *m_fontDatabase = nullptr; @@ -181,9 +183,13 @@ bool parseIntOption(const QString ¶meter,const QLatin1String &option, return true; } +using DarkModeHandlingFlag = QPlatformInterface::Private::QWindowsApplication::DarkModeHandlingFlag; +using DarkModeHandling = QPlatformInterface::Private::QWindowsApplication::DarkModeHandling; + static inline unsigned parseOptions(const QStringList ¶mList, int *tabletAbsoluteRange, - QtWindows::ProcessDpiAwareness *dpiAwareness) + QtWindows::ProcessDpiAwareness *dpiAwareness, + DarkModeHandling *darkModeHandling) { unsigned options = 0; for (const QString ¶m : paramList) { @@ -223,9 +229,10 @@ static inline unsigned parseOptions(const QStringList ¶mList, } else if (param == u"reverse") { options |= QWindowsIntegration::RtlEnabled; } else if (param == u"darkmode=1") { - options |= QWindowsIntegration::DarkModeWindowFrames; + darkModeHandling->setFlag(DarkModeHandlingFlag::DarkModeWindowFrames); } else if (param == u"darkmode=2") { - options |= QWindowsIntegration::DarkModeWindowFrames | QWindowsIntegration::DarkModeStyle; + darkModeHandling->setFlag(DarkModeHandlingFlag::DarkModeWindowFrames); + darkModeHandling->setFlag(DarkModeHandlingFlag::DarkModeStyle); } else { qWarning() << "Unknown option" << param; } @@ -233,7 +240,7 @@ static inline unsigned parseOptions(const QStringList ¶mList, return options; } -QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList ¶mList) +void QWindowsIntegrationPrivate::parseOptions(QWindowsIntegration *q, const QStringList ¶mList) { initOpenGlBlacklistResources(); @@ -242,7 +249,9 @@ QWindowsIntegrationPrivate::QWindowsIntegrationPrivate(const QStringList ¶mL // are connected to Windows 8.1 QtWindows::ProcessDpiAwareness dpiAwareness = QtWindows::ProcessPerMonitorDpiAware; int tabletAbsoluteRange = -1; - m_options = parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness); + DarkModeHandling darkModeHandling; + m_options = ::parseOptions(paramList, &tabletAbsoluteRange, &dpiAwareness, &darkModeHandling); + q->setDarkModeHandling(darkModeHandling); QWindowsFontDatabase::setFontOptions(m_options); if (tabletAbsoluteRange >= 0) QWindowsContext::setTabletAbsoluteRange(tabletAbsoluteRange); @@ -276,9 +285,10 @@ QWindowsIntegrationPrivate::~QWindowsIntegrationPrivate() QWindowsIntegration *QWindowsIntegration::m_instance = nullptr; QWindowsIntegration::QWindowsIntegration(const QStringList ¶mList) : - d(new QWindowsIntegrationPrivate(paramList)) + d(new QWindowsIntegrationPrivate) { m_instance = this; + d->parseOptions(this, paramList); #if QT_CONFIG(clipboard) d->m_clipboard.registerViewer(); #endif diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h index 3a8c09dd43..eaf62c750d 100644 --- a/src/plugins/platforms/windows/qwindowsintegration.h +++ b/src/plugins/platforms/windows/qwindowsintegration.h @@ -79,9 +79,7 @@ public: DontUseWMPointer = 0x400, DetectAltGrModifier = 0x800, RtlEnabled = 0x1000, - DarkModeWindowFrames = 0x2000, - DarkModeStyle = 0x4000, - FontDatabaseDirectWrite = 0x8000 + FontDatabaseDirectWrite = 0x2000 }; explicit QWindowsIntegration(const QStringList ¶mList); diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp index 103db19a69..12950d02d6 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp @@ -239,15 +239,4 @@ QVariant QWindowsNativeInterface::gpuList() const return result; } -bool QWindowsNativeInterface::isDarkMode() const -{ - return QWindowsContext::isDarkMode(); -} - -// Dark mode support level 2 (style) -bool QWindowsNativeInterface::isDarkModeStyle() const -{ - return (QWindowsIntegration::instance()->options() & QWindowsIntegration::DarkModeStyle) != 0; -} - QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.h b/src/plugins/platforms/windows/qwindowsnativeinterface.h index 6b3740a17b..bb7801f398 100644 --- a/src/plugins/platforms/windows/qwindowsnativeinterface.h +++ b/src/plugins/platforms/windows/qwindowsnativeinterface.h @@ -63,8 +63,6 @@ class QWindowsNativeInterface : public QPlatformNativeInterface { Q_OBJECT Q_PROPERTY(bool asyncExpose READ asyncExpose WRITE setAsyncExpose) - Q_PROPERTY(bool darkMode READ isDarkMode STORED false NOTIFY darkModeChanged) - Q_PROPERTY(bool darkModeStyle READ isDarkModeStyle STORED false) Q_PROPERTY(QVariant gpu READ gpu STORED false) Q_PROPERTY(QVariant gpuList READ gpuList STORED false) @@ -92,14 +90,8 @@ public: bool asyncExpose() const; void setAsyncExpose(bool value); - bool isDarkMode() const; - bool isDarkModeStyle() const; - QVariant gpu() const; QVariant gpuList() const; - -Q_SIGNALS: - void darkModeChanged(bool); }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp index 130fac4736..ea74d8e372 100644 --- a/src/plugins/platforms/windows/qwindowstheme.cpp +++ b/src/plugins/platforms/windows/qwindowstheme.cpp @@ -533,7 +533,7 @@ void QWindowsTheme::refreshPalettes() return; const bool light = !QWindowsContext::isDarkMode() - || (QWindowsIntegration::instance()->options() & QWindowsIntegration::DarkModeStyle) == 0; + || !QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeStyle); m_palettes[SystemPalette] = new QPalette(systemPalette(light)); m_palettes[ToolTipPalette] = new QPalette(toolTipPalette(*m_palettes[SystemPalette], light)); m_palettes[MenuPalette] = new QPalette(menuPalette(*m_palettes[SystemPalette], light)); diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 2da4251179..a7cc36951a 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -821,7 +821,7 @@ QWindowsWindowData } if (QWindowsContext::isDarkMode() - && (QWindowsIntegration::instance()->options() & QWindowsIntegration::DarkModeWindowFrames) != 0 + && QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeWindowFrames) && shouldApplyDarkFrame(w)) { QWindowsWindow::setDarkBorderToWindow(result.hwnd, true); } |