QNX: Take orientation into account when reporting physical size
authorSean Harmer <sean.harmer.qnx@kdab.com>
Mon, 21 May 2012 10:49:54 +0000 (11:49 +0100)
committerQt by Nokia <qt-info@nokia.com>
Mon, 21 May 2012 14:02:06 +0000 (16:02 +0200)
Previously landscape orientation was assumed in the QQnxScreen ctor. We
now calculate the initial physical dimensions correctly.

Change-Id: I6c434eaba1f931c769f343671fb80052287b51e5
Reviewed-by: Kevin Ottens <kevin.ottens.qnx@kdab.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
src/plugins/platforms/qnx/qqnxscreen.cpp

index 8bdc497..e788ce9 100644 (file)
@@ -82,14 +82,19 @@ QQnxScreen::QQnxScreen(screen_context_t screenContext, screen_display_t display,
 
     m_currentGeometry = m_initialGeometry = QRect(0, 0, val[0], val[1]);
 
-    // Cache size of this display in millimeters
+    // Cache size of this display in millimeters. We have to take care of the orientation.
+    // libscreen always reports the physical size dimensions as width and height in the
+    // landscape orientation. Contrary to this, QPlatformScreen::physicalSize() expects the
+    // returned dimensions to follow the current orientation.
     errno = 0;
     result = screen_get_display_property_iv(m_display, SCREEN_PROPERTY_PHYSICAL_SIZE, val);
     if (result != 0) {
         qFatal("QQnxScreen: failed to query display physical size, errno=%d", errno);
     }
-
-    m_currentPhysicalSize = m_initialPhysicalSize = QSize(val[0], val[1]);
+    if (m_currentRotation == 0 || m_currentRotation == 180)
+        m_currentPhysicalSize = m_initialPhysicalSize = QSize(val[0], val[1]);
+    else
+        m_currentPhysicalSize = m_initialPhysicalSize = QSize(val[1], val[0]);
 
     // We only create the root window if we are the primary display.
     if (primaryScreen)