From 087591ff0090d0417dfda10968a0411caab4a7c0 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周六, 23 12月 2023 16:43:42 +0800 Subject: [PATCH] Update document --- src/core/contexts/win32windowcontext.cpp | 83 ++++++++++++++++++++++------------------- 1 files changed, 45 insertions(+), 38 deletions(-) diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index 27450d9..146ce65 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -715,12 +715,18 @@ auto hWnd = reinterpret_cast<HWND>(winId); #if QWINDOWKIT_CONFIG(ENABLE_WINDOWS_SYSTEM_BORDER) - if (!isWin10OrGreater()) -#endif - { + if (!isWin10OrGreater()) { static constexpr const MARGINS margins = {1, 1, 1, 1}; DynamicApis::instance().pDwmExtendFrameIntoClientArea(hWnd, &margins); } +#else + { + static const MARGINS margins = + isWin10OrGreater() ? MARGINS{0, 0, 0, 0} : MARGINS{1, 1, 1, 1}; + DynamicApis::instance().pDwmExtendFrameIntoClientArea(hWnd, &margins); + } +#endif + { auto style = ::GetWindowLongPtrW(hWnd, GWL_STYLE); @@ -852,52 +858,53 @@ } return true; } else if (key == QStringLiteral("acrylic-material")) { - if (!isWin10OrGreater()) { + if (!isWin11OrGreater()) { return false; } - if (attribute.userType() == QMetaType::QColor) { + if (attribute.toBool()) { // We need to extend the window frame into the whole client area to be able // to see the blurred window background. apis.pDwmExtendFrameIntoClientArea(hwnd, &extendMargins); - if (isWin11OrGreater()) { - const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_TRANSIENTWINDOW; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, - sizeof(backdropType)); - } else { - auto gradientColor = attribute.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())); - WINDOWCOMPOSITIONATTRIBDATA wcad{}; - wcad.Attrib = WCA_ACCENT_POLICY; - wcad.pvData = &policy; - wcad.cbData = sizeof(policy); - apis.pSetWindowCompositionAttribute(hwnd, &wcad); - } + const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_TRANSIENTWINDOW; + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, + sizeof(backdropType)); + + // PRIVATE API REFERENCE: + // QColor gradientColor = {}; + // 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())); + // WINDOWCOMPOSITIONATTRIBDATA wcad{}; + // wcad.Attrib = WCA_ACCENT_POLICY; + // wcad.pvData = &policy; + // wcad.cbData = sizeof(policy); + // apis.pSetWindowCompositionAttribute(hwnd, &wcad); } else { - if (isWin11OrGreater()) { - const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_AUTO; - apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, - sizeof(backdropType)); - } else { - ACCENT_POLICY policy{}; - policy.dwAccentState = ACCENT_DISABLED; - policy.dwAccentFlags = ACCENT_NONE; - WINDOWCOMPOSITIONATTRIBDATA wcad{}; - wcad.Attrib = WCA_ACCENT_POLICY; - wcad.pvData = &policy; - wcad.cbData = sizeof(policy); - apis.pSetWindowCompositionAttribute(hwnd, &wcad); - } + const _DWM_SYSTEMBACKDROP_TYPE backdropType = _DWMSBT_AUTO; + apis.pDwmSetWindowAttribute(hwnd, _DWMWA_SYSTEMBACKDROP_TYPE, &backdropType, + sizeof(backdropType)); + + // PRIVATE API REFERENCE: + // ACCENT_POLICY policy{}; + // policy.dwAccentState = ACCENT_DISABLED; + // policy.dwAccentFlags = ACCENT_NONE; + // WINDOWCOMPOSITIONATTRIBDATA wcad{}; + // wcad.Attrib = WCA_ACCENT_POLICY; + // wcad.pvData = &policy; + // wcad.cbData = sizeof(policy); + // apis.pSetWindowCompositionAttribute(hwnd, &wcad); + apis.pDwmExtendFrameIntoClientArea(hwnd, &defaultMargins); } return true; } else if (key == QStringLiteral("dwm-blur")) { + // TODO: Optimize + // Currently not available!!! if (attribute.toBool()) { // We need to extend the window frame into the whole client area to be able // to see the blurred window background. -- Gitblit v1.9.1