diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-10-30 13:19:49 +0100 |
---|---|---|
committer | Andy Nichols <andy.nichols@theqtcompany.com> | 2015-11-20 13:28:17 +0000 |
commit | 8530caea126acce5f1554b6a772f3e32961f3cae (patch) | |
tree | 79bed7dcec7fab60209227a34dce84f224f57838 | |
parent | d3952b92157f6b56ed08ced5cd491f1f117c64eb (diff) |
QInputAspect: load input device plugins on start up
Initialize them and query each plugins for jobs
Change-Id: I244a0f87e389eff12b8e1961c9f3e6f99ad72660
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
-rw-r--r-- | src/input/qinputaspect.cpp | 24 | ||||
-rw-r--r-- | src/input/qinputaspect.h | 1 | ||||
-rw-r--r-- | src/input/qinputaspect_p.h | 2 |
3 files changed, 27 insertions, 0 deletions
diff --git a/src/input/qinputaspect.cpp b/src/input/qinputaspect.cpp index f28cc41e1..5a71cb0e2 100644 --- a/src/input/qinputaspect.cpp +++ b/src/input/qinputaspect.cpp @@ -49,8 +49,14 @@ #include <Qt3DInput/qkeyboardinput.h> #include <Qt3DInput/qmousecontroller.h> #include <Qt3DInput/qmouseinput.h> +#include <Qt3DInput/qabstractinputdevice.h> +#include <Qt3DInput/private/qinputdevicefactory_p.h> #include <Qt3DCore/qservicelocator.h> #include <Qt3DCore/qeventfilterservice.h> +#include <QDir> +#include <QLibrary> +#include <QLibraryInfo> +#include <QPluginLoader> QT_BEGIN_NAMESPACE @@ -83,6 +89,21 @@ QInputAspect::QInputAspect(QObject *parent) registerBackendType<QKeyboardInput>(QBackendNodeFunctorPtr(new Input::KeyboardInputFunctor(d_func()->m_inputHandler.data()))); registerBackendType<QMouseController>(QBackendNodeFunctorPtr(new Input::MouseControllerFunctor(d_func()->m_inputHandler.data()))); registerBackendType<QMouseInput>(QBackendNodeFunctorPtr(new Input::MouseInputFunctor(d_func()->m_inputHandler.data()))); + + loadInputDevicePlugins(); +} + +void QInputAspect::loadInputDevicePlugins() +{ + Q_D(QInputAspect); + QStringList keys = QInputDeviceFactory::keys(); + Q_FOREACH (QString key, keys) { + Qt3DInput::QAbstractInputDevice *inputDevice = QInputDeviceFactory::create(key, QStringList()); + if (inputDevice != Q_NULLPTR) { + d->m_inputDevices.push_back(inputDevice); + inputDevice->initialize(this); + } + } } Qt3DCore::QCamera *QInputAspect::camera() const @@ -106,6 +127,9 @@ QVector<QAspectJobPtr> QInputAspect::jobsToExecute(qint64 time) jobs.append(d->m_inputHandler->keyboardJobs()); jobs.append(d->m_inputHandler->mouseJobs()); + Q_FOREACH (QAbstractInputDevice *inputDevice, d->m_inputDevices) + jobs += inputDevice->jobsToExecute(time); + return jobs; } diff --git a/src/input/qinputaspect.h b/src/input/qinputaspect.h index c7ef94d5d..41d5ae82d 100644 --- a/src/input/qinputaspect.h +++ b/src/input/qinputaspect.h @@ -76,6 +76,7 @@ private: void onCleanup() Q_DECL_OVERRIDE; void visitNode(Qt3DCore::QNode *node); + void loadInputDevicePlugins(); Q_DECLARE_PRIVATE(QInputAspect) }; diff --git a/src/input/qinputaspect_p.h b/src/input/qinputaspect_p.h index f1de52144..3f2f96155 100644 --- a/src/input/qinputaspect_p.h +++ b/src/input/qinputaspect_p.h @@ -55,6 +55,7 @@ QT_BEGIN_NAMESPACE namespace Qt3DInput { class QInputAspect; +class QAbstractInputDevice; namespace Input { class CameraController; @@ -69,6 +70,7 @@ public: Q_DECLARE_PUBLIC(QInputAspect) QScopedPointer<Input::InputHandler> m_inputHandler; QScopedPointer<Input::CameraController> m_cameraController; + QVector<Qt3DInput::QAbstractInputDevice *> m_inputDevices; }; } // namespace Qt3DInput |