summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/android/qandroidplatformwindow.cpp
diff options
context:
space:
mode:
authorMorten Sørvig <morten.sorvig@qt.io>2023-11-02 13:20:42 +0100
committerMorten Sørvig <morten.sorvig@qt.io>2023-11-27 19:53:41 +0100
commit940e4e54280c2daababb7ca030fa70bfd77e2bf0 (patch)
tree178c7ddf0034ed4a9345cfd39f2dc2e7b0eeebae /src/plugins/platforms/android/qandroidplatformwindow.cpp
parent96d0f2af75aa069f2b6973a621b3bf6ebaafc9a5 (diff)
Avoid rounding errors for fullscreen window geometry
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ø <tor.arne.vestbo@qt.io> Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/plugins/platforms/android/qandroidplatformwindow.cpp')
-rw-r--r--src/plugins/platforms/android/qandroidplatformwindow.cpp28
1 files 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()