diff options
Diffstat (limited to 'src/plugins/platforms/eglfs')
-rw-r--r-- | src/plugins/platforms/eglfs/eglfs.pro | 12 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsbackingstore.cpp (renamed from src/plugins/platforms/eglfs/qeglfswindowsurface.cpp) | 31 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsbackingstore.h (renamed from src/plugins/platforms/eglfs/qeglfswindowsurface.h) | 13 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsintegration.cpp | 44 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsintegration.h | 11 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsscreen.cpp | 50 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfsscreen.h | 8 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfswindow.cpp | 30 | ||||
-rw-r--r-- | src/plugins/platforms/eglfs/qeglfswindow.h | 7 |
9 files changed, 101 insertions, 105 deletions
diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro index 471cf63dd8..73698322dd 100644 --- a/src/plugins/platforms/eglfs/eglfs.pro +++ b/src/plugins/platforms/eglfs/eglfs.pro @@ -2,7 +2,7 @@ TARGET = qeglfs TEMPLATE = lib CONFIG += plugin -QT += opengl core-private gui-private opengl-private +QT += opengl core-private gui-private opengl-private platformsupport-private widgets-private DESTDIR = $$QT.gui.plugins/platforms @@ -12,20 +12,16 @@ DESTDIR = $$QT.gui.plugins/platforms SOURCES = main.cpp \ qeglfsintegration.cpp \ - ../eglconvenience/qeglconvenience.cpp \ - ../eglconvenience/qeglplatformcontext.cpp \ qeglfswindow.cpp \ - qeglfswindowsurface.cpp \ + qeglfsbackingstore.cpp \ qeglfsscreen.cpp HEADERS = qeglfsintegration.h \ - ../eglconvenience/qeglconvenience.h \ - ../eglconvenience/qeglplatformcontext.h \ qeglfswindow.h \ - qeglfswindowsurface.h \ + qeglfsbackingstore.h \ qeglfsscreen.h -include(../fontdatabases/genericunix/genericunix.pri) +include(../../../platformsupport/fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp b/src/plugins/platforms/eglfs/qeglfsbackingstore.cpp index 970402015f..1d27be7fb3 100644 --- a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp +++ b/src/plugins/platforms/eglfs/qeglfsbackingstore.cpp @@ -39,11 +39,13 @@ ** ****************************************************************************/ -#include "qeglfswindowsurface.h" +#include <QtOpenGL/private/qgl_p.h> -#include <QtGui/QPlatformGLContext> +#include "qeglfsbackingstore.h" + +#include <QtGui/QPlatformOpenGLContext> +#include <QtGui/QScreen> -#include <QtOpenGL/private/qgl_p.h> #include <QtOpenGL/private/qglpaintdevice_p.h> QT_BEGIN_NAMESPACE @@ -51,16 +53,16 @@ QT_BEGIN_NAMESPACE class QEglFSPaintDevice : public QGLPaintDevice { public: - QEglFSPaintDevice(QEglFSScreen *screen, QWidget *widget) + QEglFSPaintDevice(QEglFSScreen *screen) :QGLPaintDevice(), m_screen(screen) { #ifdef QEGL_EXTRA_DEBUG - qWarning("QEglPaintDevice %p, %p, %p",this, screen, widget); + qWarning("QEglPaintDevice %p, %p",this, screen); #endif } QSize size() const { return m_screen->geometry().size(); } - QGLContext* context() const { return QGLContext::fromPlatformGLContext(m_screen->platformContext());} + QGLContext* context() const { return QGLContext::fromOpenGLContext(m_screen->platformContext()->context()); } QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); } @@ -73,29 +75,30 @@ private: }; -QEglFSWindowSurface::QEglFSWindowSurface( QEglFSScreen *screen, QWidget *window ) - :QWindowSurface(window) +QEglFSBackingStore::QEglFSBackingStore(QWindow *window) + : QPlatformBackingStore(window) { #ifdef QEGL_EXTRA_DEBUG - qWarning("QEglWindowSurface %p, %p", window, screen); + qWarning("QEglBackingStore %p, %p", window, screen); #endif - m_paintDevice = new QEglFSPaintDevice(screen,window); + m_paintDevice = new QEglFSPaintDevice(static_cast<QEglFSScreen *>(window->screen()->handle())); } -void QEglFSWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +void QEglFSBackingStore::flush(QWindow *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); Q_UNUSED(region); Q_UNUSED(offset); #ifdef QEGL_EXTRA_DEBUG - qWarning("QEglWindowSurface::flush %p",widget); + qWarning("QEglBackingStore::flush %p",widget); #endif - widget->platformWindow()->glContext()->swapBuffers(); + static_cast<QEglFSPaintDevice *>(m_paintDevice)->context()->swapBuffers(); } -void QEglFSWindowSurface::resize(const QSize &size) +void QEglFSBackingStore::resize(const QSize &size, const QRegion &staticContents) { Q_UNUSED(size); + Q_UNUSED(staticContents); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.h b/src/plugins/platforms/eglfs/qeglfsbackingstore.h index 9ce8fd4f53..d6a28a7665 100644 --- a/src/plugins/platforms/eglfs/qeglfswindowsurface.h +++ b/src/plugins/platforms/eglfs/qeglfsbackingstore.h @@ -45,19 +45,20 @@ #include "qeglfsintegration.h" #include "qeglfswindow.h" -#include <QtGui/private/qwindowsurface_p.h> +#include <QtGui/qplatformbackingstore_qpa.h> QT_BEGIN_NAMESPACE -class QEglFSWindowSurface : public QWindowSurface +class QEglFSBackingStore : public QPlatformBackingStore { public: - QEglFSWindowSurface(QEglFSScreen *screen, QWidget *window); - ~QEglFSWindowSurface() {} + QEglFSBackingStore(QWindow *window); + ~QEglFSBackingStore() {} QPaintDevice *paintDevice() { return m_paintDevice; } - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void resize(const QSize &size); + void flush(QWindow *window, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size, const QRegion &staticContents); + private: QPaintDevice *m_paintDevice; }; diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp index 9e8596f19e..3d3e05d351 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -42,13 +42,15 @@ #include "qeglfsintegration.h" #include "qeglfswindow.h" -#include "qeglfswindowsurface.h" +#include "qeglfsbackingstore.h" -#include "qgenericunixfontdatabase.h" +#include <QtPlatformSupport/private/qgenericunixfontdatabase_p.h> +#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h> #include <QtGui/QPlatformWindow> -#include <QtGui/QPlatformWindowFormat> -#include <QtGui/private/qpixmap_raster_p.h> +#include <QtGui/QSurfaceFormat> +#include <QtGui/QOpenGLContext> +#include <QtGui/QScreen> #include <EGL/egl.h> @@ -57,9 +59,8 @@ QT_BEGIN_NAMESPACE QEglFSIntegration::QEglFSIntegration() : mFontDb(new QGenericUnixFontDatabase()) { - m_primaryScreen = new QEglFSScreen(EGL_DEFAULT_DISPLAY); + screenAdded(new QEglFSScreen(EGL_DEFAULT_DISPLAY)); - mScreens.append(m_primaryScreen); #ifdef QEGL_EXTRA_DEBUG qWarning("QEglIntegration\n"); #endif @@ -69,36 +70,32 @@ bool QEglFSIntegration::hasCapability(QPlatformIntegration::Capability cap) cons { switch (cap) { case ThreadedPixmaps: return true; + case OpenGL: return true; + case ThreadedOpenGL: return true; default: return QPlatformIntegration::hasCapability(cap); } } -QPixmapData *QEglFSIntegration::createPixmapData(QPixmapData::PixelType type) const +QPlatformWindow *QEglFSIntegration::createPlatformWindow(QWindow *window) const { #ifdef QEGL_EXTRA_DEBUG - qWarning("QEglIntegration::createPixmapData %d\n", type); + qWarning("QEglIntegration::createPlatformWindow %p\n",window); #endif - return new QRasterPixmapData(type); + return new QEglFSWindow(window); } -QPlatformWindow *QEglFSIntegration::createPlatformWindow(QWidget *widget, WId winId) const + +QPlatformBackingStore *QEglFSIntegration::createPlatformBackingStore(QWindow *window) const { - Q_UNUSED(winId); #ifdef QEGL_EXTRA_DEBUG - qWarning("QEglIntegration::createPlatformWindow %p\n",widget); + qWarning("QEglIntegration::createWindowSurface %p\n",widget); #endif - return new QEglFSWindow(widget, m_primaryScreen); + return new QEglFSBackingStore(window); } - -QWindowSurface *QEglFSIntegration::createWindowSurface(QWidget *widget, WId winId) const +QPlatformOpenGLContext *QEglFSIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const { - Q_UNUSED(winId); - -#ifdef QEGL_EXTRA_DEBUG - qWarning("QEglIntegration::createWindowSurface %p\n",widget); -#endif - return new QEglFSWindowSurface(m_primaryScreen,widget); + return static_cast<QEglFSScreen *>(context->screen()->handle())->platformContext(); } QPlatformFontDatabase *QEglFSIntegration::fontDatabase() const @@ -106,4 +103,9 @@ QPlatformFontDatabase *QEglFSIntegration::fontDatabase() const return mFontDb; } +QAbstractEventDispatcher *QEglFSIntegration::guiThreadEventDispatcher() const +{ + return createUnixEventDispatcher(); +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h index 6252a9c0e4..9538850faf 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.h +++ b/src/plugins/platforms/eglfs/qeglfsintegration.h @@ -57,18 +57,17 @@ public: QEglFSIntegration(); bool hasCapability(QPlatformIntegration::Capability cap) const; - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - QList<QPlatformScreen *> screens() const { return mScreens; } + QPlatformWindow *createPlatformWindow(QWindow *window) const; + QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; + QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const; QPlatformFontDatabase *fontDatabase() const; + QAbstractEventDispatcher *guiThreadEventDispatcher() const; + private: QPlatformFontDatabase *mFontDb; - QList<QPlatformScreen *> mScreens; - QEglFSScreen *m_primaryScreen; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index 42195364ae..6f317a375f 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -40,9 +40,10 @@ ****************************************************************************/ #include "qeglfsscreen.h" +#include "qeglfswindow.h" -#include "../eglconvenience/qeglconvenience.h" -#include "../eglconvenience/qeglplatformcontext.h" +#include <QtPlatformSupport/private/qeglconvenience_p.h> +#include <QtPlatformSupport/private/qeglplatformcontext_p.h> #ifdef Q_OPENKODE #include <KD/kd.h> @@ -86,6 +87,23 @@ static struct AttrInfo attrs[] = { {-1, 0}}; #endif //QEGL_EXTRA_DEBUG +class QEglFSContext : public QEGLPlatformContext +{ +public: + QEglFSContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display, + EGLint eglClientVersion = 2, EGLenum eglApi = EGL_OPENGL_ES_API) + : QEGLPlatformContext(format, share, display, eglClientVersion, eglApi) + { + } + + EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) + { + QEglFSWindow *window = static_cast<QEglFSWindow *>(surface); + QEglFSScreen *screen = static_cast<QEglFSScreen *>(window->screen()); + return screen->surface(); + } +}; + QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) : m_depth(32) , m_format(QImage::Format_Invalid) @@ -136,32 +154,29 @@ void QEglFSScreen::createAndSetPlatformContext() const { void QEglFSScreen::createAndSetPlatformContext() { - QPlatformWindowFormat platformFormat = QPlatformWindowFormat::defaultFormat(); - - platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); + QSurfaceFormat platformFormat; QByteArray depthString = qgetenv("QT_QPA_EGLFS_DEPTH"); if (depthString.toInt() == 16) { - platformFormat.setDepth(16); + platformFormat.setDepthBufferSize(16); platformFormat.setRedBufferSize(5); platformFormat.setGreenBufferSize(6); platformFormat.setBlueBufferSize(5); m_depth = 16; m_format = QImage::Format_RGB16; } else { - platformFormat.setDepth(32); + platformFormat.setDepthBufferSize(32); 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.setSampleBuffers(true); - } + if (!qgetenv("QT_QPA_EGLFS_MULTISAMPLE").isEmpty()) + platformFormat.setSamples(4); - EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); + EGLConfig config = q_configFromGLFormat(m_dpy, platformFormat); EGLNativeWindowType eglWindow = 0; #ifdef Q_OPENKODE @@ -193,16 +208,7 @@ void QEglFSScreen::createAndSetPlatformContext() qWarning("\n"); #endif - EGLint temp; - EGLint attribList[32]; - - temp = 0; - - attribList[temp++] = EGL_CONTEXT_CLIENT_VERSION; - attribList[temp++] = 2; // GLES version 2 - attribList[temp++] = EGL_NONE; - - QEGLPlatformContext *platformContext = new QEGLPlatformContext(m_dpy,config,attribList,m_surface,EGL_OPENGL_ES_API); + QEGLPlatformContext *platformContext = new QEglFSContext(platformFormat, 0, m_dpy); m_platformContext = platformContext; EGLint w,h; // screen size detection @@ -232,7 +238,7 @@ QImage::Format QEglFSScreen::format() const createAndSetPlatformContext(); return m_format; } -QPlatformGLContext *QEglFSScreen::platformContext() const +QPlatformOpenGLContext *QEglFSScreen::platformContext() const { if (!m_platformContext) { QEglFSScreen *that = const_cast<QEglFSScreen *>(this); diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.h b/src/plugins/platforms/eglfs/qeglfsscreen.h index 5cf1daca6f..41465d871c 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.h +++ b/src/plugins/platforms/eglfs/qeglfsscreen.h @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE -class QPlatformGLContext; +class QPlatformOpenGLContext; class QEglFSScreen : public QPlatformScreen //huh: FullScreenScreen ;) just to follow namespace { @@ -62,7 +62,9 @@ public: int depth() const; QImage::Format format() const; - QPlatformGLContext *platformContext() const; + QPlatformOpenGLContext *platformContext() const; + + EGLSurface surface() const { return m_surface; } private: void createAndSetPlatformContext() const; @@ -71,7 +73,7 @@ private: QRect m_geometry; int m_depth; QImage::Format m_format; - QPlatformGLContext *m_platformContext; + QPlatformOpenGLContext *m_platformContext; EGLDisplay m_dpy; EGLSurface m_surface; }; diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp index 24b17b75e7..a6115cc829 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.cpp +++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp @@ -45,25 +45,26 @@ QT_BEGIN_NAMESPACE -QEglFSWindow::QEglFSWindow(QWidget *w, QEglFSScreen *screen) - : QPlatformWindow(w), m_screen(screen) +QEglFSWindow::QEglFSWindow(QWindow *w) + : QPlatformWindow(w) { static int serialNo = 0; m_winid = ++serialNo; #ifdef QEGL_EXTRA_DEBUG - qWarning("QEglWindow %p: %p %p 0x%x\n", this, w, screen, uint(m_winid)); + qWarning("QEglWindow %p: %p 0x%x\n", this, w, uint(m_winid)); #endif -} + QRect screenGeometry(screen()->availableGeometry()); + if (w->geometry() != screenGeometry) { + QWindowSystemInterface::handleGeometryChange(w, screenGeometry); + } +} void QEglFSWindow::setGeometry(const QRect &) { // We only support full-screen windows - QRect rect(m_screen->availableGeometry()); - QWindowSystemInterface::handleGeometryChange(this->widget(), rect); - - // Since toplevels are fullscreen, propegate the screen size back to the widget - widget()->setGeometry(rect); + QRect rect(screen()->availableGeometry()); + QWindowSystemInterface::handleGeometryChange(window(), rect); QPlatformWindow::setGeometry(rect); } @@ -73,15 +74,4 @@ WId QEglFSWindow::winId() const return m_winid; } - - -QPlatformGLContext *QEglFSWindow::glContext() const -{ -#ifdef QEGL_EXTRA_DEBUG - qWarning("QEglWindow::glContext %p\n", m_screen->platformContext()); -#endif - Q_ASSERT(m_screen); - return m_screen->platformContext(); -} - QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfswindow.h b/src/plugins/platforms/eglfs/qeglfswindow.h index 95a9ff51b9..09f553d3b7 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.h +++ b/src/plugins/platforms/eglfs/qeglfswindow.h @@ -46,22 +46,19 @@ #include "qeglfsscreen.h" #include <QPlatformWindow> -#include <QtGui/QWidget> +#include <QtWidgets/QWidget> QT_BEGIN_NAMESPACE class QEglFSWindow : public QPlatformWindow { public: - QEglFSWindow(QWidget *w, QEglFSScreen *screen); + QEglFSWindow(QWindow *w); void setGeometry(const QRect &); WId winId() const; - QPlatformGLContext *glContext() const; - private: - QEglFSScreen *m_screen; WId m_winid; }; QT_END_NAMESPACE |