summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/eglfs
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/eglfs')
-rw-r--r--src/plugins/platforms/eglfs/eglfs.pro12
-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.cpp44
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.h11
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.cpp50
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.h8
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.cpp30
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.h7
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 &region, const QPoint &offset)
+void QEglFSBackingStore::flush(QWindow *widget, const QRegion &region, 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 &region, const QPoint &offset);
- void resize(const QSize &size);
+ void flush(QWindow *window, const QRegion &region, 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