From 9dcea027f16c4ce5852da3dfc8aca284c582bd7d Mon Sep 17 00:00:00 2001 From: sola.lu <sola.lu.greentest.com.cn> Date: 周五, 06 6月 2025 18:19:18 +0800 Subject: [PATCH] 1.注释掉custom margin,解决程序放大后,遮盖窗口底部内容的问题。 --- src/core/shared/windows10borderhandler_p.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/core/shared/windows10borderhandler_p.h b/src/core/shared/windows10borderhandler_p.h index 7fc9760..8f728f4 100644 --- a/src/core/shared/windows10borderhandler_p.h +++ b/src/core/shared/windows10borderhandler_p.h @@ -1,5 +1,18 @@ +// Copyright (C) 2023-2024 Stdware Collections (https://www.github.com/stdware) +// Copyright (C) 2021-2023 wangwenx190 (Yuhang Zhao) +// SPDX-License-Identifier: Apache-2.0 + #ifndef WINDOWS10BORDERHANDLER_P_H #define WINDOWS10BORDERHANDLER_P_H + +// +// W A R N I N G !!! +// ----------------- +// +// This file is not part of the QWindowKit API. It is used purely as an +// implementation detail. This header file may change from version to +// version without notice, or may even be removed. +// #include <QtGui/QWindow> #include <QtGui/QMouseEvent> @@ -18,10 +31,12 @@ } inline void setupNecessaryAttributes() { - // https://github.com/microsoft/terminal/blob/71a6f26e6ece656084e87de1a528c4a8072eeabd/src/cascadia/WindowsTerminal/NonClientIslandWindow.cpp#L940 - // Must extend top frame to client area - static QVariant defaultMargins = QVariant::fromValue(QMargins(0, 1, 0, 0)); - ctx->setWindowAttribute(QStringLiteral("extra-margins"), defaultMargins); + if (!isWin11OrGreater()) { + // https://github.com/microsoft/terminal/blob/71a6f26e6ece656084e87de1a528c4a8072eeabd/src/cascadia/WindowsTerminal/NonClientIslandWindow.cpp#L940 + // Must extend top frame to client area + static QVariant defaultMargins = QVariant::fromValue(QMargins(0, 1, 0, 0)); + ctx->setWindowAttribute(QStringLiteral("extra-margins"), defaultMargins); + } // Enable dark mode by default, otherwise the system borders are white ctx->setWindowAttribute(QStringLiteral("dark-mode"), true); @@ -32,8 +47,18 @@ (Qt::WindowMinimized | Qt::WindowMaximized | Qt::WindowFullScreen)); } - inline void drawBorder() { - ctx->virtual_hook(AbstractWindowContext::DrawWindows10BorderHook2, nullptr); + inline void drawBorderEmulated(QPainter *painter, const QRect &rect) { + QRegion region(rect); + void *args[] = { + painter, + const_cast<QRect *>(&rect), + ®ion, + }; + ctx->virtual_hook(AbstractWindowContext::DrawWindows10BorderHook_Emulated, args); + } + + inline void drawBorderNative() { + ctx->virtual_hook(AbstractWindowContext::DrawWindows10BorderHook_Native, nullptr); } inline int borderThickness() const { @@ -41,6 +66,11 @@ } inline void updateExtraMargins(bool windowActive) { + if (isWin11OrGreater()) { + return; + } + + // ### FIXME: transparent seam if (windowActive) { // Restore margins when the window is active static QVariant defaultMargins = QVariant::fromValue(QMargins(0, 1, 0, 0)); @@ -81,6 +111,20 @@ break; } + case WM_THEMECHANGED: + case WM_SYSCOLORCHANGE: + case WM_DWMCOLORIZATIONCOLORCHANGED: { + // If we do not refresh this property, the native border will turn white + // permanently (like the dark mode is turned off) after the user changes + // the accent color in system personalization settings. + // So we need this ugly hack to re-apply dark mode to get rid of this + // strange Windows bug. + if (ctx->windowAttribute(QStringLiteral("dark-mode")).toBool()) { + ctx->setWindowAttribute(QStringLiteral("dark-mode"), true); + } + break; + } + default: break; } -- Gitblit v1.9.1