eglfs refactor: Query screen and format info from hooks
authorGirish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Fri, 1 Jun 2012 19:18:45 +0000 (12:18 -0700)
committerQt by Nokia <qt-info@nokia.com>
Tue, 5 Jun 2012 16:48:40 +0000 (18:48 +0200)
This allows boards to customize what they really work best for
without having to set environment variables.

Change-Id: Ib40c3a870ade568f66e37e621a8abc6b17e39411
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
src/plugins/platforms/eglfs/qeglfshooks.h
src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
src/plugins/platforms/eglfs/qeglfsscreen.cpp
src/plugins/platforms/eglfs/qeglfsscreen.h

index 22ba771..baaa90a 100644 (file)
@@ -43,6 +43,8 @@
 #define QEGLFSHOOKS_H
 
 #include <qpa/qplatformintegration.h>
+#include <QtGui/QSurfaceFormat>
+#include <QtGui/QImage>
 #include <EGL/egl.h>
 
 QT_BEGIN_NAMESPACE
@@ -57,6 +59,9 @@ public:
     virtual void platformDestroy();
     virtual EGLNativeDisplayType platformDisplay() const;
     virtual QSize screenSize() const;
+    virtual int screenDepth() const;
+    virtual QImage::Format screenFormat() const;
+    virtual QSurfaceFormat defaultSurfaceFormat() const;
     virtual EGLNativeWindowType createNativeWindow(const QSize &size);
     virtual void destroyNativeWindow(EGLNativeWindowType window);
     virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
index d0e3e45..fbc02d1 100644 (file)
@@ -61,6 +61,39 @@ QSize QEglFSHooks::screenSize() const
     return QSize();
 }
 
+int QEglFSHooks::screenDepth() const
+{
+    static int depth = qgetenv("QT_QPA_EGLFS_DEPTH").toInt();
+    return depth == 16 ? 16 : 32;
+}
+
+QImage::Format QEglFSHooks::screenFormat() const
+{
+    return screenDepth() == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;
+}
+
+QSurfaceFormat QEglFSHooks::defaultSurfaceFormat() const
+{
+    QSurfaceFormat format;
+    if (screenDepth() == 16) {
+        format.setDepthBufferSize(16);
+        format.setRedBufferSize(5);
+        format.setGreenBufferSize(6);
+        format.setBlueBufferSize(5);
+    } else {
+        format.setDepthBufferSize(24);
+        format.setStencilBufferSize(8);
+        format.setRedBufferSize(8);
+        format.setGreenBufferSize(8);
+        format.setBlueBufferSize(8);
+    }
+
+    static int samples = qgetenv("QT_QPA_EGLFS_MULTISAMPLE").toInt();
+    format.setSamples(samples);
+
+    return format;
+}
+
 EGLNativeWindowType QEglFSHooks::createNativeWindow(const QSize &size)
 {
     Q_UNUSED(size);
index 8374ba5..4f14efc 100644 (file)
@@ -80,8 +80,6 @@ public:
 
 QEglFSScreen::QEglFSScreen(EGLDisplay dpy)
     : m_dpy(dpy)
-    , m_depth(32)
-    , m_format(QImage::Format_Invalid)
     , m_platformContext(0)
     , m_surface(0)
     , m_window(0)
@@ -116,28 +114,7 @@ void QEglFSScreen::createAndSetPlatformContext() const {
 
 void QEglFSScreen::createAndSetPlatformContext()
 {
-    QSurfaceFormat platformFormat;
-
-    QByteArray depthString = qgetenv("QT_QPA_EGLFS_DEPTH");
-    if (depthString.toInt() == 16) {
-        platformFormat.setDepthBufferSize(16);
-        platformFormat.setRedBufferSize(5);
-        platformFormat.setGreenBufferSize(6);
-        platformFormat.setBlueBufferSize(5);
-        m_depth = 16;
-        m_format = QImage::Format_RGB16;
-    } else {
-        platformFormat.setDepthBufferSize(24);
-        platformFormat.setStencilBufferSize(8);
-        platformFormat.setRedBufferSize(8);
-        platformFormat.setGreenBufferSize(8);
-        platformFormat.setBlueBufferSize(8);
-        m_depth = 32;
-        m_format = QImage::Format_RGB32;
-    }
-
-    if (!qgetenv("QT_QPA_EGLFS_MULTISAMPLE").isEmpty())
-        platformFormat.setSamples(4);
+    QSurfaceFormat platformFormat = hooks->defaultSurfaceFormat();
 
     EGLConfig config = q_configFromGLFormat(m_dpy, platformFormat);
 
@@ -157,33 +134,21 @@ void QEglFSScreen::createAndSetPlatformContext()
 
     QEGLPlatformContext *platformContext = new QEglFSContext(platformFormat, 0, m_dpy);
     m_platformContext = platformContext;
-
-    EGLint w,h;                    // screen size detection
-    eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w);
-    eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h);
-
-    m_geometry = QRect(0,0,w,h);
-
 }
 
 QRect QEglFSScreen::geometry() const
 {
-    if (m_geometry.isNull()) {
-        createAndSetPlatformContext();
-    }
-    return m_geometry;
+    return QRect(QPoint(0, 0), hooks->screenSize());
 }
 
 int QEglFSScreen::depth() const
 {
-    return m_depth;
+    return hooks->screenDepth();
 }
 
 QImage::Format QEglFSScreen::format() const
 {
-    if (m_format == QImage::Format_Invalid)
-        createAndSetPlatformContext();
-    return m_format;
+    return hooks->screenFormat();
 }
 
 QPlatformCursor *QEglFSScreen::cursor() const
index 7b8860e..9b67e29 100644 (file)
@@ -75,9 +75,6 @@ private:
     void createAndSetPlatformContext();
 
     EGLDisplay m_dpy;
-    QRect m_geometry;
-    int m_depth;
-    QImage::Format m_format;
     QPlatformOpenGLContext *m_platformContext;
     EGLSurface m_surface;
     EGLNativeWindowType m_window;