From 1fab480dc53e910a614d5d836993adb743d59352 Mon Sep 17 00:00:00 2001 From: Sine Striker <trueful@163.com> Date: 周六, 16 12月 2023 20:52:30 +0800 Subject: [PATCH] Remove redundant API --- src/core/contexts/win32windowcontext.cpp | 31 ++++++++++++++++++++++++------- 1 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/core/contexts/win32windowcontext.cpp b/src/core/contexts/win32windowcontext.cpp index a2340ac..11b5327 100644 --- a/src/core/contexts/win32windowcontext.cpp +++ b/src/core/contexts/win32windowcontext.cpp @@ -114,6 +114,7 @@ DYNAMIC_API_DECLARE(DwmIsCompositionEnabled); DYNAMIC_API_DECLARE(DwmGetCompositionTimingInfo); DYNAMIC_API_DECLARE(DwmGetWindowAttribute); + DYNAMIC_API_DECLARE(DwmSetWindowAttribute); DYNAMIC_API_DECLARE(GetDpiForWindow); DYNAMIC_API_DECLARE(GetSystemMetricsForDpi); DYNAMIC_API_DECLARE(GetDpiForMonitor); @@ -140,6 +141,7 @@ DYNAMIC_API_RESOLVE(dwmapi, DwmIsCompositionEnabled); DYNAMIC_API_RESOLVE(dwmapi, DwmGetCompositionTimingInfo); DYNAMIC_API_RESOLVE(dwmapi, DwmGetWindowAttribute); + DYNAMIC_API_RESOLVE(dwmapi, DwmSetWindowAttribute); QSystemLibrary winmm(QStringLiteral("winmm")); DYNAMIC_API_RESOLVE(winmm, timeGetDevCaps); @@ -428,8 +430,8 @@ const auto monitorInfo = getMonitorForWindow(hwnd); RECT windowRect{}; ::GetWindowRect(hwnd, &windowRect); - const auto newX = (RECT_WIDTH(monitorInfo.rcMonitor) - RECT_WIDTH(windowRect)) / 2; - const auto newY = (RECT_HEIGHT(monitorInfo.rcMonitor) - RECT_HEIGHT(windowRect)) / 2; + const auto newX = monitorInfo.rcMonitor.left + (RECT_WIDTH(monitorInfo.rcMonitor) - RECT_WIDTH(windowRect)) / 2; + const auto newY = monitorInfo.rcMonitor.top + (RECT_HEIGHT(monitorInfo.rcMonitor) - RECT_HEIGHT(windowRect)) / 2; ::SetWindowPos(hwnd, nullptr, newX, newY, 0, 0, SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER); } @@ -448,6 +450,9 @@ ::GetWindowPlacement(hwnd, &wp); return ((wp.showCmd == SW_NORMAL) || (wp.showCmd == SW_RESTORE)); #else + if (isFullScreen(hwnd)) { + return false; + } const auto style = static_cast<DWORD>(::GetWindowLongPtrW(hwnd, GWL_STYLE)); return (!(style & (WS_MINIMIZE | WS_MAXIMIZE))); #endif @@ -797,7 +802,12 @@ case ShowSystemMenuHook: { const auto &pos = *static_cast<const QPoint *>(data); auto hWnd = reinterpret_cast<HWND>(m_windowHandle->winId()); - showSystemMenu2(hWnd, qpoint2point(pos), false, +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + const QPoint nativeGlobalPos = QHighDpi::toNativeGlobalPosition(pos, m_windowHandle); +#else + const QPoint nativeGlobalPos = QHighDpi::toNativePixels(pos, m_windowHandle); +#endif + showSystemMenu2(hWnd, qpoint2point(nativeGlobalPos), false, m_delegate->isHostSizeFixed(m_host)); return; } @@ -840,7 +850,7 @@ } painter.save(); - // ### TODO: do we need to enable or disable it? + // We needs anti-aliasing to give us better result. painter.setRenderHint(QPainter::Antialiasing); painter.setPen(pen); @@ -872,6 +882,13 @@ // Install window hook auto winId = m_windowHandle->winId(); auto hWnd = reinterpret_cast<HWND>(winId); + +#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) + for (const auto attr : { _DWMWA_USE_IMMERSIVE_DARK_MODE_BEFORE_20H1, _DWMWA_USE_IMMERSIVE_DARK_MODE }) { + const BOOL enable = TRUE; + DynamicApis::instance().pDwmSetWindowAttribute(hWnd, attr, &enable, sizeof(enable)); + } +#endif // Inform Qt we want and have set custom margins updateInternalWindowFrameMargins(hWnd, m_windowHandle); @@ -1154,7 +1171,7 @@ const WindowPart currentWindowPart = lastHitTestResult; if (message == WM_NCMOUSEMOVE) { if (currentWindowPart != WindowPart::ChromeButton) { - m_delegate->resetQtGrabbedControl(); + m_delegate->resetQtGrabbedControl(m_host); if (mouseLeaveBlocked) { emulateClientAreaMessage(hWnd, message, wParam, lParam, WM_NCMOUSELEAVE); @@ -1216,7 +1233,7 @@ // window from client area, which means we will get previous window part as // HTCLIENT if the mouse leaves window from client area and enters window // from non-client area, but it has no bad effect. - m_delegate->resetQtGrabbedControl(); + m_delegate->resetQtGrabbedControl(m_host); } } break; @@ -1236,7 +1253,7 @@ // If wParam is TRUE, the window is being shown. // If lParam is zero, the message was sent because of a call to the ShowWindow // function. - if (wParam && lParam == 0) { + if (wParam && !lParam) { centered = true; moveToDesktopCenter(hWnd); } -- Gitblit v1.9.1