Make QEglFSBackingStore use QtGui-only APIs.
authorSamuel Rødal <samuel.rodal@nokia.com>
Fri, 23 Mar 2012 07:51:15 +0000 (08:51 +0100)
committerQt by Nokia <qt-info@nokia.com>
Fri, 23 Mar 2012 21:05:56 +0000 (22:05 +0100)
We now have better replacements for QGLPaintDevice etc.

Change-Id: I3ac563f0ac26a563b3c788d16c77e0237d9d96d9
Reviewed-by: Donald Carr <donald.carr@nokia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Reviewed-by: Andy Nichols <andy.nichols@nokia.com>
src/plugins/platforms/eglfs/eglfs.pro
src/plugins/platforms/eglfs/qeglfsbackingstore.cpp
src/plugins/platforms/eglfs/qeglfsbackingstore.h

index 86a1b82..c12d612 100644 (file)
@@ -3,10 +3,6 @@ load(qt_plugin)
 
 QT += core-private gui-private platformsupport-private
 
-!contains(QT_CONFIG, no-widgets) {
-    QT += opengl opengl-private widgets-private
-}
-
 DESTDIR = $$QT.gui.plugins/platforms
 
 #DEFINES += QEGL_EXTRA_DEBUG
index d2e4a47..8e9e5f7 100644 (file)
 
 #include "qeglfsbackingstore.h"
 
-#ifndef QT_NO_WIDGETS
-#include <QtOpenGL/private/qgl_p.h>
-#include <QtOpenGL/private/qglpaintdevice_p.h>
-#endif //QT_NO_WIDGETS
-
-#include <QtGui/QPlatformOpenGLContext>
-#include <QtGui/QScreen>
+#include <QtGui/QOpenGLContext>
+#include <QtGui/QOpenGLPaintDevice>
 
 QT_BEGIN_NAMESPACE
 
-#ifndef QT_NO_WIDGETS
-class QEglFSPaintDevice : public QGLPaintDevice
+QEglFSBackingStore::QEglFSBackingStore(QWindow *window)
+    : QPlatformBackingStore(window)
+    , m_context(new QOpenGLContext)
 {
-public:
-    QEglFSPaintDevice(QEglFSScreen *screen)
-        :QGLPaintDevice(), m_screen(screen)
-    {
-    #ifdef QEGL_EXTRA_DEBUG
-        qWarning("QEglPaintDevice %p, %p",this, screen);
-    #endif
-    }
-
-    QSize size() const { return m_screen->geometry().size(); }
-    QGLContext* context() const { return QGLContext::fromOpenGLContext(m_screen->platformContext()->context()); }
-
-    QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); }
+    m_context->setFormat(window->requestedFormat());
+    m_context->setScreen(window->screen());
+    m_context->create();
+}
 
-    void  beginPaint(){
-        QGLPaintDevice::beginPaint();
-    }
-private:
-    QEglFSScreen *m_screen;
-    QGLContext *m_context;
-};
-#endif //QT_NO_WIDGETS
+QEglFSBackingStore::~QEglFSBackingStore()
+{
+    delete m_context;
+}
 
-QEglFSBackingStore::QEglFSBackingStore(QWindow *window)
-    : QPlatformBackingStore(window),
-      m_paintDevice(0)
+QPaintDevice *QEglFSBackingStore::paintDevice()
 {
-#ifdef QEGL_EXTRA_DEBUG
-    qWarning("QEglBackingStore %p, %p", window, window->screen());
-#endif
-#ifdef QT_NO_WIDGETS
-    m_paintDevice = new QImage(0,0);
-#else
-    m_paintDevice = new QEglFSPaintDevice(static_cast<QEglFSScreen *>(window->screen()->handle()));
-#endif //QT_NO_WIDGETS
+    return m_device;
 }
 
 void QEglFSBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset)
 {
-    Q_UNUSED(window);
     Q_UNUSED(region);
     Q_UNUSED(offset);
+
 #ifdef QEGL_EXTRA_DEBUG
     qWarning("QEglBackingStore::flush %p", window);
 #endif
-#ifndef QT_NO_WIDGETS
-    static_cast<QEglFSPaintDevice *>(m_paintDevice)->context()->swapBuffers();
-#endif //QT_NO_WIDGETS
+
+    m_context->swapBuffers(window);
+}
+
+void QEglFSBackingStore::beginPaint(const QRegion &)
+{
+    // needed to prevent QOpenGLContext::makeCurrent() from failing
+    window()->setSurfaceType(QSurface::OpenGLSurface);
+
+    m_context->makeCurrent(window());
+    m_device = new QOpenGLPaintDevice(window()->size());
+}
+
+void QEglFSBackingStore::endPaint()
+{
+    delete m_device;
 }
 
 void QEglFSBackingStore::resize(const QSize &size, const QRegion &staticContents)
index 1ae3ecd..1eb4d8d 100644 (file)
 #ifndef QEGLWINDOWSURFACE_H
 #define QEGLWINDOWSURFACE_H
 
-#include "qeglfsintegration.h"
-#include "qeglfswindow.h"
-
 #include <QtGui/qplatformbackingstore_qpa.h>
 
 QT_BEGIN_NAMESPACE
 
+class QOpenGLContext;
+class QOpenGLPaintDevice;
+
 class QEglFSBackingStore : public QPlatformBackingStore
 {
 public:
     QEglFSBackingStore(QWindow *window);
-    ~QEglFSBackingStore() { delete m_paintDevice; }
+    ~QEglFSBackingStore();
+
+    QPaintDevice *paintDevice();
+
+    void beginPaint(const QRegion &);
+    void endPaint();
 
-    QPaintDevice *paintDevice() { return m_paintDevice; }
     void flush(QWindow *window, const QRegion &region, const QPoint &offset);
     void resize(const QSize &size, const QRegion &staticContents);
 
 private:
-    QPaintDevice *m_paintDevice;
+    QOpenGLContext *m_context;
+    QOpenGLPaintDevice *m_device;
 };
 
 QT_END_NAMESPACE