Zhao Yuhang
2025-02-08 6f4ab6474fa81556b1d90f6f87f8322282d054db
src/core/shared/qwkwindowsextra_p.h
@@ -19,11 +19,14 @@
#include <timeapi.h>
#include <QWKCore/qwindowkit_windows.h>
#include <QtCore/private/qsystemlibrary_p.h>
#include <QtCore/QtMath>
#include <QtCore/QPair>
#include <QtGui/QGuiApplication>
#include <QtGui/QStyleHints>
#include <QtGui/QPalette>
#include <QtCore/private/qsystemlibrary_p.h>
// Don't include this header in any header files.
@@ -167,7 +170,6 @@
            DYNAMIC_API_DECLARE(DwmFlush);
            DYNAMIC_API_DECLARE(DwmIsCompositionEnabled);
            DYNAMIC_API_DECLARE(DwmGetCompositionTimingInfo);
            DYNAMIC_API_DECLARE(DwmGetWindowAttribute);
            DYNAMIC_API_DECLARE(DwmSetWindowAttribute);
            DYNAMIC_API_DECLARE(DwmExtendFrameIntoClientArea);
@@ -176,9 +178,6 @@
            DYNAMIC_API_DECLARE(GetSystemMetricsForDpi);
            DYNAMIC_API_DECLARE(AdjustWindowRectExForDpi);
            DYNAMIC_API_DECLARE(GetDpiForMonitor);
            DYNAMIC_API_DECLARE(timeGetDevCaps);
            DYNAMIC_API_DECLARE(timeBeginPeriod);
            DYNAMIC_API_DECLARE(timeEndPeriod);
#undef DYNAMIC_API_DECLARE
@@ -206,16 +205,10 @@
                QSystemLibrary dwmapi(QStringLiteral("dwmapi"));
                DYNAMIC_API_RESOLVE(dwmapi, DwmFlush);
                DYNAMIC_API_RESOLVE(dwmapi, DwmIsCompositionEnabled);
                DYNAMIC_API_RESOLVE(dwmapi, DwmGetCompositionTimingInfo);
                DYNAMIC_API_RESOLVE(dwmapi, DwmGetWindowAttribute);
                DYNAMIC_API_RESOLVE(dwmapi, DwmSetWindowAttribute);
                DYNAMIC_API_RESOLVE(dwmapi, DwmExtendFrameIntoClientArea);
                DYNAMIC_API_RESOLVE(dwmapi, DwmEnableBlurBehindWindow);
                QSystemLibrary winmm(QStringLiteral("winmm"));
                DYNAMIC_API_RESOLVE(winmm, timeGetDevCaps);
                DYNAMIC_API_RESOLVE(winmm, timeBeginPeriod);
                DYNAMIC_API_RESOLVE(winmm, timeEndPeriod);
#undef DYNAMIC_API_RESOLVE
@@ -345,8 +338,11 @@
        if (!registry.isValid()) {
            return false;
        }
        auto value = registry.value<DWORD>(L"ColorPrevalence");
        return value.value_or(false);
        auto value = registry.dwordValue(L"ColorPrevalence");
        if (!value.second) {
            return false;
        }
        return value.first;
    }
    inline bool isHighContrastModeEnabled() {
@@ -368,8 +364,11 @@
        if (!registry.isValid()) {
            return false;
        }
        auto value = registry.value<DWORD>(L"AppsUseLightTheme");
        return value.value_or(false);
        auto value = registry.dwordValue(L"AppsUseLightTheme");
        if (!value.second) {
            return false;
        }
        return !value.first;
#endif
    }
@@ -379,8 +378,10 @@
        }
        BOOL enabled = FALSE;
        const DynamicApis &apis = DynamicApis::instance();
        const auto attr = isWin1020H1OrGreater() ? _DWMWA_USE_IMMERSIVE_DARK_MODE : _DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1;
        return SUCCEEDED(apis.pDwmGetWindowAttribute(hwnd, attr, &enabled, sizeof(enabled))) && enabled;
        const auto attr = isWin1020H1OrGreater() ? _DWMWA_USE_IMMERSIVE_DARK_MODE
                                                 : _DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1;
        return SUCCEEDED(apis.pDwmGetWindowAttribute(hwnd, attr, &enabled, sizeof(enabled))) &&
               enabled;
    }
    inline QColor getAccentColor() {
@@ -391,13 +392,13 @@
        if (!registry.isValid()) {
            return {};
        }
        auto value = registry.value<DWORD>(L"AccentColor");
        if (!value) {
        auto value = registry.dwordValue(L"AccentColor");
        if (!value.second) {
            return {};
        }
        // The retrieved value is in the #AABBGGRR format, we need to
        // convert it to the #AARRGGBB format which Qt expects.
        QColor color = QColor::fromRgba(*value);
        QColor color = QColor::fromRgba(value.first);
        if (!color.isValid()) {
            return {};
        }
@@ -407,7 +408,7 @@
    inline quint32 getDpiForWindow(HWND hwnd) {
        const DynamicApis &apis = DynamicApis::instance();
        if (apis.pGetDpiForWindow) {         // Win10
        if (apis.pGetDpiForWindow) { // Win10
            return apis.pGetDpiForWindow(hwnd);
        } else if (apis.pGetDpiForMonitor) { // Win8.1
            HMONITOR monitor = ::MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
@@ -436,7 +437,7 @@
        }
        const qreal dpr = qreal(dpi) / qreal(USER_DEFAULT_SCREEN_DPI);
        // ### Not sure how Windows itself rounds non-integer value.
        return qFloor(qreal(result) * dpr);
        return qFloor(qreal(result) / dpr);
    }
    inline quint32 getWindowFrameBorderThickness(HWND hwnd) {