/**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions ** contained in the Technology Preview License Agreement accompanying ** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this ** package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. ** ** ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qscreendriverfactory_qws.h" #include "qscreen_qws.h" #include "qapplication.h" #include "qscreenlinuxfb_qws.h" #include "qscreentransformed_qws.h" #include "qscreenvfb_qws.h" #include "qscreenmulti_qws_p.h" #include "qscreenqnx_qws.h" #include #include "private/qfactoryloader_p.h" #include "qscreendriverplugin_qws.h" #ifndef QT_NO_QWS_DIRECTFB #include "qdirectfbscreen.h" #endif #ifndef QT_NO_QWS_VNC #include "qscreenvnc_qws.h" #endif QT_BEGIN_NAMESPACE #if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) #ifndef QT_NO_LIBRARY Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, (QScreenDriverFactoryInterface_iid, QLatin1String("/gfxdrivers"), Qt::CaseInsensitive)) #endif //QT_NO_LIBRARY #endif //QT_MAKEDLL /*! \class QScreenDriverFactory \ingroup qws \brief The QScreenDriverFactory class creates screen drivers in Qt for Embedded Linux. Note that this class is only available in \l{Qt for Embedded Linux}. QScreenDriverFactory is used to detect and instantiate the available screen drivers, allowing \l{Qt for Embedded Linux} to load the preferred driver into the server application at runtime. The create() function returns a QScreen object representing the screen driver identified by a given key. The valid keys (i.e. the supported drivers) can be retrieved using the keys() function. \l{Qt for Embedded Linux} provides several built-in screen drivers. In addition, custom screen drivers can be added using Qt's plugin mechanism, i.e. by subclassing the QScreen class and creating a screen driver plugin (QScreenDriverPlugin). See the \l{Qt for Embedded Linux Display Management}{display management} documentation for details. \sa QScreen, QScreenDriverPlugin */ /*! Creates the screen driver specified by the given \a key, using the display specified by the given \a displayId. Note that the keys are case-insensitive. \sa keys() */ QScreen *QScreenDriverFactory::create(const QString& key, int displayId) { QString driver = key.toLower(); #if defined(Q_OS_QNX) && !defined(QT_NO_QWS_QNX) if (driver == QLatin1String("qnx") || driver.isEmpty()) return new QQnxScreen(displayId); #endif #ifndef QT_NO_QWS_QVFB if (driver == QLatin1String("qvfb") || driver.isEmpty()) return new QVFbScreen(displayId); #endif #ifndef QT_NO_QWS_LINUXFB if (driver == QLatin1String("linuxfb") || driver.isEmpty()) return new QLinuxFbScreen(displayId); #endif #ifndef QT_NO_QWS_DIRECTFB if (driver == QLatin1String("directfb") || driver.isEmpty()) return new QDirectFBScreen(displayId); #endif #ifndef QT_NO_QWS_TRANSFORMED if (driver == QLatin1String("transformed")) return new QTransformedScreen(displayId); #endif #ifndef QT_NO_QWS_VNC if (driver == QLatin1String("vnc")) return new QVNCScreen(displayId); #endif #ifndef QT_NO_QWS_MULTISCREEN if (driver == QLatin1String("multi")) return new QMultiScreen(displayId); #endif #if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) #ifndef QT_NO_LIBRARY if (QScreenDriverFactoryInterface *factory = qobject_cast(loader()->instance(key))) return factory->create(driver, displayId); #endif #endif return 0; } /*! Returns the list of valid keys, i.e. the available screen drivers. \sa create() */ QStringList QScreenDriverFactory::keys() { QStringList list; #if defined(Q_OS_QNX) && !defined(QT_NO_QWS_QNX) list << QLatin1String("QNX"); #endif #ifndef QT_NO_QWS_QVFB list << QLatin1String("QVFb"); #endif #ifndef QT_NO_QWS_LINUXFB list << QLatin1String("LinuxFb"); #endif #ifndef QT_NO_QWS_TRANSFORMED list << QLatin1String("Transformed"); #endif #ifndef QT_NO_QWS_VNC list << QLatin1String("VNC"); #endif #ifndef QT_NO_QWS_MULTISCREEN list << QLatin1String("Multi"); #endif #if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) #ifndef QT_NO_LIBRARY QStringList plugins = loader()->keys(); for (int i = 0; i < plugins.size(); ++i) { # ifdef QT_NO_QWS_QVFB // give QVFb top priority for autodetection if (plugins.at(i) == QLatin1String("QVFb")) list.prepend(plugins.at(i)); else # endif if (!list.contains(plugins.at(i))) list += plugins.at(i); } #endif //QT_NO_LIBRARY #endif //QT_MAKEDLL return list; } QT_END_NAMESPACE