summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/ios/qiosscreen.mm
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/ios/qiosscreen.mm')
-rw-r--r--src/plugins/platforms/ios/qiosscreen.mm60
1 files changed, 8 insertions, 52 deletions
diff --git a/src/plugins/platforms/ios/qiosscreen.mm b/src/plugins/platforms/ios/qiosscreen.mm
index f1184be1b4..266e6848e2 100644
--- a/src/plugins/platforms/ios/qiosscreen.mm
+++ b/src/plugins/platforms/ios/qiosscreen.mm
@@ -238,34 +238,20 @@ QIOSScreen::~QIOSScreen()
void QIOSScreen::updateProperties()
{
- bool inPortrait = UIInterfaceOrientationIsPortrait(m_uiWindow.rootViewController.interfaceOrientation);
- QRect geometry = inPortrait ? fromCGRect(m_uiScreen.bounds).toRect()
- : QRect(m_uiScreen.bounds.origin.x, m_uiScreen.bounds.origin.y,
- m_uiScreen.bounds.size.height, m_uiScreen.bounds.size.width);
+ QRect previousGeometry = m_geometry;
+ QRect previousAvailableGeometry = m_availableGeometry;
- if (geometry != m_geometry) {
- m_geometry = geometry;
+ UIView *rootView = m_uiWindow.rootViewController.view;
+ m_geometry = fromCGRect([rootView convertRect:m_uiScreen.bounds fromView:m_uiWindow]).toRect();
+ m_availableGeometry = fromCGRect([rootView convertRect:m_uiScreen.applicationFrame fromView:m_uiWindow]).toRect();
+
+ if (m_geometry != previousGeometry || m_availableGeometry != previousAvailableGeometry) {
const qreal millimetersPerInch = 25.4;
m_physicalSize = QSizeF(m_geometry.size()) / m_unscaledDpi * millimetersPerInch;
- QWindowSystemInterface::handleScreenGeometryChange(screen(), m_geometry);
+ QWindowSystemInterface::handleScreenGeometryChange(screen(), m_geometry, m_availableGeometry);
}
-
- QRect availableGeometry = geometry;
-
- CGSize applicationFrameSize = m_uiScreen.applicationFrame.size;
- int statusBarHeight = geometry.height() - (inPortrait ? applicationFrameSize.height : applicationFrameSize.width);
-
- availableGeometry.adjust(0, statusBarHeight, 0, 0);
-
- if (availableGeometry != m_availableGeometry) {
- m_availableGeometry = availableGeometry;
- QWindowSystemInterface::handleScreenAvailableGeometryChange(screen(), m_availableGeometry);
- }
-
- if (screen())
- layoutWindows();
}
void QIOSScreen::updateStatusBarVisibility()
@@ -306,36 +292,6 @@ void QIOSScreen::updateStatusBarVisibility()
}
}
-void QIOSScreen::layoutWindows()
-{
- QList<QWindow*> windows = QGuiApplication::topLevelWindows();
-
- const QRect oldGeometry = screen()->geometry();
- const QRect oldAvailableGeometry = screen()->availableGeometry();
- const QRect newGeometry = geometry();
- const QRect newAvailableGeometry = availableGeometry();
-
- for (int i = 0; i < windows.size(); ++i) {
- QWindow *window = windows.at(i);
-
- if (platformScreenForWindow(window) != this)
- continue;
-
- QIOSWindow *platformWindow = static_cast<QIOSWindow *>(window->handle());
- if (!platformWindow)
- continue;
-
- // FIXME: Handle more complex cases of no-state and/or child windows when rotating
-
- if (window->windowState() & Qt::WindowFullScreen
- || (window->windowState() & Qt::WindowNoState && window->geometry() == oldGeometry))
- platformWindow->applyGeometry(newGeometry);
- else if (window->windowState() & Qt::WindowMaximized
- || (window->windowState() & Qt::WindowNoState && window->geometry() == oldAvailableGeometry))
- platformWindow->applyGeometry(newAvailableGeometry);
- }
-}
-
QRect QIOSScreen::geometry() const
{
return m_geometry;