Support scaled output for non-FHD screen
[staging/HomeScreen.git] / WindowManager / src / windowmanager.cpp
index 84f467d..cee7ad7 100644 (file)
 // the HomeScreen app has to have the surface id 1000
 #define WINDOWMANAGER_HOMESCREEN_MAIN_SURFACE_ID 1000
 
+// Quick hack for scaling layer to fit non-FHD(1920x1080) screen
+//  * source rect of layer should be 1920x1080
+//  * destination rect of layer should fit physical display resolution
+//  * source rect of surface shoud be based on 1920x1080
+//  * destination rect of surface should be based on 1920x1080
+#define WINDOWMANAGER_HOMESCREEN_WIDTH  1080
+#define WINDOWMANAGER_HOMESCREEN_HEIGHT 1920
+
 void* WindowManager::myThis = 0;
 
-WindowManager::WindowManager(QObject *parent) :
+WindowManager::WindowManager(int displayId, QObject *parent) :
     QObject(parent),
     m_layouts(),
     //    m_appSurfaces(),
     mp_layoutAreaToSurfaceIdAssignment(0),
     m_currentLayout(-1),
-    m_screenId(0), // use screen "0"
+    m_screenId(displayId),
     m_screenWidth(0),
-    m_screenHeight(0),
+    m_screenHeight(0)
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
+  ,
     m_appLayers(),
     m_pending_to_show(-1)
+#endif
 {
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     m_showLayers = new t_ilm_layer[WINDOWMANAGER_LAYER_NUM];
 
     m_showLayers[0] = 0; /* POPUP is not shown by default */
@@ -59,6 +71,7 @@ WindowManager::WindowManager(QObject *parent) :
     m_showLayers[2] = 0; /* APPLICATIONS is not shown by default */
     m_showLayers[3] = WINDOWMANAGER_LAYER_HOMESCREEN; /* HOMESCREEN is shwon by default */
 
+#endif
     qDebug("-=[WindowManager]=-");
 }
 
@@ -107,6 +120,7 @@ WindowManager::~WindowManager()
     delete mp_layoutAreaToSurfaceIdAssignment;
 }
 
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
 int WindowManager::getLayerRenderOrder(t_ilm_layer id_array[])
 {
     int i, j;
@@ -119,6 +133,7 @@ int WindowManager::getLayerRenderOrder(t_ilm_layer id_array[])
 
     return j;
 }
+#endif
 
 void WindowManager::dumpScene()
 {
@@ -152,14 +167,16 @@ void WindowManager::createNewLayer(int layerId)
     qDebug("  layerId %d", layerId);
 
     t_ilm_layer newLayerId = layerId;
-    ilm_layerCreateWithDimension(&newLayerId, m_screenWidth, m_screenHeight);
+    ilm_layerCreateWithDimension(&newLayerId,
+                                    WINDOWMANAGER_HOMESCREEN_WIDTH,
+                                    WINDOWMANAGER_HOMESCREEN_HEIGHT);
     ilm_layerSetOpacity(newLayerId, 1.0);
     ilm_layerSetVisibility(newLayerId, ILM_TRUE);
     ilm_layerSetSourceRectangle(newLayerId,
                                     0,
                                     0,
-                                    m_screenWidth,
-                                    m_screenHeight);
+                                    WINDOWMANAGER_HOMESCREEN_WIDTH,
+                                    WINDOWMANAGER_HOMESCREEN_HEIGHT);
     ilm_layerSetDestinationRectangle(newLayerId,
                                     0,
                                     0,
@@ -222,7 +239,9 @@ void WindowManager::addSurfaceToLayer(int surfaceId, int layerId)
         ilm_getPropertiesOfSurface(surfaceId, &surfaceProperties);
 
         // homescreen app always fullscreen in the back
-        ilm_surfaceSetDestinationRectangle(surfaceId, 0, 0, m_screenWidth, m_screenHeight);
+        ilm_surfaceSetDestinationRectangle(surfaceId, 0, 0,
+                                           WINDOWMANAGER_HOMESCREEN_WIDTH,
+                                           WINDOWMANAGER_HOMESCREEN_HEIGHT);
         //ilm_surfaceSetSourceRectangle(surfaceId, 0, 0, m_screenWidth, m_screenHeight);
         ilm_surfaceSetOpacity(surfaceId, 1.0);
         ilm_surfaceSetVisibility(surfaceId, ILM_TRUE);
@@ -347,6 +366,7 @@ void WindowManager::updateScreen()
     ilm_layerSetRenderOrder(WINDOWMANAGER_LAYER_POPUP, pArray, length);
     ilm_commitChanges();
 #endif
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     if (m_pending_to_show != -1) {
         showAppLayer(m_pending_to_show);
     } else {
@@ -356,6 +376,7 @@ void WindowManager::updateScreen()
         ilm_displaySetRenderOrder(m_screenId, renderOrder, num_layers);
         ilm_commitChanges();
     }
+#endif
 }
 
 #ifdef HAVE_IVI_LAYERMANAGEMENT_API
@@ -782,11 +803,11 @@ void WindowManager::showAppLayer(int pid)
         /* nothing to show */
         return;
     }
+#ifdef HAVE_IVI_LAYERMANAGEMENT_API
 
     /* clear pending flag */
     m_pending_to_show = -1;
 
-#ifdef HAVE_IVI_LAYERMANAGEMENT_API
     /* search layer id for application to show */
     QMap<pid_t, t_ilm_layer>::const_iterator i = m_appLayers.find(pid);