summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-10-30 13:19:49 +0100
committerAndy Nichols <andy.nichols@theqtcompany.com>2015-11-20 13:28:17 +0000
commit8530caea126acce5f1554b6a772f3e32961f3cae (patch)
tree79bed7dcec7fab60209227a34dce84f224f57838
parentd3952b92157f6b56ed08ced5cd491f1f117c64eb (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.cpp24
-rw-r--r--src/input/qinputaspect.h1
-rw-r--r--src/input/qinputaspect_p.h2
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