From acece00ae291d143c3b712a98814a64b9dd43f14 Mon Sep 17 00:00:00 2001
From: Sine Striker <trueful@163.com>
Date: 周一, 11 12月 2023 17:12:41 +0800
Subject: [PATCH] Remove VersionHelper

---
 src/core/contexts/win32windowcontext.cpp |   53 ++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 42 insertions(+), 11 deletions(-)

diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp
index 9cf1ecc..07ab1d2 100644
--- a/src/core/contexts/win32windowcontext.cpp
+++ b/src/core/contexts/win32windowcontext.cpp
@@ -5,6 +5,7 @@
 #include <QtCore/QHash>
 #include <QtCore/QScopeGuard>
 #include <QtGui/QGuiApplication>
+#include <QtGui/QPainter>
 
 #include <QtCore/private/qsystemlibrary_p.h>
 #include <QtGui/private/qhighdpiscaling_p.h>
@@ -21,7 +22,6 @@
 #include <shellscalingapi.h>
 #include <dwmapi.h>
 #include <timeapi.h>
-#include <versionhelpers.h>
 
 #include "nativeeventfilter.h"
 
@@ -194,23 +194,22 @@
     }
 
     static inline bool isWin8OrGreater() {
-        static const bool result = ::IsWindows8OrGreater();
+        static const bool result = IsWindows8OrGreater_Real();
         return result;
     }
 
     static inline bool isWin8Point1OrGreater() {
-        static const bool result = ::IsWindows8Point1OrGreater();
+        static const bool result = IsWindows8Point1OrGreater_Real();
         return result;
     }
 
     static inline bool isWin10OrGreater() {
-        static const bool result = ::IsWindows10OrGreater();
+        static const bool result = IsWindows10OrGreater_Real();
         return result;
     }
 
     static inline bool isWin11OrGreater() {
-        static const bool result = ::IsWindowsVersionOrGreater(HIBYTE(_WIN32_WINNT_WIN10),
-                                                               LOBYTE(_WIN32_WINNT_WIN10), 22000);
+        static const bool result = IsWindows11OrGreater_Real();
         return result;
     }
 
@@ -669,10 +668,42 @@
         }
     }
 
-    void Win32WindowContext::showSystemMenu(const QPoint &pos) {
-        auto winId = m_windowHandle->winId();
-        auto hWnd = reinterpret_cast<HWND>(winId);
-        showSystemMenu2(hWnd, {pos.x(), pos.y()}, false, m_delegate->isHostSizeFixed(m_host));
+    QString Win32WindowContext::key() const {
+        return "win32";
+    }
+
+    void Win32WindowContext::virtual_hook(int id, void *data) {
+        switch (id) {
+            case ShowSystemMenuHook: {
+                const auto &pos = *reinterpret_cast<const QPoint *>(data);
+                auto winId = m_windowHandle->winId();
+                auto hWnd = reinterpret_cast<HWND>(winId);
+                showSystemMenu2(hWnd, {pos.x(), pos.y()}, false,
+                                m_delegate->isHostSizeFixed(m_host));
+                return;
+            }
+            case NeedsDrawBordersHook: {
+                auto &result = *reinterpret_cast<bool *>(data);
+                result = isWin10OrGreater() && !isWin11OrGreater();
+                return;
+            }
+            case DrawBordersHook: {
+                auto a = reinterpret_cast<void **>(data);
+                auto &painter = *reinterpret_cast<QPainter *>(a[0]);
+                auto &rect = *reinterpret_cast<const QRect *>(a[1]);
+                auto &region = *reinterpret_cast<const QRegion *>(a[2]);
+
+                qDebug() << "paint" << &painter << rect << region;
+
+                // TODO: Draw border
+                // ...
+
+                break;
+            }
+            default:
+                break;
+        }
+        AbstractWindowContext::virtual_hook(id, data);
     }
 
     bool Win32WindowContext::setupHost() {
@@ -742,7 +773,7 @@
         return false; // Not handled
     }
 
-    static constexpr const auto kMessageTag = WPARAM(0x97CCEA99);
+    static constexpr const auto kMessageTag = WPARAM(0xF1C9ADD4);
 
     static inline constexpr bool isTaggedMessage(WPARAM wParam) {
         return (wParam == kMessageTag);

--
Gitblit v1.9.1