diff options
author | Andreas Buhr <andreas.buhr@qt.io> | 2021-02-17 20:15:04 +0100 |
---|---|---|
committer | Andreas Buhr <andreas.buhr@qt.io> | 2021-02-23 15:15:45 +0100 |
commit | dec429e0778493bc4e85d6b18202804d0bbbe5f1 (patch) | |
tree | be83afdceb1ca99303b267fd8a8ee5ac69abf7da /src/plugins/platforms/android | |
parent | 4f24e1e9b1230b97a45c6aab366fecd29795e885 (diff) |
Fix handling of virtual/native pixels in QAndroidPlatformWindow
f92e1953699b2529cc6ea2fd399fe4f2b887e83c made sure a new
QAndroidPlatformWindow always has a geometry. However, it did not
take into account HiDPI handling. This patch fixes it and introduces
proper HiDPI handling.
Pick-to: 5.15 6.0 6.1
Fixes: QTBUG-91161
Change-Id: Iddf31b7abfd0a1bada3b051ed4de3bf6c2897d8e
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/android')
-rw-r--r-- | src/plugins/platforms/android/qandroidplatformwindow.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/plugins/platforms/android/qandroidplatformwindow.cpp b/src/plugins/platforms/android/qandroidplatformwindow.cpp index c64805b4e2..e1cf2487fe 100644 --- a/src/plugins/platforms/android/qandroidplatformwindow.cpp +++ b/src/plugins/platforms/android/qandroidplatformwindow.cpp @@ -60,14 +60,21 @@ QAndroidPlatformWindow::QAndroidPlatformWindow(QWindow *window) m_windowId = winIdGenerator.fetchAndAddRelaxed(1) + 1; setWindowState(window->windowStates()); + // the following is in relation to the virtual geometry const bool forceMaximize = m_windowState & (Qt::WindowMaximized | Qt::WindowFullScreen); - const QRect requestedGeometry = forceMaximize ? QRect() : window->geometry(); - const QRect availableGeometry = (window->parent()) ? window->parent()->geometry() : platformScreen()->availableGeometry(); - const QRect finalGeometry = QPlatformWindow::initialGeometry(window, requestedGeometry, - availableGeometry.width(), availableGeometry.height()); - - if (requestedGeometry != finalGeometry) - setGeometry(QHighDpi::toNativePixels(finalGeometry, window)); + 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); } void QAndroidPlatformWindow::lower() |