summaryrefslogtreecommitdiffstats
path: root/src/input
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-09-27 16:45:01 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-01 07:03:37 +0100
commitdc53660a03d8fd78a565428a351a23752d763036 (patch)
tree90ee757cfa759f7c98265198eeed8dc27173ffd5 /src/input
parent621c19719e51d0b4c94a51f802f8a2128e201b85 (diff)
Update QAction to use direct syncing
Change-Id: I097be63cf17bfa322a87900fd8d45bb59bc344a8 Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/input')
-rw-r--r--src/input/backend/action.cpp34
-rw-r--r--src/input/backend/action_p.h8
-rw-r--r--src/input/frontend/qaction.cpp12
-rw-r--r--src/input/frontend/qinputaspect.cpp2
4 files changed, 14 insertions, 42 deletions
diff --git a/src/input/backend/action.cpp b/src/input/backend/action.cpp
index 601961dd9..a67408222 100644
--- a/src/input/backend/action.cpp
+++ b/src/input/backend/action.cpp
@@ -54,18 +54,11 @@ namespace Qt3DInput {
namespace Input {
Action::Action()
- : Qt3DCore::QBackendNode(ReadWrite)
+ : BackendNode(ReadWrite)
, m_actionTriggered(false)
{
}
-void Action::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change)
-{
- const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QActionData>>(change);
- const auto &data = typedChange->data;
- m_inputs = data.inputIds;
-}
-
void Action::cleanup()
{
QBackendNode::setEnabled(false);
@@ -87,26 +80,15 @@ void Action::setActionTriggered(bool actionTriggered)
}
}
-void Action::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e)
+void Action::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime)
{
- switch (e->type()) {
- case Qt3DCore::PropertyValueAdded: {
- const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeAddedChange>(e);
- if (change->propertyName() == QByteArrayLiteral("input"))
- m_inputs.push_back(change->addedNodeId());
- break;
- }
+ BackendNode::syncFromFrontEnd(frontEnd, firstTime);
+ const Qt3DInput::QAction *node = qobject_cast<const Qt3DInput::QAction *>(frontEnd);
+ if (!node)
+ return;
- case Qt3DCore::PropertyValueRemoved: {
- const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeRemovedChange>(e);
- if (change->propertyName() == QByteArrayLiteral("input"))
- m_inputs.removeOne(change->removedNodeId());
- }
-
- default:
- break;
- }
- QBackendNode::sceneChangeEvent(e);
+ auto ids = Qt3DCore::qIdsForNodes(node->inputs());
+ m_inputs = ids;
}
} // Input
diff --git a/src/input/backend/action_p.h b/src/input/backend/action_p.h
index 8fe2759fd..7036f04b9 100644
--- a/src/input/backend/action_p.h
+++ b/src/input/backend/action_p.h
@@ -51,7 +51,7 @@
// We mean it.
//
-#include <Qt3DCore/qbackendnode.h>
+#include <Qt3DInput/private/backendnode_p.h>
#include <Qt3DCore/qnodeid.h>
QT_BEGIN_NAMESPACE
@@ -60,7 +60,7 @@ namespace Qt3DInput {
namespace Input {
-class Q_AUTOTEST_EXPORT Action : public Qt3DCore::QBackendNode
+class Q_AUTOTEST_EXPORT Action : public BackendNode
{
public:
Action();
@@ -68,11 +68,9 @@ public:
inline QVector<Qt3DCore::QNodeId> inputs() const { return m_inputs; }
inline bool actionTriggered() const { return m_actionTriggered; }
void setActionTriggered(bool actionTriggered);
- void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override;
+ void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override;
private:
- void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final;
-
QVector<Qt3DCore::QNodeId> m_inputs;
bool m_actionTriggered;
};
diff --git a/src/input/frontend/qaction.cpp b/src/input/frontend/qaction.cpp
index 1006c0cec..6eeaa6676 100644
--- a/src/input/frontend/qaction.cpp
+++ b/src/input/frontend/qaction.cpp
@@ -121,11 +121,7 @@ void QAction::addInput(QAbstractActionInput *input)
// Ensures proper bookkeeping
d->registerDestructionHelper(input, &QAction::removeInput, d->m_inputs);
- if (d->m_changeArbiter != nullptr) {
- const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(id(), input);
- change->setPropertyName("input");
- d->notifyObservers(change);
- }
+ d->update();
}
}
@@ -137,11 +133,7 @@ void QAction::removeInput(QAbstractActionInput *input)
Q_D(QAction);
if (d->m_inputs.contains(input)) {
- if (d->m_changeArbiter != nullptr) {
- const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(id(), input);
- change->setPropertyName("input");
- d->notifyObservers(change);
- }
+ d->update();
d->m_inputs.removeOne(input);
diff --git a/src/input/frontend/qinputaspect.cpp b/src/input/frontend/qinputaspect.cpp
index c063f2580..63bfdff0a 100644
--- a/src/input/frontend/qinputaspect.cpp
+++ b/src/input/frontend/qinputaspect.cpp
@@ -154,7 +154,7 @@ QInputAspect::QInputAspect(QInputAspectPrivate &dd, QObject *parent)
registerBackendType<QAnalogAxisInput>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::AnalogAxisInput, Input::AnalogAxisInputManager>(d_func()->m_inputHandler->analogAxisInputManager())));
registerBackendType<QButtonAxisInput>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::ButtonAxisInput, Input::ButtonAxisInputManager>(d_func()->m_inputHandler->buttonAxisInputManager())));
registerBackendType<QAxisSetting>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::AxisSetting, Input::AxisSettingManager>(d_func()->m_inputHandler->axisSettingManager())));
- registerBackendType<Qt3DInput::QAction>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::Action, Input::ActionManager>(d_func()->m_inputHandler->actionManager())));
+ registerBackendType<Qt3DInput::QAction, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::Action, Input::ActionManager>(d_func()->m_inputHandler->actionManager())));
registerBackendType<QActionInput>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::ActionInput, Input::ActionInputManager>(d_func()->m_inputHandler->actionInputManager())));
registerBackendType<QInputChord>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::InputChord, Input::InputChordManager>(d_func()->m_inputHandler->inputChordManager())));
registerBackendType<QInputSequence>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::InputSequence, Input::InputSequenceManager>(d_func()->m_inputHandler->inputSequenceManager())));