diff options
author | Samuel Rødal <samuel.rodal@nokia.com> | 2010-09-07 09:49:34 (GMT) |
---|---|---|
committer | Samuel Rødal <samuel.rodal@nokia.com> | 2010-09-10 10:44:56 (GMT) |
commit | b2ef75097e608afc717604884c4b6e4b22e78dee (patch) | |
tree | 40f9148eba79cfe7e82c9b771b465e953a3ea2ff /tools | |
parent | 0d9c5bc460c66a96edc9416e5d7e5a56983562a4 (diff) | |
download | Qt-b2ef75097e608afc717604884c4b6e4b22e78dee.zip Qt-b2ef75097e608afc717604884c4b6e4b22e78dee.tar.gz Qt-b2ef75097e608afc717604884c4b6e4b22e78dee.tar.bz2 |
Use QFactoryLoader to ensure we get the correct graphics system plugin.
Also, this prevents hard-coding the path to the meego plugin.
Diffstat (limited to 'tools')
-rw-r--r-- | tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h | 2 | ||||
-rw-r--r-- | tools/qmeegographicssystemhelper/qmeegoruntime.cpp | 47 | ||||
-rw-r--r-- | tools/qmeegographicssystemhelper/qmeegoruntime.h | 4 |
3 files changed, 35 insertions, 18 deletions
diff --git a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h index aa301b1..02f2fa2 100644 --- a/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h +++ b/tools/qmeegographicssystemhelper/qmeegographicssystemhelper.h @@ -78,7 +78,7 @@ class QLibrary; \endcode */ -class QMeeGoGraphicsSystemHelper +class Q_DECL_EXPORT QMeeGoGraphicsSystemHelper { public: //! Returns true if running meego. diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp index 66bae1d..70b5dc1 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.cpp +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.cpp @@ -41,9 +41,12 @@ #include "qmeegoruntime.h" +#include <private/qlibrary_p.h> +#include <private/qfactoryloader_p.h> +#include <private/qgraphicssystemplugin_p.h> + #define ENSURE_INITIALIZED {if (!initialized) initialize();} -QLibrary* QMeeGoRuntime::library = NULL; bool QMeeGoRuntime::initialized = false; typedef int (*QMeeGoImageToEglSharedImageFunc) (const QImage&); @@ -66,19 +69,35 @@ static QMeeGoSetTranslucentFunc qt_meego_set_translucent = NULL; void QMeeGoRuntime::initialize() { - library = new QLibrary("/usr/lib/qt4/plugins/graphicssystems/libmeegographicssystem.so"); - Q_ASSERT(library); - - qt_meego_image_to_egl_shared_image = (QMeeGoImageToEglSharedImageFunc) library->resolve("qt_meego_image_to_egl_shared_image"); - qt_meego_pixmapdata_from_egl_shared_image = (QMeeGoPixmapDataFromEglSharedImageFunc) library->resolve("qt_meego_pixmapdata_from_egl_shared_image"); - qt_meego_pixmapdata_with_gl_texture = (QMeeGoPixmapDataWithGLTextureFunc) library->resolve("qt_meego_pixmapdata_with_gl_texture"); - qt_meego_destroy_egl_shared_image = (QMeeGoDestroyEGLSharedImageFunc) library->resolve("qt_meego_destroy_egl_shared_image"); - qt_meego_update_egl_shared_image_pixmap = (QMeeGoUpdateEglSharedImagePixmapFunc) library->resolve("qt_meego_update_egl_shared_image_pixmap"); - qt_meego_set_surface_fixed_size = (QMeeGoSetSurfaceFixedSizeFunc) library->resolve("qt_meego_set_surface_fixed_size"); - qt_meego_set_surface_scaling = (QMeeGoSetSurfaceScalingFunc) library->resolve("qt_meego_set_surface_scaling"); - qt_meego_set_translucent = (QMeeGoSetTranslucentFunc) library->resolve("qt_meego_set_translucent"); - - + QFactoryLoader loader(QGraphicsSystemFactoryInterface_iid, QLatin1String("/graphicssystems"), Qt::CaseInsensitive); + + QLibraryPrivate *libraryPrivate = loader.library(QLatin1String("meego")); + Q_ASSERT(libraryPrivate); + + QLibrary library(libraryPrivate->fileName, libraryPrivate->fullVersion); + + bool success = library.load(); + + if (success) { + qt_meego_image_to_egl_shared_image = (QMeeGoImageToEglSharedImageFunc) library.resolve("qt_meego_image_to_egl_shared_image"); + qt_meego_pixmapdata_from_egl_shared_image = (QMeeGoPixmapDataFromEglSharedImageFunc) library.resolve("qt_meego_pixmapdata_from_egl_shared_image"); + qt_meego_pixmapdata_with_gl_texture = (QMeeGoPixmapDataWithGLTextureFunc) library.resolve("qt_meego_pixmapdata_with_gl_texture"); + qt_meego_destroy_egl_shared_image = (QMeeGoDestroyEGLSharedImageFunc) library.resolve("qt_meego_destroy_egl_shared_image"); + qt_meego_update_egl_shared_image_pixmap = (QMeeGoUpdateEglSharedImagePixmapFunc) library.resolve("qt_meego_update_egl_shared_image_pixmap"); + qt_meego_set_surface_fixed_size = (QMeeGoSetSurfaceFixedSizeFunc) library.resolve("qt_meego_set_surface_fixed_size"); + qt_meego_set_surface_scaling = (QMeeGoSetSurfaceScalingFunc) library.resolve("qt_meego_set_surface_scaling"); + qt_meego_set_translucent = (QMeeGoSetTranslucentFunc) library.resolve("qt_meego_set_translucent"); + + if (qt_meego_image_to_egl_shared_image && qt_meego_pixmapdata_from_egl_shared_image && qt_meego_pixmapdata_with_gl_texture + && qt_meego_destroy_egl_shared_image && qt_meego_update_egl_shared_image_pixmap && qt_meego_set_surface_fixed_size + && qt_meego_set_surface_scaling && qt_meego_set_translucent) + { + qDebug("Successfully resolved MeeGo graphics system: %s %s\n", qPrintable(libraryPrivate->fileName), qPrintable(libraryPrivate->fullVersion)); + } + } else { + Q_ASSERT(false); + } + initialized = true; } diff --git a/tools/qmeegographicssystemhelper/qmeegoruntime.h b/tools/qmeegographicssystemhelper/qmeegoruntime.h index 98bf5b0..82fdb52 100644 --- a/tools/qmeegographicssystemhelper/qmeegoruntime.h +++ b/tools/qmeegographicssystemhelper/qmeegoruntime.h @@ -39,7 +39,6 @@ ** ****************************************************************************/ -#include <QLibrary> #include <QPixmap> #include <QImage> @@ -47,7 +46,7 @@ class QMeeGoRuntime { public: static void initialize(); - + static Qt::HANDLE imageToEGLSharedImage(const QImage &image); static QPixmap pixmapFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage); static QPixmap pixmapWithGLTexture(int w, int h); @@ -59,5 +58,4 @@ public: private: static bool initialized; - static QLibrary *library; }; |