diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-12-01 16:22:35 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-12-04 19:07:21 +0000 |
commit | 670d242385172262f802f378c996545cd328ca94 (patch) | |
tree | d0a06fcd98ad5763d5b7165f381648e02e2a28d8 /src | |
parent | 209e2eecd33d8194fe2e4f9501e4f8eb9ee836da (diff) |
Store vector of active AxisActionHandlers
Change-Id: I33fb52391936d8f19757351aded8b1dae662fee3
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/input/backend/axisactionhandler.cpp | 28 | ||||
-rw-r--r-- | src/input/backend/axisactionhandler_p.h | 15 | ||||
-rw-r--r-- | src/input/backend/inputmanagers_p.h | 7 | ||||
-rw-r--r-- | src/input/frontend/qinputaspect.cpp | 13 |
4 files changed, 59 insertions, 4 deletions
diff --git a/src/input/backend/axisactionhandler.cpp b/src/input/backend/axisactionhandler.cpp index df7282321..65f8fa4de 100644 --- a/src/input/backend/axisactionhandler.cpp +++ b/src/input/backend/axisactionhandler.cpp @@ -38,6 +38,7 @@ #include <Qt3DInput/qaxisactionhandler.h> #include <Qt3DInput/qlogicaldevice.h> #include <Qt3DCore/qscenepropertychange.h> +#include <Qt3DInput/private/inputmanagers_p.h> QT_BEGIN_NAMESPACE @@ -73,6 +74,33 @@ void AxisActionHandler::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) } } +AxisActionHandlerNodeFunctor::AxisActionHandlerNodeFunctor(AxisActionHandlerManager *manager) + : m_manager(manager) +{ +} + +Qt3DCore::QBackendNode *AxisActionHandlerNodeFunctor::create(Qt3DCore::QNode *frontend, const Qt3DCore::QBackendNodeFactory *factory) const +{ + HAxisActionHandler handle = m_manager->getOrAcquireHandle(frontend->id()); + AxisActionHandler *backend = m_manager->data(handle); + m_manager->addActiveAxisActionHandler(handle); + backend->setFactory(factory); + backend->setPeer(frontend); + return backend; +} + +Qt3DCore::QBackendNode *AxisActionHandlerNodeFunctor::get(const Qt3DCore::QNodeId &id) const +{ + return m_manager->lookupResource(id); +} + +void AxisActionHandlerNodeFunctor::destroy(const Qt3DCore::QNodeId &id) const +{ + HAxisActionHandler handle = m_manager->lookupHandle(id); + m_manager->releaseResource(id); + m_manager->removeActiveAxisActionHandler(handle); +} + } // namespace Input } // namespace Qt3DInput diff --git a/src/input/backend/axisactionhandler_p.h b/src/input/backend/axisactionhandler_p.h index a8a5d983a..34f621e04 100644 --- a/src/input/backend/axisactionhandler_p.h +++ b/src/input/backend/axisactionhandler_p.h @@ -56,6 +56,8 @@ QT_BEGIN_NAMESPACE namespace Qt3DInput { namespace Input { +class AxisActionHandlerManager; + class AxisActionHandler : public Qt3DCore::QBackendNode { public: @@ -70,6 +72,19 @@ private: Qt3DCore::QNodeId m_logicalDevice; }; +class AxisActionHandlerNodeFunctor : public Qt3DCore::QBackendNodeFunctor +{ +public: + explicit AxisActionHandlerNodeFunctor(AxisActionHandlerManager *manager); + + Qt3DCore::QBackendNode *create(Qt3DCore::QNode *frontend, const Qt3DCore::QBackendNodeFactory *factory) const Q_DECL_FINAL; + Qt3DCore::QBackendNode *get(const Qt3DCore::QNodeId &id) const Q_DECL_FINAL; + void destroy(const Qt3DCore::QNodeId &id) const Q_DECL_FINAL; + +private: + AxisActionHandlerManager *m_manager; +}; + } // namespace Input } // namespace Qt3DInput diff --git a/src/input/backend/inputmanagers_p.h b/src/input/backend/inputmanagers_p.h index e18f8de4d..eb7cc8800 100644 --- a/src/input/backend/inputmanagers_p.h +++ b/src/input/backend/inputmanagers_p.h @@ -126,6 +126,13 @@ class AxisActionHandlerManager : public Qt3DCore::QResourceManager< { public: AxisActionHandlerManager() {} + + void addActiveAxisActionHandler(HAxisActionHandler handle) { m_activeAxisActionHandlers.push_back(handle); } + void removeActiveAxisActionHandler(HAxisActionHandler handle) { m_activeAxisActionHandlers.removeOne(handle); } + QVector<HAxisActionHandler> activeAxisActionHandlers() const { return m_activeAxisActionHandlers; } + +private: + QVector<HAxisActionHandler> m_activeAxisActionHandlers; }; class AxisSettingManager : public Qt3DCore::QResourceManager< diff --git a/src/input/frontend/qinputaspect.cpp b/src/input/frontend/qinputaspect.cpp index ad1a01e0c..fc08b2959 100644 --- a/src/input/frontend/qinputaspect.cpp +++ b/src/input/frontend/qinputaspect.cpp @@ -109,7 +109,7 @@ QInputAspect::QInputAspect(QObject *parent) registerBackendType<QAxisSetting>(QBackendNodeFunctorPtr(new Input::InputNodeFunctor<Input::AxisSetting, Input::AxisSettingManager>(d_func()->m_inputHandler->axisSettingManager()))); registerBackendType<Qt3DInput::QAction>(QBackendNodeFunctorPtr(new Input::InputNodeFunctor<Input::Action, Input::ActionManager>(d_func()->m_inputHandler->actionManager()))); registerBackendType<QActionInput>(QBackendNodeFunctorPtr(new Input::InputNodeFunctor<Input::ActionInput, Input::ActionInputManager>(d_func()->m_inputHandler->actionInputManager()))); - registerBackendType<Qt3DInput::QAxisActionHandler>(QBackendNodeFunctorPtr(new Input::InputNodeFunctor<Input::AxisActionHandler, Input::AxisActionHandlerManager>(d_func()->m_inputHandler->axisActionHandlerManager()))); + registerBackendType<Qt3DInput::QAxisActionHandler>(QBackendNodeFunctorPtr(new Input::AxisActionHandlerNodeFunctor(d_func()->m_inputHandler->axisActionHandlerManager()))); registerBackendType<QLogicalDevice>(QBackendNodeFunctorPtr(new Input::LogicalDeviceNodeFunctor(d_func()->m_inputHandler->logicalDeviceManager()))); loadInputDevicePlugins(); @@ -179,9 +179,14 @@ QVector<QAspectJobPtr> QInputAspect::jobsToExecute(qint64 time) jobs += axisActionJobs; - // TO DO: - // Have Jobs that update the LogicalDevice - // Have Jobs that update the AxisHandlers/ActionHandlers + // For each AxisActionInputHandler + // Find the LogicalDevice + // Find each Axis + // Check if their values have changed since the last time + // If so -> add to notification payload + // Find each Action + // Check if action state has changed since last frame + // If so -> add to notification payload return jobs; } |