From 430d245bb94c634047e7b65232eb3e50e2b6e49a Mon Sep 17 00:00:00 2001 From: Zhao Yuhang <2546789017@qq.com> Date: ćšć, 21 12æ 2023 22:00:37 +0800 Subject: [PATCH] add more attrib --- src/stylesupport/styleagent_win.cpp | 56 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/stylesupport/styleagent_win.cpp b/src/stylesupport/styleagent_win.cpp index a685586..67b6532 100644 --- a/src/stylesupport/styleagent_win.cpp +++ b/src/stylesupport/styleagent_win.cpp @@ -2,6 +2,7 @@ #include <QtCore/QSet> #include <QtCore/QVariant> +#include <QtGui/QColor> #include <QWKCore/private/qwkwindowsextra_p.h> #include <QWKCore/private/nativeeventfilter_p.h> @@ -88,13 +89,7 @@ const auto hwnd = reinterpret_cast<HWND>(window->winId()); const DynamicApis &apis = DynamicApis::instance(); - if (key == QStringLiteral("frame-shadow")) { - if (attribute.toBool()) { - // TODO: set off - } else { - // TODO: set on - } - } else if (key == QStringLiteral("mica")) { + if (key == QStringLiteral("mica")) { if (!isWin11OrGreater()) { return false; } @@ -151,7 +146,10 @@ } return true; } else if (key == QStringLiteral("acrylic-material")) { - if (attribute.type() == QVariant::Color) { + if (!isWin10OrGreater()) { + return false; + } + if (attribute.userType() == QMetaType::QColor) { // 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}; @@ -195,6 +193,48 @@ apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); } return true; + } else if (key == QStringLiteral("dwm-blur")) { + if (attribute.toBool()) { + // 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 (isWin8OrGreater()) { + ACCENT_POLICY policy{}; + policy.dwAccentState = ACCENT_ENABLE_BLURBEHIND; + policy.dwAccentFlags = ACCENT_NONE; + WINDOWCOMPOSITIONATTRIBDATA wcad{}; + wcad.Attrib = WCA_ACCENT_POLICY; + wcad.pvData = &policy; + wcad.cbData = sizeof(policy); + apis.pSetWindowCompositionAttribute(hwnd, &wcad); + } else { + DWM_BLURBEHIND bb{}; + bb.fEnable = TRUE; + bb.fTransitionOnMaximized = TRUE; + bb.dwFlags = DWM_BB_ENABLE | DWM_BB_TRANSITIONONMAXIMIZED; + apis.pDwmEnableBlurBehindWindow(hwnd, &bb); + } + } else { + if (isWin8OrGreater()) { + 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); + } else { + DWM_BLURBEHIND bb{}; + bb.fEnable = FALSE; + bb.dwFlags = DWM_BB_ENABLE; + apis.pDwmEnableBlurBehindWindow(hwnd, &bb); + } + static constexpr const MARGINS margins = {0, 0, 0, 0}; + apis.pDwmExtendFrameIntoClientArea(hwnd, &margins); + } + return true; } return false; } -- Gitblit v1.9.1