platform hooks: provide defaults for screen size and depth hooks
authorJohannes Zellner <johannes.zellner@nokia.com>
Mon, 18 Jun 2012 22:18:43 +0000 (15:18 -0700)
committerQt by Nokia <qt-info@nokia.com>
Mon, 18 Jun 2012 22:38:02 +0000 (00:38 +0200)
Default hooks for querying screen size and color depth based on linux
fbdev API.

Change-Id: I7fc75c0df5e0f507cf679439416fe68c8f62f91d
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
src/plugins/platforms/eglfs/qeglfshooks_stub.cpp

index 487e483..25bf1fd 100644 (file)
 
 #include "qeglfshooks.h"
 
+#include <fcntl.h>
+#include <unistd.h>
+#include <linux/fb.h>
+#include <sys/ioctl.h>
+
 QT_BEGIN_NAMESPACE
 
 void QEglFSHooks::platformInit()
@@ -58,13 +63,48 @@ EGLNativeDisplayType QEglFSHooks::platformDisplay() const
 
 QSize QEglFSHooks::screenSize() const
 {
-    return QSize();
+    static QSize size;
+
+    if (size.isEmpty()) {
+        struct fb_var_screeninfo vinfo;
+        int fd = open("/dev/fb0", O_RDONLY);
+
+        if (fd != -1) {
+            if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) == -1)
+                qWarning("Could not query variable screen info.");
+            else
+                size = QSize(vinfo.xres, vinfo.yres);
+
+            close(fd);
+        } else {
+            qWarning("Failed to open /dev/fb0 to detect screen resolution.");
+        }
+    }
+
+    return size;
 }
 
 int QEglFSHooks::screenDepth() const
 {
     static int depth = qgetenv("QT_QPA_EGLFS_DEPTH").toInt();
-    return depth == 16 ? 16 : 32;
+
+    if (depth == 0) {
+        struct fb_var_screeninfo vinfo;
+        int fd = open("/dev/fb0", O_RDONLY);
+
+        if (fd != -1) {
+            if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo) == -1)
+                qWarning("Could not query variable screen info.");
+            else
+                depth = vinfo.bits_per_pixel;
+
+            close(fd);
+        } else {
+            qWarning("Failed to open /dev/fb0 to detect screen depth.");
+        }
+    }
+
+    return depth == 0 ? 32 : depth;
 }
 
 QImage::Format QEglFSHooks::screenFormat() const