From 940e4e54280c2daababb7ca030fa70bfd77e2bf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20S=C3=B8rvig?= Date: Thu, 2 Nov 2023 13:20:42 +0100 Subject: [PATCH] Avoid rounding errors for fullscreen window geometry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a special case for handling Qt::WindowMaximized and Qt::WindowFullScreen which don't call QPlatformWindow:: initialGeometry(). Handle the case by setting window geometry to be equivalent to available screen geometry. This avoids any rounding errors introduced by scaling available screen geometry by a (possibly) fractional scale factor. Task-number: QTBUG-87334 Change-Id: Ia1b96057bdf3d3787f1b77b81078856fdd33fe9d Reviewed-by: Tor Arne Vestbø Reviewed-by: Assam Boudjelthia Reviewed-by: Qt CI Bot --- .../android/qandroidplatformwindow.cpp | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index b1eba17d04..61d326228c 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -26,19 +26,21 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window) // the following is in relation to the virtual geometry const bool forceMaximize = m_windowState & (Qt::WindowMaximized | Qt::WindowFullScreen); - const QRect requestedNativeGeometry = - forceMaximize ? QRect() : QHighDpi::toNativePixels(window->geometry(), window); - const QRect availableDeviceIndependentGeometry = (window->parent()) - ? window->parent()->geometry() - : QHighDpi::fromNativePixels(platformScreen()->availableGeometry(), window); - - // initialGeometry returns in native pixels - const QRect finalNativeGeometry = QPlatformWindow::initialGeometry( - window, requestedNativeGeometry, availableDeviceIndependentGeometry.width(), - availableDeviceIndependentGeometry.height()); - - if (requestedNativeGeometry != finalNativeGeometry) - setGeometry(finalNativeGeometry); + const QRect nativeScreenGeometry = platformScreen()->availableGeometry(); + if (forceMaximize) { + setGeometry(nativeScreenGeometry); + } else { + const QRect requestedNativeGeometry = QHighDpi::toNativePixels(window->geometry(), window); + const QRect availableDeviceIndependentGeometry = (window->parent()) + ? window->parent()->geometry() + : QHighDpi::fromNativePixels(nativeScreenGeometry, window); + // initialGeometry returns in native pixels + const QRect finalNativeGeometry = QPlatformWindow::initialGeometry( + window, requestedNativeGeometry, availableDeviceIndependentGeometry.width(), + availableDeviceIndependentGeometry.height()); + if (requestedNativeGeometry != finalNativeGeometry) + setGeometry(finalNativeGeometry); + } } void QAndroidPlatformWindow::lower()