diff options
author | Santhosh Kumar <santhosh.kumar.selvaraj@qt.io> | 2022-10-25 13:47:26 +0200 |
---|---|---|
committer | Santhosh Kumar <santhosh.kumar.selvaraj@qt.io> | 2022-11-15 12:28:50 +0100 |
commit | 2991c66b75612dfb11dbba166dd08b2376b42102 (patch) | |
tree | 7ef8371943e97d66409e035d1851ccc14dc416d6 /src/plugins/platforms/windows/qwindowswindow.cpp | |
parent | 0d517a13525faaedd17dafe10b091284806e18a9 (diff) |
Apply system background color for top level window
Repaint top level window with system background color when it shows up
first time. The system background color will be affected by dark or
light mode settings in windows
Fixes: QTBUG-106583
Pick-to: 6.4
Change-Id: I9205335540e74e90bb068e30fc3d4db037fd580f
Reviewed-by: Yuhang Zhao <2546789017@qq.com>
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'src/plugins/platforms/windows/qwindowswindow.cpp')
-rw-r--r-- | src/plugins/platforms/windows/qwindowswindow.cpp | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 241579d9f9..99800cbc4c 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -31,6 +31,7 @@ #include <private/qguiapplication_p.h> #include <private/qhighdpiscaling_p.h> #include <qpa/qwindowsysteminterface.h> +#include <qpa/qplatformtheme.h> #include <QtCore/qdebug.h> #include <QtCore/qlibraryinfo.h> @@ -2301,9 +2302,22 @@ static inline bool isSoftwareGl() } bool QWindowsWindow::handleWmPaint(HWND hwnd, UINT message, - WPARAM, LPARAM, LRESULT *result) + WPARAM wParam, LPARAM, LRESULT *result) { if (message == WM_ERASEBKGND) { // Backing store - ignored. + if (!m_firstBgDraw && QWindowsIntegration::instance()->darkModeHandling().testFlag(QWindowsApplication::DarkModeStyle)) { + // Get system background color + const QColor bgColor = QGuiApplicationPrivate::platformTheme()->palette()->color(QPalette::Window); + HBRUSH bgBrush = CreateSolidBrush(RGB(bgColor.red(), bgColor.green(), bgColor.blue())); + // Fill rectangle with system background color + RECT rc; + auto hdc = reinterpret_cast<HDC>(wParam); + GetClientRect(hwnd, &rc); + FillRect(hdc, &rc, bgBrush); + DeleteObject(bgBrush); + // Brush the window with system background color only for first time + m_firstBgDraw = true; + } *result = 1; return true; } |