diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-27 16:28:34 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-09-30 17:08:17 +0100 |
commit | 621c19719e51d0b4c94a51f802f8a2128e201b85 (patch) | |
tree | 1ebfff488c851245aa04d426b719b15cd23aa386 /src/input | |
parent | 5c16cd7be2ba8bd6d98ee18305dd7d69a9f873ca (diff) |
Update QAxis to use direct sync
Change-Id: Id159885d3c3ef4f2582a7b308350c6b43182f521
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/input')
-rw-r--r-- | src/input/backend/axis.cpp | 41 | ||||
-rw-r--r-- | src/input/backend/axis_p.h | 8 | ||||
-rw-r--r-- | src/input/frontend/qaxis.cpp | 13 | ||||
-rw-r--r-- | src/input/frontend/qinputaspect.cpp | 2 |
4 files changed, 17 insertions, 47 deletions
diff --git a/src/input/backend/axis.cpp b/src/input/backend/axis.cpp index 6ba4e2b34..20c05a49f 100644 --- a/src/input/backend/axis.cpp +++ b/src/input/backend/axis.cpp @@ -42,10 +42,9 @@ #include <Qt3DInput/qaxis.h> #include <Qt3DInput/qabstractaxisinput.h> #include <Qt3DCore/qpropertyupdatedchange.h> -#include <Qt3DCore/qpropertynodeaddedchange.h> -#include <Qt3DCore/qpropertynoderemovedchange.h> #include <Qt3DInput/private/qaxis_p.h> +#include <algorithm> QT_BEGIN_NAMESPACE @@ -54,18 +53,11 @@ namespace Qt3DInput { namespace Input { Axis::Axis() - : Qt3DCore::QBackendNode(ReadWrite) + : BackendNode(ReadWrite) , m_axisValue(0.0f) { } -void Axis::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) -{ - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QAxisData>>(change); - const auto &data = typedChange->data; - m_inputs = data.inputIds; -} - void Axis::cleanup() { QBackendNode::setEnabled(false); @@ -75,11 +67,11 @@ void Axis::cleanup() void Axis::setAxisValue(float axisValue) { - if (isEnabled() && (axisValue != m_axisValue)) { + if (isEnabled() && (!qFuzzyCompare(axisValue, m_axisValue))) { m_axisValue = axisValue; // Send a change to the frontend - auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); + auto e = Qt3DCore::QPropertyUpdatedChangePtr::create(peerId()); // TODOSYNC replace with direct access e->setDeliveryFlags(Qt3DCore::QSceneChange::DeliverToAll); e->setPropertyName("value"); e->setValue(m_axisValue); @@ -87,26 +79,15 @@ void Axis::setAxisValue(float axisValue) } } -void Axis::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) +void Axis::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::QAxis *node = qobject_cast<const Qt3DInput::QAxis *>(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; } } // namespace Input diff --git a/src/input/backend/axis_p.h b/src/input/backend/axis_p.h index b83405060..da4ec9ac6 100644 --- a/src/input/backend/axis_p.h +++ b/src/input/backend/axis_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 Axis : public Qt3DCore::QBackendNode +class Q_AUTOTEST_EXPORT Axis : public BackendNode { public: Axis(); @@ -68,11 +68,9 @@ public: inline QVector<Qt3DCore::QNodeId> inputs() const { return m_inputs; } inline float axisValue() const { return m_axisValue; } void setAxisValue(float axisValue); - 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; float m_axisValue; }; diff --git a/src/input/frontend/qaxis.cpp b/src/input/frontend/qaxis.cpp index 1830c8005..082ad4f67 100644 --- a/src/input/frontend/qaxis.cpp +++ b/src/input/frontend/qaxis.cpp @@ -117,12 +117,7 @@ void QAxis::addInput(QAbstractAxisInput *input) // Ensures proper bookkeeping d->registerDestructionHelper(input, &QAxis::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(); } } @@ -144,11 +139,7 @@ void QAxis::removeInput(QAbstractAxisInput *input) Q_D(QAxis); 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 e91e545bb..c063f2580 100644 --- a/src/input/frontend/qinputaspect.cpp +++ b/src/input/frontend/qinputaspect.cpp @@ -149,7 +149,7 @@ QInputAspect::QInputAspect(QInputAspectPrivate &dd, QObject *parent) registerBackendType<QKeyboardHandler>(QBackendNodeMapperPtr(new Input::KeyboardHandlerFunctor(d_func()->m_inputHandler.data()))); registerBackendType<QMouseDevice>(QBackendNodeMapperPtr(new Input::MouseDeviceFunctor(this, d_func()->m_inputHandler.data()))); registerBackendType<QMouseHandler>(QBackendNodeMapperPtr(new Input::MouseHandlerFunctor(d_func()->m_inputHandler.data()))); - registerBackendType<QAxis>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::Axis, Input::AxisManager>(d_func()->m_inputHandler->axisManager()))); + registerBackendType<QAxis, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::Axis, Input::AxisManager>(d_func()->m_inputHandler->axisManager()))); registerBackendType<QAxisAccumulator>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::AxisAccumulator, Input::AxisAccumulatorManager>(d_func()->m_inputHandler->axisAccumulatorManager()))); 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()))); |