Compare commits
3 Commits
00a442de54
...
dd75e73e50
Author | SHA1 | Date |
---|---|---|
|
dd75e73e50 | |
|
0563bb8342 | |
|
825a451219 |
2
cmake
2
cmake
|
@ -1 +1 @@
|
|||
Subproject commit dca88aa06c080f5b6abbb8be9c0d2d8a0ee8a165
|
||||
Subproject commit d32871be6542a9e9a066aaa1ddea8fe1a6cd2d86
|
|
@ -819,14 +819,19 @@ using ACCENT_STATE = enum ACCENT_STATE
|
|||
using ACCENT_FLAG = enum ACCENT_FLAG
|
||||
{
|
||||
ACCENT_NONE = 0,
|
||||
ACCENT_ENABLE_ACRYLIC = 1,
|
||||
ACCENT_ENABLE_ACRYLIC_WITH_LUMINOSITY = 482
|
||||
ACCENT_ENABLE_LUMINOSITY = 1 << 1,
|
||||
ACCENT_ENABLE_BORDER_LEFT = 1 << 5,
|
||||
ACCENT_ENABLE_BORDER_TOP = 1 << 6,
|
||||
ACCENT_ENABLE_BORDER_RIGHT = 1 << 7,
|
||||
ACCENT_ENABLE_BORDER_BOTTOM = 1 << 8,
|
||||
ACCENT_ENABLE_BORDER = ACCENT_ENABLE_BORDER_LEFT | ACCENT_ENABLE_BORDER_TOP | ACCENT_ENABLE_BORDER_RIGHT | ACCENT_ENABLE_BORDER_BOTTOM,
|
||||
ACCENT_ENABLE_ALL = ACCENT_ENABLE_BORDER
|
||||
};
|
||||
|
||||
using ACCENT_POLICY = struct ACCENT_POLICY
|
||||
{
|
||||
DWORD dwAccentState;
|
||||
DWORD dwAccentFlags;
|
||||
ACCENT_STATE AccentState;
|
||||
ACCENT_FLAG AccentFlags;
|
||||
DWORD dwGradientColor; // #AABBGGRR
|
||||
DWORD dwAnimationId;
|
||||
};
|
||||
|
|
|
@ -117,7 +117,7 @@ enum class ExtraDataType : quint8
|
|||
};
|
||||
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
|
||||
inline uint qHash(const ExtraDataType key, const uint seed = 0) noexcept {
|
||||
inline uint qHash(ExtraDataType key, uint seed = 0) noexcept {
|
||||
return ::qHash(static_cast<quint8>(key), seed);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -253,13 +253,11 @@ void FramelessHelperWin::addWindow(const QObject *window)
|
|||
// Windows, which means only the top level windows can be scaled to the correct
|
||||
// size, we of course don't want such thing from happening.
|
||||
std::ignore = Utils::fixupChildWindowsDpiMessage(data->windowId);
|
||||
#if 0 // Conflicts with our blur mode setting.
|
||||
// If we are using 3D APIs (D3D, Vulkan, OpenGL, etc) to draw the window content,
|
||||
// we need to setup the DWM rendering policy as well.
|
||||
if (Utils::isWindowAccelerated(qWindow) && Utils::isWindowTransparent(qWindow)) {
|
||||
std::ignore = Utils::updateFramebufferTransparency(data->windowId);
|
||||
}
|
||||
#endif
|
||||
if (WindowsVersionHelper::isWin10RS1OrGreater()) {
|
||||
// Tell DWM we may need dark theme non-client area (title bar & frame border).
|
||||
FramelessHelperEnableThemeAware();
|
||||
|
@ -1279,13 +1277,11 @@ bool FramelessHelperWin::nativeEventFilter(const QByteArray &eventType, void *me
|
|||
}
|
||||
}
|
||||
|
||||
#if 0 // Conflicts with our blur mode setting.
|
||||
if ((uMsg == WM_DWMCOMPOSITIONCHANGED) || (uMsg == WM_DWMCOLORIZATIONCOLORCHANGED)) {
|
||||
if (Utils::isWindowAccelerated(qWindow) && Utils::isWindowTransparent(qWindow)) {
|
||||
std::ignore = Utils::updateFramebufferTransparency(windowId);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
const bool wallpaperChanged = ((uMsg == WM_SETTINGCHANGE) && (wParam == SPI_SETDESKWALLPAPER));
|
||||
bool systemThemeChanged = ((uMsg == WM_THEMECHANGED) || (uMsg == WM_SYSCOLORCHANGE)
|
||||
|
|
|
@ -1221,9 +1221,9 @@ QString Utils::getSystemErrorMessage(const QString &function)
|
|||
if (function.isEmpty()) {
|
||||
return {};
|
||||
}
|
||||
const DWORD code = ::GetLastError();
|
||||
const DWORD code = GetLastError();
|
||||
if (code == ERROR_SUCCESS) {
|
||||
return kSuccessMessageText;
|
||||
return {};
|
||||
}
|
||||
return getSystemErrorMessageImpl(function, code);
|
||||
}
|
||||
|
@ -2314,40 +2314,8 @@ bool Utils::setBlurBehindWindowEnabled(const WId windowId, const BlurMode mode,
|
|||
extraData->mica = false;
|
||||
std::ignore = updateWindowFrameMargins(windowId, false);
|
||||
};
|
||||
static const auto userPreferredBlurMode = []() -> std::optional<BlurMode> {
|
||||
const QString option = qEnvironmentVariable("FRAMELESSHELPER_BLUR_MODE");
|
||||
if (option.isEmpty()) {
|
||||
return std::nullopt;
|
||||
}
|
||||
if (option.contains(FRAMELESSHELPER_STRING_LITERAL("MICAALT"), Qt::CaseInsensitive)) {
|
||||
return BlurMode::Windows_MicaAlt;
|
||||
}
|
||||
if (option.contains(FRAMELESSHELPER_STRING_LITERAL("MICA"), Qt::CaseInsensitive)) {
|
||||
return BlurMode::Windows_Mica;
|
||||
}
|
||||
if (option.contains(FRAMELESSHELPER_STRING_LITERAL("ACRYLIC"), Qt::CaseInsensitive)) {
|
||||
return BlurMode::Windows_Acrylic;
|
||||
}
|
||||
if (option.contains(FRAMELESSHELPER_STRING_LITERAL("AERO"), Qt::CaseInsensitive)) {
|
||||
return BlurMode::Windows_Aero;
|
||||
}
|
||||
return std::nullopt;
|
||||
}();
|
||||
static constexpr const auto kDefaultAcrylicOpacity = 0.8f;
|
||||
static const auto acrylicOpacity = []() -> float {
|
||||
const QString option = qEnvironmentVariable("FRAMELESSHELPER_ACRYLIC_OPACITY");
|
||||
if (option.isEmpty()) {
|
||||
return kDefaultAcrylicOpacity;
|
||||
}
|
||||
bool ok = false;
|
||||
const float num = option.toFloat(&ok);
|
||||
if (ok && !qIsNaN(num) && (num > float(0)) && (num < float(1))) {
|
||||
return num;
|
||||
}
|
||||
return kDefaultAcrylicOpacity;
|
||||
}();
|
||||
static const bool preferMicaAlt = (qEnvironmentVariableIntValue("FRAMELESSHELPER_PREFER_MICA_ALT") != 0);
|
||||
const auto recommendedBlurMode = [mode]() -> BlurMode {
|
||||
const auto blurMode = [mode]() -> BlurMode {
|
||||
if ((mode == BlurMode::Disable) || (mode == BlurMode::Windows_Aero)) {
|
||||
return mode;
|
||||
}
|
||||
|
@ -2378,7 +2346,6 @@ bool Utils::setBlurBehindWindowEnabled(const WId windowId, const BlurMode mode,
|
|||
Q_UNREACHABLE_RETURN(BlurMode::Default);
|
||||
QT_WARNING_POP
|
||||
}();
|
||||
const BlurMode blurMode = ((recommendedBlurMode == BlurMode::Disable) ? BlurMode::Disable : userPreferredBlurMode.value_or(recommendedBlurMode));
|
||||
if (blurMode == BlurMode::Disable) {
|
||||
bool result = true;
|
||||
if (WindowsVersionHelper::isWin1122H2OrGreater()) {
|
||||
|
@ -2400,8 +2367,8 @@ bool Utils::setBlurBehindWindowEnabled(const WId windowId, const BlurMode mode,
|
|||
} else {
|
||||
ACCENT_POLICY policy;
|
||||
SecureZeroMemory(&policy, sizeof(policy));
|
||||
policy.dwAccentState = ACCENT_DISABLED;
|
||||
policy.dwAccentFlags = ACCENT_NONE;
|
||||
policy.AccentState = ACCENT_DISABLED;
|
||||
policy.AccentFlags = ACCENT_NONE;
|
||||
WINDOWCOMPOSITIONATTRIBDATA wcad;
|
||||
SecureZeroMemory(&wcad, sizeof(wcad));
|
||||
wcad.Attrib = WCA_ACCENT_POLICY;
|
||||
|
@ -2466,22 +2433,22 @@ bool Utils::setBlurBehindWindowEnabled(const WId windowId, const BlurMode mode,
|
|||
ACCENT_POLICY policy;
|
||||
SecureZeroMemory(&policy, sizeof(policy));
|
||||
if (blurMode == BlurMode::Windows_Acrylic) {
|
||||
policy.dwAccentState = ACCENT_ENABLE_ACRYLICBLURBEHIND;
|
||||
policy.dwAccentFlags = ACCENT_ENABLE_ACRYLIC_WITH_LUMINOSITY;
|
||||
policy.AccentState = ACCENT_ENABLE_ACRYLICBLURBEHIND;
|
||||
policy.AccentFlags = ACCENT_ENABLE_LUMINOSITY;
|
||||
const auto gradientColor = [&color]() -> QColor {
|
||||
if (color.isValid()) {
|
||||
return color;
|
||||
}
|
||||
QColor clr = ((FramelessManager::instance()->systemTheme() == SystemTheme::Dark) ? kDefaultSystemDarkColor : kDefaultSystemLightColor);
|
||||
clr.setAlphaF(acrylicOpacity);
|
||||
clr.setAlphaF(0.9f);
|
||||
return clr;
|
||||
}();
|
||||
// This API expects the #AABBGGRR format.
|
||||
policy.dwGradientColor = DWORD(qRgba(gradientColor.blue(),
|
||||
gradientColor.green(), gradientColor.red(), gradientColor.alpha()));
|
||||
} else if (blurMode == BlurMode::Windows_Aero) {
|
||||
policy.dwAccentState = ACCENT_ENABLE_BLURBEHIND;
|
||||
policy.dwAccentFlags = ACCENT_NONE;
|
||||
policy.AccentState = ACCENT_ENABLE_BLURBEHIND;
|
||||
policy.AccentFlags = ACCENT_NONE;
|
||||
} else {
|
||||
QT_WARNING_PUSH
|
||||
QT_WARNING_DISABLE_MSVC(4702)
|
||||
|
@ -2610,10 +2577,7 @@ bool Utils::isBlurBehindWindowSupported()
|
|||
if (FramelessConfig::instance()->isSet(Option::ForceNonNativeBackgroundBlur)) {
|
||||
return false;
|
||||
}
|
||||
// Enabling Mica on Win11 make it very hard to hide the original three caption buttons,
|
||||
// and enabling Acrylic on Win10 makes the window very laggy during moving and resizing.
|
||||
//return WindowsVersionHelper::isWin10OrGreater();
|
||||
return false;
|
||||
return WindowsVersionHelper::isWin11OrGreater();
|
||||
}();
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -155,9 +155,9 @@ if(QT_VERSION VERSION_GREATER_EQUAL "6.3")
|
|||
#NO_RESOURCE_TARGET_PATH # Can't be used for non-executable targets.
|
||||
OUTPUT_TARGETS __qml_targets
|
||||
IMPORTS
|
||||
QtQml
|
||||
QtQuick
|
||||
QtQuick.Controls.Basic
|
||||
QtQml/auto
|
||||
QtQuick/auto
|
||||
QtQuick.Controls.Basic/auto
|
||||
)
|
||||
if(__qml_targets)
|
||||
list(APPEND __export_targets ${__qml_targets})
|
||||
|
|
|
@ -69,7 +69,7 @@ static inline void emulateLeaveEvent(QWidget *widget)
|
|||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
|
||||
const QScreen *screen = widget->screen();
|
||||
#else
|
||||
const QScreen *screen = widget->windowHandle()->screen();
|
||||
const QScreen *screen = QGuiApplication::primaryScreen();
|
||||
#endif
|
||||
const QPoint globalPos = QCursor::pos(screen);
|
||||
if (!QRect(widget->mapToGlobal(QPoint{ 0, 0 }), widget->size()).contains(globalPos)) {
|
||||
|
|
Loading…
Reference in New Issue