diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-30 10:54:50 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-01 09:17:48 +0100 |
commit | 812bc78ce4b88f612b0d4880723547fe09181f93 (patch) | |
tree | bec2b1c473d08841c1272bfcce027f799dac7dd2 /src/input | |
parent | 5bc3eec77b7052626bac91efd05026c92b0108b5 (diff) |
Update input action classes to use direct sync
Change-Id: I6126a9b51e5d681ad312bf1df5ca694c6d712294
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/input')
-rw-r--r-- | src/input/backend/abstractactioninput.cpp | 2 | ||||
-rw-r--r-- | src/input/backend/abstractactioninput_p.h | 4 | ||||
-rw-r--r-- | src/input/backend/actioninput.cpp | 30 | ||||
-rw-r--r-- | src/input/backend/actioninput_p.h | 4 | ||||
-rw-r--r-- | src/input/backend/inputchord.cpp | 47 | ||||
-rw-r--r-- | src/input/backend/inputchord_p.h | 4 | ||||
-rw-r--r-- | src/input/backend/inputsequence.cpp | 54 | ||||
-rw-r--r-- | src/input/backend/inputsequence_p.h | 4 | ||||
-rw-r--r-- | src/input/frontend/qinputaspect.cpp | 6 | ||||
-rw-r--r-- | src/input/frontend/qinputchord.cpp | 16 | ||||
-rw-r--r-- | src/input/frontend/qinputsequence.cpp | 15 |
11 files changed, 41 insertions, 145 deletions
diff --git a/src/input/backend/abstractactioninput.cpp b/src/input/backend/abstractactioninput.cpp index 1d4366554..ec469204e 100644 --- a/src/input/backend/abstractactioninput.cpp +++ b/src/input/backend/abstractactioninput.cpp @@ -46,7 +46,7 @@ namespace Qt3DInput { namespace Input { AbstractActionInput::AbstractActionInput() - : Qt3DCore::QBackendNode() + : BackendNode() { } diff --git a/src/input/backend/abstractactioninput_p.h b/src/input/backend/abstractactioninput_p.h index 267d276c7..e200990e7 100644 --- a/src/input/backend/abstractactioninput_p.h +++ b/src/input/backend/abstractactioninput_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 @@ -62,7 +62,7 @@ namespace Input { class InputHandler; -class Q_AUTOTEST_EXPORT AbstractActionInput : public Qt3DCore::QBackendNode +class Q_AUTOTEST_EXPORT AbstractActionInput : public BackendNode { public: AbstractActionInput(); diff --git a/src/input/backend/actioninput.cpp b/src/input/backend/actioninput.cpp index 46dc7f584..b02da0a4d 100644 --- a/src/input/backend/actioninput.cpp +++ b/src/input/backend/actioninput.cpp @@ -40,8 +40,7 @@ #include "actioninput_p.h" #include <Qt3DInput/qactioninput.h> -#include <Qt3DCore/qpropertyupdatedchange.h> - +#include <Qt3DInput/qabstractphysicaldevice.h> #include <Qt3DInput/private/qactioninput_p.h> #include <Qt3DInput/private/inputhandler_p.h> #include <Qt3DInput/private/utils_p.h> @@ -58,14 +57,6 @@ ActionInput::ActionInput() { } -void ActionInput::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) -{ - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QActionInputData>>(change); - const auto &data = typedChange->data; - m_buttons = data.buttons; - m_sourceDevice = data.sourceDeviceId; -} - void ActionInput::cleanup() { setEnabled(false); @@ -73,21 +64,20 @@ void ActionInput::cleanup() m_buttons.clear(); } -void ActionInput::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void ActionInput::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - if (e->type() == Qt3DCore::PropertyUpdated) { - Qt3DCore::QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); - if (propertyChange->propertyName() == QByteArrayLiteral("sourceDevice")) - m_sourceDevice = propertyChange->value().value<Qt3DCore::QNodeId>(); - else if (propertyChange->propertyName() == QByteArrayLiteral("buttons")) - m_buttons = propertyChange->value().value<QVector<int>>(); - } - AbstractActionInput::sceneChangeEvent(e); + AbstractActionInput::syncFromFrontEnd(frontEnd, firstTime); + const QActionInput *node = qobject_cast<const QActionInput *>(frontEnd); + if (!node) + return; + + m_sourceDevice = Qt3DCore::qIdForNode(node->sourceDevice()); + m_buttons = node->buttons(); } bool ActionInput::process(InputHandler *inputHandler, qint64 currentTime) { - Q_UNUSED(currentTime); + Q_UNUSED(currentTime) if (!isEnabled()) return false; diff --git a/src/input/backend/actioninput_p.h b/src/input/backend/actioninput_p.h index 00fb0475c..eecf1d10e 100644 --- a/src/input/backend/actioninput_p.h +++ b/src/input/backend/actioninput_p.h @@ -69,13 +69,11 @@ public: inline QVector<int> buttons() const { return m_buttons; } inline Qt3DCore::QNodeId sourceDevice() const { return m_sourceDevice; } - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; bool process(InputHandler *inputHandler, qint64 currentTime) override; private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - QVector<int> m_buttons; Qt3DCore::QNodeId m_sourceDevice; }; diff --git a/src/input/backend/inputchord.cpp b/src/input/backend/inputchord.cpp index 731fd91e3..5716e3344 100644 --- a/src/input/backend/inputchord.cpp +++ b/src/input/backend/inputchord.cpp @@ -62,15 +62,6 @@ InputChord::InputChord() { } -void InputChord::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) -{ - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QInputChordData>>(change); - const QInputChordData &data = typedChange->data; - m_chords = data.chordIds; - m_timeout = milliToNano(data.timeout); - m_inputsToTrigger = m_chords; -} - void InputChord::cleanup() { setEnabled(false); @@ -102,38 +93,16 @@ void InputChord::setStartTime(qint64 time) m_startTime = time; } -void InputChord::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void InputChord::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - switch (e->type()) { - case Qt3DCore::PropertyUpdated: { - const auto change = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); - if (change->propertyName() == QByteArrayLiteral("timeout")) - m_timeout = milliToNano(change->value().toInt()); - break; - } + AbstractActionInput::syncFromFrontEnd(frontEnd, firstTime); + const QInputChord *node = qobject_cast<const QInputChord *>(frontEnd); + if (!node) + return; - case Qt3DCore::PropertyValueAdded: { - const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("chord")) { - m_chords.push_back(change->addedNodeId()); - m_inputsToTrigger.push_back(change->addedNodeId()); - } - break; - } - - case Qt3DCore::PropertyValueRemoved: { - const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeRemovedChange>(e); - if (change->propertyName() == QByteArrayLiteral("chord")) { - m_chords.removeOne(change->removedNodeId()); - m_inputsToTrigger.removeOne(change->removedNodeId()); - } - break; - } - - default: - break; - } - AbstractActionInput::sceneChangeEvent(e); + m_timeout = milliToNano(node->timeout()); + m_chords = Qt3DCore::qIdsForNodes(node->chords()); + m_inputsToTrigger = m_chords; } bool InputChord::process(InputHandler *inputHandler, qint64 currentTime) diff --git a/src/input/backend/inputchord_p.h b/src/input/backend/inputchord_p.h index efad2c4af..0a654aa87 100644 --- a/src/input/backend/inputchord_p.h +++ b/src/input/backend/inputchord_p.h @@ -73,13 +73,11 @@ public: void setStartTime(qint64 time); void reset(); bool actionTriggered(Qt3DCore::QNodeId input); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; bool process(InputHandler *inputHandler, qint64 currentTime) override; private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - QVector<Qt3DCore::QNodeId> m_chords; QVector<Qt3DCore::QNodeId> m_inputsToTrigger; qint64 m_timeout; diff --git a/src/input/backend/inputsequence.cpp b/src/input/backend/inputsequence.cpp index e45fae364..c4d5580dd 100644 --- a/src/input/backend/inputsequence.cpp +++ b/src/input/backend/inputsequence.cpp @@ -66,16 +66,6 @@ InputSequence::InputSequence() { } -void InputSequence::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) -{ - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QInputSequenceData>>(change); - const QInputSequenceData &data = typedChange->data; - m_sequences = data.sequenceIds; - m_timeout = milliToNano(data.timeout); - m_buttonInterval = milliToNano(data.buttonInterval); - m_inputsToTrigger = m_sequences; -} - void InputSequence::cleanup() { setEnabled(false); @@ -127,41 +117,17 @@ bool InputSequence::actionTriggered(Qt3DCore::QNodeId input, const qint64 curren return false; } -void InputSequence::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void InputSequence::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { - switch (e->type()) { - case Qt3DCore::PropertyUpdated: { - const auto change = qSharedPointerCast<Qt3DCore::QPropertyUpdatedChange>(e); - if (change->propertyName() == QByteArrayLiteral("timeout")) { - m_timeout = milliToNano(change->value().toInt()); - } else if (change->propertyName() == QByteArrayLiteral("buttonInterval")) { - m_buttonInterval = milliToNano(change->value().toInt()); - } - break; - } - - case Qt3DCore::PropertyValueAdded: { - const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeAddedChange>(e); - if (change->propertyName() == QByteArrayLiteral("sequence")) { - m_sequences.push_back(change->addedNodeId()); - m_inputsToTrigger.push_back(change->addedNodeId()); - } - break; - } - - case Qt3DCore::PropertyValueRemoved: { - const auto change = qSharedPointerCast<Qt3DCore::QPropertyNodeRemovedChange>(e); - if (change->propertyName() == QByteArrayLiteral("sequence")) { - m_sequences.removeOne(change->removedNodeId()); - m_inputsToTrigger.removeOne(change->removedNodeId()); - } - break; - } - - default: - break; - } - AbstractActionInput::sceneChangeEvent(e); + AbstractActionInput::syncFromFrontEnd(frontEnd, firstTime); + const QInputSequence *node = qobject_cast<const QInputSequence *>(frontEnd); + if (!node) + return; + + m_timeout = milliToNano(node->timeout()); + m_buttonInterval = milliToNano(node->buttonInterval()); + m_sequences = Qt3DCore::qIdsForNodes(node->sequences()); + m_inputsToTrigger = m_sequences; } bool InputSequence::process(InputHandler *inputHandler, qint64 currentTime) diff --git a/src/input/backend/inputsequence_p.h b/src/input/backend/inputsequence_p.h index 395021035..53407bd1d 100644 --- a/src/input/backend/inputsequence_p.h +++ b/src/input/backend/inputsequence_p.h @@ -75,13 +75,11 @@ public: bool sequenceTriggered() const; void reset(); bool actionTriggered(Qt3DCore::QNodeId input, const qint64 currentTime); - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; bool process(InputHandler *inputHandler, qint64 currentTime) override; private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - QVector<Qt3DCore::QNodeId> m_sequences; QVector<Qt3DCore::QNodeId> m_inputsToTrigger; qint64 m_timeout; diff --git a/src/input/frontend/qinputaspect.cpp b/src/input/frontend/qinputaspect.cpp index da49e70e6..110d9877f 100644 --- a/src/input/frontend/qinputaspect.cpp +++ b/src/input/frontend/qinputaspect.cpp @@ -155,9 +155,9 @@ QInputAspect::QInputAspect(QInputAspectPrivate &dd, QObject *parent) registerBackendType<QButtonAxisInput, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::ButtonAxisInput, Input::ButtonAxisInputManager>(d_func()->m_inputHandler->buttonAxisInputManager()))); registerBackendType<QAxisSetting, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::AxisSetting, Input::AxisSettingManager>(d_func()->m_inputHandler->axisSettingManager()))); 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()))); + registerBackendType<QActionInput, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::ActionInput, Input::ActionInputManager>(d_func()->m_inputHandler->actionInputManager()))); + registerBackendType<QInputChord, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::InputChord, Input::InputChordManager>(d_func()->m_inputHandler->inputChordManager()))); + registerBackendType<QInputSequence, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::InputSequence, Input::InputSequenceManager>(d_func()->m_inputHandler->inputSequenceManager()))); registerBackendType<QLogicalDevice>(QBackendNodeMapperPtr(new Input::LogicalDeviceNodeFunctor(d_func()->m_inputHandler->logicalDeviceManager()))); registerBackendType<QGenericInputDevice, true>(QBackendNodeMapperPtr(new Input::GenericDeviceBackendFunctor(this, d_func()->m_inputHandler.data()))); registerBackendType<QInputSettings>(QBackendNodeMapperPtr(new Input::InputSettingsFunctor(d_func()->m_inputHandler.data()))); diff --git a/src/input/frontend/qinputchord.cpp b/src/input/frontend/qinputchord.cpp index 7c986f297..a64cc8961 100644 --- a/src/input/frontend/qinputchord.cpp +++ b/src/input/frontend/qinputchord.cpp @@ -41,9 +41,6 @@ #include <Qt3DInput/qabstractphysicaldevice.h> #include <Qt3DCore/qnodecreatedchange.h> -#include <Qt3DCore/qpropertyupdatedchange.h> -#include <Qt3DCore/qpropertynodeaddedchange.h> -#include <Qt3DCore/qpropertynoderemovedchange.h> QT_BEGIN_NAMESPACE @@ -157,11 +154,7 @@ void QInputChord::addChord(QAbstractActionInput *input) if (!input->parent()) input->setParent(this); - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(id(), input); - change->setPropertyName("chord"); - d->notifyObservers(change); - } + d->update(); } } @@ -174,12 +167,7 @@ void QInputChord::removeChord(QAbstractActionInput *input) { Q_D(QInputChord); if (d->m_chords.contains(input)) { - - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(id(), input); - change->setPropertyName("chord"); - d->notifyObservers(change); - } + d->update(); d->m_chords.removeOne(input); diff --git a/src/input/frontend/qinputsequence.cpp b/src/input/frontend/qinputsequence.cpp index 766674840..5e0e36aba 100644 --- a/src/input/frontend/qinputsequence.cpp +++ b/src/input/frontend/qinputsequence.cpp @@ -42,9 +42,6 @@ #include <Qt3DInput/qabstractactioninput.h> #include <Qt3DInput/qabstractphysicaldevice.h> #include <Qt3DCore/qnodecreatedchange.h> -#include <Qt3DCore/qpropertynodeaddedchange.h> -#include <Qt3DCore/qpropertynoderemovedchange.h> -#include <Qt3DCore/qpropertyupdatedchange.h> #include <Qt3DCore/private/qnode_p.h> @@ -210,11 +207,7 @@ void QInputSequence::addSequence(QAbstractActionInput *input) if (!input->parent()) input->setParent(this); - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeAddedChangePtr::create(id(), input); - change->setPropertyName("sequence"); - d->notifyObservers(change); - } + d->update(); } } @@ -227,11 +220,7 @@ void QInputSequence::removeSequence(QAbstractActionInput *input) { Q_D(QInputSequence); if (d->m_sequences.contains(input)) { - if (d->m_changeArbiter != nullptr) { - const auto change = Qt3DCore::QPropertyNodeRemovedChangePtr::create(id(), input); - change->setPropertyName("sequence"); - d->notifyObservers(change); - } + d->update(); d->m_sequences.removeOne(input); |