From 29901fc2a97eedd3c914f807d1819c9ea7e69973 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周一, 25 12月 2023 17:53:34 +0800 Subject: [PATCH] Optimize Windows 10 border handling --- examples/mainwindow/mainwindow.cpp | 30 ++++++++++++++++++++++++++---- 1 files changed, 26 insertions(+), 4 deletions(-) diff --git a/examples/mainwindow/mainwindow.cpp b/examples/mainwindow/mainwindow.cpp index 7faf057..6a7435e 100644 --- a/examples/mainwindow/mainwindow.cpp +++ b/examples/mainwindow/mainwindow.cpp @@ -20,6 +20,10 @@ #include <widgetframe/windowbar.h> #include <widgetframe/windowbutton.h> +#ifdef Q_OS_WINDOWS +# include <QWKCore/qwindowkit_windows.h> +#endif + class ClockWidget : public QLabel { public: explicit ClockWidget(QWidget *parent = nullptr) : QLabel(parent) { @@ -115,6 +119,16 @@ windowAgent = new QWK::WidgetWindowAgent(this); windowAgent->setup(this); +#ifdef Q_OS_WIN + if (QWK::IsWindows10OrGreater_Real() && !QWK::IsWindows11OrGreater_Real()) { + // windowAgent->setWindowAttribute(QStringLiteral("dark-mode"), true); + + // https://github.com/microsoft/terminal/blob/71a6f26e6ece656084e87de1a528c4a8072eeabd/src/cascadia/WindowsTerminal/NonClientIslandWindow.cpp#L940 + // Must call DWM API to extend top frame to client area + windowAgent->setWindowAttribute(QStringLiteral("extra-margins"), true); + } +#endif + // 2. Construct your title bar auto menuBar = [this]() { auto menuBar = new QMenuBar(); @@ -143,7 +157,9 @@ auto dwmBlurAction = new QAction(tr("Enable DWM blur"), menuBar); dwmBlurAction->setCheckable(true); connect(dwmBlurAction, &QAction::triggered, this, [this](bool checked) { - windowAgent->setWindowAttribute(QStringLiteral("dwm-blur"), checked); + if (!windowAgent->setWindowAttribute(QStringLiteral("dwm-blur"), checked)) { + return; + } setProperty("custom-style", checked); style()->polish(this); }); @@ -151,7 +167,9 @@ auto acrylicAction = new QAction(tr("Enable acrylic material"), menuBar); acrylicAction->setCheckable(true); connect(acrylicAction, &QAction::triggered, this, [this](bool checked) { - windowAgent->setWindowAttribute(QStringLiteral("acrylic-material"), QColor::fromRgbF(1.f, 1.f, 1.f, 0.6f)); + if (!windowAgent->setWindowAttribute(QStringLiteral("acrylic-material"), true)) { + return; + } setProperty("custom-style", checked); style()->polish(this); }); @@ -159,7 +177,9 @@ auto micaAction = new QAction(tr("Enable mica"), menuBar); micaAction->setCheckable(true); connect(micaAction, &QAction::triggered, this, [this](bool checked) { - windowAgent->setWindowAttribute(QStringLiteral("mica"), checked); + if (!windowAgent->setWindowAttribute(QStringLiteral("mica"), checked)) { + return; + } setProperty("custom-style", checked); style()->polish(this); }); @@ -167,7 +187,9 @@ auto micaAltAction = new QAction(tr("Enable mica alt"), menuBar); micaAltAction->setCheckable(true); connect(micaAltAction, &QAction::triggered, this, [this](bool checked) { - windowAgent->setWindowAttribute(QStringLiteral("mica-alt"), checked); + if (!windowAgent->setWindowAttribute(QStringLiteral("mica-alt"), checked)) { + return; + } setProperty("custom-style", checked); style()->polish(this); }); -- Gitblit v1.9.1