summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-12-01 16:22:35 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-12-04 19:07:21 +0000
commit670d242385172262f802f378c996545cd328ca94 (patch)
treed0a06fcd98ad5763d5b7165f381648e02e2a28d8 /src
parent209e2eecd33d8194fe2e4f9501e4f8eb9ee836da (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.cpp28
-rw-r--r--src/input/backend/axisactionhandler_p.h15
-rw-r--r--src/input/backend/inputmanagers_p.h7
-rw-r--r--src/input/frontend/qinputaspect.cpp13
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;
}