diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-27 16:45:01 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-01 07:03:37 +0100 |
commit | dc53660a03d8fd78a565428a351a23752d763036 (patch) | |
tree | 90ee757cfa759f7c98265198eeed8dc27173ffd5 | |
parent | 621c19719e51d0b4c94a51f802f8a2128e201b85 (diff) |
Update QAction to use direct syncing
Change-Id: I097be63cf17bfa322a87900fd8d45bb59bc344a8
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
-rw-r--r-- | src/input/backend/action.cpp | 34 | ||||
-rw-r--r-- | src/input/backend/action_p.h | 8 | ||||
-rw-r--r-- | src/input/frontend/qaction.cpp | 12 | ||||
-rw-r--r-- | src/input/frontend/qinputaspect.cpp | 2 | ||||
-rw-r--r-- | tests/auto/input/action/tst_action.cpp | 25 | ||||
-rw-r--r-- | tests/auto/input/qaction/tst_qaction.cpp | 18 |
6 files changed, 32 insertions, 67 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()))); diff --git a/tests/auto/input/action/tst_action.cpp b/tests/auto/input/action/tst_action.cpp index 7ef9bca1e..8a6cb902f 100644 --- a/tests/auto/input/action/tst_action.cpp +++ b/tests/auto/input/action/tst_action.cpp @@ -64,7 +64,7 @@ private Q_SLOTS: action.addInput(&actionInput); // WHEN - simulateInitialization(&action, &backendAction); + simulateInitializationSync(&action, &backendAction); // THEN QCOMPARE(backendAction.peerId(), action.id()); @@ -96,7 +96,7 @@ private Q_SLOTS: action.addInput(&axisInput); // WHEN - simulateInitialization(&action, &backendAction); + simulateInitializationSync(&action, &backendAction); backendAction.setActionTriggered(true); backendAction.cleanup(); @@ -109,33 +109,30 @@ private Q_SLOTS: void checkPropertyChanges() { // GIVEN + Qt3DInput::QAction action; Qt3DInput::Input::Action backendAction; - Qt3DCore::QPropertyUpdatedChangePtr updateChange; + simulateInitializationSync(&action, &backendAction); // WHEN - updateChange = QSharedPointer<Qt3DCore::QPropertyUpdatedChange>::create(Qt3DCore::QNodeId()); - updateChange->setPropertyName("enabled"); - updateChange->setValue(true); - backendAction.sceneChangeEvent(updateChange); + action.setEnabled(false); + backendAction.syncFromFrontEnd(&action, false); // THEN - QCOMPARE(backendAction.isEnabled(), true); + QCOMPARE(backendAction.isEnabled(), false); // WHEN DummyActionInput input; const Qt3DCore::QNodeId inputId = input.id(); - const auto nodeAddedChange = Qt3DCore::QPropertyNodeAddedChangePtr::create(Qt3DCore::QNodeId(), &input); - nodeAddedChange->setPropertyName("input"); - backendAction.sceneChangeEvent(nodeAddedChange); + action.addInput(&input); + backendAction.syncFromFrontEnd(&action, false); // THEN QCOMPARE(backendAction.inputs().size(), 1); QCOMPARE(backendAction.inputs().first(), inputId); // WHEN - const auto nodeRemovedChange = Qt3DCore::QPropertyNodeRemovedChangePtr::create(Qt3DCore::QNodeId(), &input); - nodeRemovedChange->setPropertyName("input"); - backendAction.sceneChangeEvent(nodeRemovedChange); + action.removeInput(&input); + backendAction.syncFromFrontEnd(&action, false); // THEN QCOMPARE(backendAction.inputs().size(), 0); diff --git a/tests/auto/input/qaction/tst_qaction.cpp b/tests/auto/input/qaction/tst_qaction.cpp index 4becee318..e3e3297ab 100644 --- a/tests/auto/input/qaction/tst_qaction.cpp +++ b/tests/auto/input/qaction/tst_qaction.cpp @@ -116,24 +116,20 @@ private Q_SLOTS: QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - Qt3DCore::QPropertyNodeAddedChangePtr change = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeAddedChange>(); - QCOMPARE(change->propertyName(), "input"); - QCOMPARE(change->addedNodeId(), input->id()); - QCOMPARE(change->type(), Qt3DCore::PropertyValueAdded); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), action.data()); - arbiter.events.clear(); + arbiter.dirtyNodes.clear(); // WHEN action->removeInput(input); QCoreApplication::processEvents(); // THEN - QCOMPARE(arbiter.events.size(), 1); - Qt3DCore::QPropertyNodeRemovedChangePtr nodeRemovedChange = arbiter.events.first().staticCast<Qt3DCore::QPropertyNodeRemovedChange>(); - QCOMPARE(nodeRemovedChange->propertyName(), "input"); - QCOMPARE(nodeRemovedChange->removedNodeId(), input->id()); - QCOMPARE(nodeRemovedChange->type(), Qt3DCore::PropertyValueRemoved); + QCOMPARE(arbiter.events.size(), 0); + QCOMPARE(arbiter.dirtyNodes.size(), 1); + QCOMPARE(arbiter.dirtyNodes.front(), action.data()); arbiter.events.clear(); } |