From ba7e3667d6c3bac46cf20c1b9c7a90801947cd41 Mon Sep 17 00:00:00 2001 From: Ilya Fedin Date: Thu, 14 Jul 2022 12:54:15 +0400 Subject: [PATCH] Adapt for Qt 6.4 device pixel ratio changes QWidget::devicePixelRatioF represents backing store ratio and it's no more equal to native surface ratio --- ui/platform/linux/ui_utility_linux.cpp | 11 +++++++---- ui/platform/win/ui_utility_win.cpp | 7 ++++--- ui/platform/win/ui_window_title_win.cpp | 3 ++- ui/platform/win/ui_window_win.cpp | 6 ++++-- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ui/platform/linux/ui_utility_linux.cpp b/ui/platform/linux/ui_utility_linux.cpp index 9414c55..5066c0b 100644 --- a/ui/platform/linux/ui_utility_linux.cpp +++ b/ui/platform/linux/ui_utility_linux.cpp @@ -21,6 +21,7 @@ #endif // !DESKTOP_APP_DISABLE_X11_INTEGRATION #include +#include #include namespace Ui { @@ -236,9 +237,9 @@ std::optional XCBIsOverlapped( const auto mappedRect = QRect( rect.topLeft() - * widget->devicePixelRatioF() + * widget->windowHandle()->devicePixelRatio() + windowGeometry.topLeft(), - rect.size() * widget->devicePixelRatioF()); + rect.size() * widget->windowHandle()->devicePixelRatio()); const auto cookie = xcb_query_tree(connection, *root); const auto reply = base::Platform::XCB::MakeReplyPointer( @@ -304,7 +305,9 @@ void SetXCBFrameExtents(not_null widget, const QMargins &extents) { return; } - const auto nativeExtents = extents * widget->devicePixelRatioF(); + const auto nativeExtents = extents + * widget->windowHandle()->devicePixelRatio(); + const auto extentsVector = std::vector{ uint(nativeExtents.left()), uint(nativeExtents.right()), @@ -368,7 +371,7 @@ void ShowXCBWindowMenu(not_null widget, const QPoint &point) { } const auto globalPos = point - * widget->devicePixelRatioF() + * widget->windowHandle()->devicePixelRatio() + windowGeometry.topLeft(); xcb_client_message_event_t xev; diff --git a/ui/platform/win/ui_utility_win.cpp b/ui/platform/win/ui_utility_win.cpp index b63a936..6d3154d 100644 --- a/ui/platform/win/ui_utility_win.cpp +++ b/ui/platform/win/ui_utility_win.cpp @@ -9,6 +9,7 @@ #include "base/platform/win/base_windows_h.h" #include +#include #include #include @@ -75,7 +76,7 @@ std::optional IsOverlapped( const auto nativeRect = [&] { const auto topLeft = [&] { const auto qpoints = rect.topLeft() - * widget->devicePixelRatioF(); + * widget->windowHandle()->devicePixelRatio(); POINT result{ qpoints.x(), qpoints.y(), @@ -85,7 +86,7 @@ std::optional IsOverlapped( }(); const auto bottomRight = [&] { const auto qpoints = rect.bottomRight() - * widget->devicePixelRatioF(); + * widget->windowHandle()->devicePixelRatio(); POINT result{ qpoints.x(), qpoints.y(), @@ -122,7 +123,7 @@ std::optional IsOverlapped( void ShowWindowMenu(not_null widget, const QPoint &point) { const auto handle = HWND(widget->winId()); - const auto mapped = point * widget->devicePixelRatioF(); + const auto mapped = point * widget->windowHandle()->devicePixelRatio(); POINT p{ mapped.x(), mapped.y() }; ClientToScreen(handle, &p); SendMessage( diff --git a/ui/platform/win/ui_window_title_win.cpp b/ui/platform/win/ui_window_title_win.cpp index 4defa64..fdb8b89 100644 --- a/ui/platform/win/ui_window_title_win.cpp +++ b/ui/platform/win/ui_window_title_win.cpp @@ -205,7 +205,8 @@ void TitleWidget::refreshAdditionalPaddings( return -1; } const auto pixels = (factor + 50) / 100; - return int(base::SafeRound(pixels / window()->devicePixelRatioF())); + return int(base::SafeRound( + pixels / window()->windowHandle()->devicePixelRatio())); }(); if (padding < 0) { return; diff --git a/ui/platform/win/ui_window_win.cpp b/ui/platform/win/ui_window_win.cpp index 72213a0..995c8d5 100644 --- a/ui/platform/win/ui_window_win.cpp +++ b/ui/platform/win/ui_window_win.cpp @@ -455,7 +455,8 @@ bool WindowHelper::handleNativeEvent( } POINT p{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; ScreenToClient(_handle, &p); - const auto mapped = QPoint(p.x, p.y) / window()->devicePixelRatioF(); + const auto mapped = QPoint(p.x, p.y) + / window()->windowHandle()->devicePixelRatio(); ShowWindowMenu(window(), mapped); if (result) *result = 0; } return true; @@ -547,7 +548,8 @@ bool WindowHelper::handleNativeEvent( POINT p{ GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam) }; ScreenToClient(_handle, &p); - const auto mapped = QPoint(p.x, p.y) / window()->devicePixelRatioF(); + const auto mapped = QPoint(p.x, p.y) + / window()->windowHandle()->devicePixelRatio(); *result = [&] { if (!window()->rect().contains(mapped)) { return HTTRANSPARENT;