From f9f54bc0e46e6abc88316e653347036994e2eba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 19 Dec 2014 17:12:41 +0100 Subject: Add some missing nativeResourceForIntegration imlementations The EglDisplay and the Display is normally a PlatformIntegration wide resource Change-Id: Ie5382a2a0b34fbe1c506b5134bf581afbd7f5d99 Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../xcb_egl/qxcbeglnativeinterfacehandler.cpp | 19 +++++++++++++++++++ .../xcb_egl/qxcbeglnativeinterfacehandler.h | 2 ++ src/plugins/platforms/xcb/qxcbnativeinterface.cpp | 14 ++++++++++++++ src/plugins/platforms/xcb/qxcbnativeinterface.h | 1 + 4 files changed, 36 insertions(+) (limited to 'src/plugins/platforms/xcb') diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp index 3037d1e331..e65a7bb085 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp @@ -41,7 +41,9 @@ #include "qxcbeglnativeinterfacehandler.h" +#include #include "qxcbeglwindow.h" +#include "qxcbintegration.h" #include "qxcbeglintegration.h" #include "qxcbeglcontext.h" @@ -70,6 +72,16 @@ QXcbEglNativeInterfaceHandler::QXcbEglNativeInterfaceHandler(QXcbNativeInterface { } +QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbEglNativeInterfaceHandler::nativeResourceFunctionForIntegration(const QByteArray &resource) const{ + switch (resourceType(resource)) { + case EglDisplay: + return eglDisplay; + default: + break; + } + return Q_NULLPTR; +} + QPlatformNativeInterface::NativeResourceForContextFunction QXcbEglNativeInterfaceHandler::nativeResourceFunctionForContext(const QByteArray &resource) const { switch (resourceType(resource)) { @@ -94,6 +106,13 @@ QPlatformNativeInterface::NativeResourceForWindowFunction QXcbEglNativeInterface return Q_NULLPTR; } +void *QXcbEglNativeInterfaceHandler::eglDisplay() +{ + QXcbIntegration *integration = static_cast(QGuiApplicationPrivate::platformIntegration()); + QXcbEglIntegration *eglIntegration = static_cast(integration->defaultConnection()->glIntegration()); + return eglIntegration->eglDisplay(); +} + void *QXcbEglNativeInterfaceHandler::eglDisplayForWindow(QWindow *window) { Q_ASSERT(window); diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h index 0485a87558..7734bcd048 100644 --- a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h +++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h @@ -57,9 +57,11 @@ public: QXcbEglNativeInterfaceHandler(QXcbNativeInterface *nativeInterface); + QPlatformNativeInterface::NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) const Q_DECL_OVERRIDE; QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const Q_DECL_OVERRIDE; QPlatformNativeInterface::NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) const Q_DECL_OVERRIDE; private: + static void *eglDisplay(); static void *eglDisplayForWindow(QWindow *window); static void *eglContextForContext(QOpenGLContext *context); static void *eglConfigForContext(QOpenGLContext *context); diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp index d5b8e6aead..956b0f83d2 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp @@ -228,6 +228,9 @@ void *QXcbNativeInterface::nativeResourceForIntegration(const QByteArray &resour case RootWindow: result = rootWindow(); break; + case Display: + result = display(); + break; default: break; } @@ -421,6 +424,17 @@ void *QXcbNativeInterface::rootWindow() return 0; } +void *QXcbNativeInterface::display() +{ +#ifdef XCB_USE_XLIB + QXcbIntegration *integration = static_cast(QGuiApplicationPrivate::platformIntegration()); + QXcbConnection *defaultConnection = integration->defaultConnection(); + return defaultConnection->xlib_display(); +#else + return 0; +#endif +} + void QXcbNativeInterface::setAppTime(QScreen* screen, xcb_timestamp_t time) { static_cast(screen->handle())->connection()->setTime(time); diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h index 702aee63d8..b2044e6ee9 100644 --- a/src/plugins/platforms/xcb/qxcbnativeinterface.h +++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h @@ -95,6 +95,7 @@ public: void *startupId(); void *x11Screen(); void *rootWindow(); + void *display(); static void setStartupId(const char *); static void setAppTime(QScreen *screen, xcb_timestamp_t time); static void setAppUserTime(QScreen *screen, xcb_timestamp_t time); -- cgit v1.2.3