diff options
Diffstat (limited to 'src/plugins/platforms/wayland/qwaylandintegration.cpp')
-rw-r--r-- | src/plugins/platforms/wayland/qwaylandintegration.cpp | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandintegration.cpp b/src/plugins/platforms/wayland/qwaylandintegration.cpp index 02bc680..267a037 100644 --- a/src/plugins/platforms/wayland/qwaylandintegration.cpp +++ b/src/plugins/platforms/wayland/qwaylandintegration.cpp @@ -44,19 +44,22 @@ #include "qwaylanddisplay.h" #include "qwaylandshmsurface.h" #include "qwaylanddrmsurface.h" -#include "qwaylandwindow.h" +#include "qwaylandshmwindow.h" +#include "qwaylandeglwindow.h" -#include "qfontconfigdatabase.h" +#include "qgenericunixfontdatabase.h" #include <QtGui/QWindowSystemInterface> #include <QtGui/QPlatformCursor> #include <QtGui/QPlatformWindowFormat> #include <QtGui/private/qpixmap_raster_p.h> +#ifdef QT_WAYLAND_GL_SUPPORT #include <QtOpenGL/private/qpixmapdata_gl_p.h> +#endif QWaylandIntegration::QWaylandIntegration(bool useOpenGL) - : mFontDb(new QFontconfigDatabase()) + : mFontDb(new QGenericUnixFontDatabase()) , mDisplay(new QWaylandDisplay()) , mUseOpenGL(useOpenGL) { @@ -68,28 +71,41 @@ QWaylandIntegration::screens() const return mDisplay->screens(); } +bool QWaylandIntegration::hasCapability(QPlatformIntegration::Capability cap) const +{ + switch (cap) { + case ThreadedPixmaps: return true; + default: return QPlatformIntegration::hasCapability(cap); + } +} + QPixmapData *QWaylandIntegration::createPixmapData(QPixmapData::PixelType type) const { +#ifdef QT_WAYLAND_GL_SUPPORT if (mUseOpenGL) return new QGLPixmapData(type); +#endif return new QRasterPixmapData(type); } - - QPlatformWindow *QWaylandIntegration::createPlatformWindow(QWidget *widget, WId winId) const { Q_UNUSED(winId); - return new QWaylandWindow(widget); + bool useOpenGL = mUseOpenGL || (widget->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL); + if (useOpenGL) + return new QWaylandEglWindow(widget); + + return new QWaylandShmWindow(widget); } QWindowSurface *QWaylandIntegration::createWindowSurface(QWidget *widget, WId winId) const { Q_UNUSED(winId); Q_UNUSED(winId); - - if (mUseOpenGL) + bool useOpenGL = mUseOpenGL || (widget->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL); + if (useOpenGL) return new QWaylandDrmWindowSurface(widget); + return new QWaylandShmWindowSurface(widget); } |