summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/xlib/qxlibintegration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/xlib/qxlibintegration.cpp')
-rw-r--r--src/plugins/platforms/xlib/qxlibintegration.cpp101
1 files changed, 23 insertions, 78 deletions
diff --git a/src/plugins/platforms/xlib/qxlibintegration.cpp b/src/plugins/platforms/xlib/qxlibintegration.cpp
index bf3f06b081..b5c59e9554 100644
--- a/src/plugins/platforms/xlib/qxlibintegration.cpp
+++ b/src/plugins/platforms/xlib/qxlibintegration.cpp
@@ -39,10 +39,13 @@
**
****************************************************************************/
+#include <private/qguiapplication_p.h>
#include "qxlibintegration.h"
-#include "qxlibwindowsurface.h"
+#include "qxlibbackingstore.h"
#include <QtGui/private/qpixmap_raster_p.h>
#include <QtCore/qdebug.h>
+#include <QtGui/qguiglcontext_qpa.h>
+#include <QtGui/qscreen.h>
#include "qxlibwindow.h"
#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
@@ -51,83 +54,49 @@
#include "qxlibclipboard.h"
#include "qxlibdisplay.h"
#include "qxlibnativeinterface.h"
-
-#if !defined(QT_NO_OPENGL)
-#if !defined(QT_OPENGL_ES_2)
-#include <GL/glx.h>
-#else
-#include <EGL/egl.h>
-#endif //!defined(QT_OPENGL_ES_2)
-#include <private/qwindowsurface_gl_p.h>
-#include <qplatformpixmap_gl_p.h>
-#endif //QT_NO_OPENGL
+#include "qglxintegration.h"
QT_BEGIN_NAMESPACE
-QXlibIntegration::QXlibIntegration(bool useOpenGL)
- : mUseOpenGL(useOpenGL)
- , mFontDb(new QGenericUnixFontDatabase())
+QXlibIntegration::QXlibIntegration()
+ : mFontDb(new QGenericUnixFontDatabase())
, mClipboard(0)
, mNativeInterface(new QXlibNativeInterface)
{
+ mEventDispatcher = createUnixEventDispatcher();
+ QGuiApplicationPrivate::instance()->setEventDispatcher(mEventDispatcher);
+
mPrimaryScreen = new QXlibScreen();
mScreens.append(mPrimaryScreen);
+ screenAdded(mPrimaryScreen);
}
-bool QXlibIntegration::hasCapability(QPlatformIntegration::Capability cap) const
+bool QXlibIntegration::hasCapability(QPlatformIntegration::Capability) const
{
- switch (cap) {
- case ThreadedPixmaps: return true;
- case OpenGL: return hasOpenGL();
- default: return QPlatformIntegration::hasCapability(cap);
- }
+ return true;
}
-QPlatformPixmap *QXlibIntegration::createPlatformPixmap(QPlatformPixmap::PixelType type) const
+QPlatformBackingStore *QXlibIntegration::createPlatformBackingStore(QWindow *window) const
{
-#ifndef QT_NO_OPENGL
- if (mUseOpenGL)
- return new QGLPlatformPixmap(type);
-#endif
- return new QRasterPlatformPixmap(type);
+ return new QXlibBackingStore(window);
}
-QWindowSurface *QXlibIntegration::createWindowSurface(QWidget *widget, WId) const
+QPlatformGLContext *QXlibIntegration::createPlatformGLContext(QGuiGLContext *context) const
{
-#ifndef QT_NO_OPENGL
- if (mUseOpenGL)
- return new QGLWindowSurface(widget);
-#endif
- return new QXlibWindowSurface(widget);
-}
-
+ QXlibScreen *screen = static_cast<QXlibScreen *>(context->screen()->handle());
-QPlatformWindow *QXlibIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const
-{
- return new QXlibWindow(widget);
+ return new QGLXContext(screen, context->format(), context->shareHandle());
}
-QAbstractEventDispatcher *QXlibIntegration::createEventDispatcher() const
+
+QPlatformWindow *QXlibIntegration::createPlatformWindow(QWindow *window) const
{
- return createUnixEventDispatcher();
+ return new QXlibWindow(window);
}
-QPixmap QXlibIntegration::grabWindow(WId window, int x, int y, int width, int height) const
+QAbstractEventDispatcher *QXlibIntegration::guiThreadEventDispatcher() const
{
- QImage image;
- QWidget *widget = QWidget::find(window);
- if (widget) {
- QXlibScreen *screen = QXlibScreen::testLiteScreenForWidget(widget);
- image = screen->grabWindow(window,x,y,width,height);
- } else {
- for (int i = 0; i < mScreens.size(); i++) {
- QXlibScreen *screen = static_cast<QXlibScreen *>(mScreens[i]);
- if (screen->rootWindow() == window) {
- image = screen->grabWindow(window,x,y,width,height);
- }
- }
- }
- return QPixmap::fromImage(image);
+ return mEventDispatcher;
}
QPlatformFontDatabase *QXlibIntegration::fontDatabase() const
@@ -150,28 +119,4 @@ QPlatformNativeInterface * QXlibIntegration::nativeInterface() const
return mNativeInterface;
}
-bool QXlibIntegration::hasOpenGL() const
-{
-#if !defined(QT_NO_OPENGL)
-#if !defined(QT_OPENGL_ES_2)
- QXlibScreen *screen = static_cast<QXlibScreen *>(mScreens.at(0));
- return glXQueryExtension(screen->display()->nativeDisplay(), 0, 0) != 0;
-#else
- static bool eglHasbeenInitialized = false;
- static bool wasEglInitialized = false;
- if (!eglHasbeenInitialized) {
- eglHasbeenInitialized = true;
- QXlibScreen *screen = static_cast<QXlibScreen *>(mScreens.at(0));
- EGLint major, minor;
- eglBindAPI(EGL_OPENGL_ES_API);
- EGLDisplay disp = eglGetDisplay(screen->display()->nativeDisplay());
- wasEglInitialized = eglInitialize(disp,&major,&minor);
- screen->setEglDisplay(disp);
- }
- return wasEglInitialized;
-#endif
-#endif
- return false;
-}
-
QT_END_NAMESPACE