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 ®ion = *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