summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wayland/qwaylandintegration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wayland/qwaylandintegration.cpp')
-rw-r--r--src/plugins/platforms/wayland/qwaylandintegration.cpp32
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);
}