From be703385249bafd679a125efc1477ff166e2c9e2 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: ćšć, 21 12æ 2023 17:08:40 +0800 Subject: [PATCH] minor tweaks --- src/core/contexts/win32windowcontext.cpp | 50 ++++++++++++++++++++++++++++++++++---------------- 1 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index 76510ee..953186c 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -109,10 +109,10 @@ ACCENT_DISABLED = 0, ACCENT_ENABLE_GRADIENT = 1, ACCENT_ENABLE_TRANSPARENTGRADIENT = 2, - ACCENT_ENABLE_BLURBEHIND = 3, // Traditional DWM blur + ACCENT_ENABLE_BLURBEHIND = 3, // Traditional DWM blur ACCENT_ENABLE_ACRYLICBLURBEHIND = 4, // RS4 1803 - ACCENT_ENABLE_HOST_BACKDROP = 5, // RS5 1809 - ACCENT_INVALID_STATE = 6 // Using this value will remove the window background + ACCENT_ENABLE_HOST_BACKDROP = 5, // RS5 1809 + ACCENT_INVALID_STATE = 6 // Using this value will remove the window background }; enum ACCENT_FLAG { @@ -998,6 +998,7 @@ const auto &key = *static_cast<const QString *>(args[0]); const auto &newVar = *static_cast<const QVariant *>(args[1]); const auto &oldVar = *static_cast<const QVariant *>(args[2]); + auto &res = *static_cast<bool *>(args[3]); if (!windowId) return; @@ -1021,21 +1022,27 @@ static constexpr const MARGINS margins = {-1, -1, -1, -1}; apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); if (isWin1122H2OrGreater()) { - // Use official DWM API to enable Mica, available since Windows 11 22H2 (10.0.22621). + // Use official DWM API to enable Mica, available since Windows 11 22H2 + // (10.0.22621). const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_MAINWINDOW; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, sizeof(backdropType)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, + &backdropType, sizeof(backdropType)); } else { - // Use undocumented DWM API to enable Mica, available since Windows 11 (10.0.22000). + // Use undocumented DWM API to enable Mica, available since Windows 11 + // (10.0.22000). const BOOL enable = TRUE; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_MICA_EFFECT, &enable, sizeof(enable)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_MICA_EFFECT, &enable, + sizeof(enable)); } } else { if (isWin1122H2OrGreater()) { const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_AUTO; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, sizeof(backdropType)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, + &backdropType, sizeof(backdropType)); } else { const BOOL enable = FALSE; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_MICA_EFFECT, &enable, sizeof(enable)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_MICA_EFFECT, &enable, + sizeof(enable)); } static constexpr const MARGINS margins = {0, 0, 0, 0}; apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); @@ -1049,30 +1056,39 @@ // to see the blurred window background. static constexpr const MARGINS margins = {-1, -1, -1, -1}; apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); - // Use official DWM API to enable Mica Alt, available since Windows 11 22H2 (10.0.22621). + // Use official DWM API to enable Mica Alt, available since Windows 11 22H2 + // (10.0.22621). const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_TABBEDWINDOW; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, sizeof(backdropType)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, + sizeof(backdropType)); } else { const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_AUTO; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, sizeof(backdropType)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, + sizeof(backdropType)); static constexpr const MARGINS margins = {0, 0, 0, 0}; apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); } + res = true; } else if (key == QStringLiteral("acrylic-material")) { - if (newVar.toBool()) { + if (newVar.type() == QVariant::Color) { // We need to extend the window frame into the whole client area to be able // to see the blurred window background. static constexpr const MARGINS margins = {-1, -1, -1, -1}; apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); if (isWin11OrGreater()) { const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_TRANSIENTWINDOW; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, sizeof(backdropType)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, + &backdropType, sizeof(backdropType)); } else { + auto gradientColor = newVar.value<QColor>(); + ACCENT_POLICY policy{}; policy.dwAccentState = ACCENT_ENABLE_ACRYLICBLURBEHIND; policy.dwAccentFlags = ACCENT_ENABLE_ACRYLIC_WITH_LUMINOSITY; // This API expects the #AABBGGRR format. - //policy.dwGradientColor = DWORD(qRgba(gradientColor.blue(), gradientColor.green(), gradientColor.red(), gradientColor.alpha())); + policy.dwGradientColor = + DWORD(qRgba(gradientColor.blue(), gradientColor.green(), + gradientColor.red(), gradientColor.alpha())); WINDOWCOMPOSITIONATTRIBDATA wcad{}; wcad.Attrib = WCA_ACCENT_POLICY; wcad.pvData = &policy; @@ -1082,7 +1098,8 @@ } else { if (isWin11OrGreater()) { const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_AUTO; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, sizeof(backdropType)); + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, + &backdropType, sizeof(backdropType)); } else { ACCENT_POLICY policy{}; policy.dwAccentState = ACCENT_DISABLED; @@ -1096,6 +1113,7 @@ static constexpr const MARGINS margins = {0, 0, 0, 0}; apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); } + res = true; } return; } -- Gitblit v1.9.1