summaryrefslogtreecommitdiffstats
path: root/src/input
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-09-30 10:54:50 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-01 09:17:48 +0100
commit812bc78ce4b88f612b0d4880723547fe09181f93 (patch)
treebec2b1c473d08841c1272bfcce027f799dac7dd2 /src/input
parent5bc3eec77b7052626bac91efd05026c92b0108b5 (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.cpp2
-rw-r--r--src/input/backend/abstractactioninput_p.h4
-rw-r--r--src/input/backend/actioninput.cpp30
-rw-r--r--src/input/backend/actioninput_p.h4
-rw-r--r--src/input/backend/inputchord.cpp47
-rw-r--r--src/input/backend/inputchord_p.h4
-rw-r--r--src/input/backend/inputsequence.cpp54
-rw-r--r--src/input/backend/inputsequence_p.h4
-rw-r--r--src/input/frontend/qinputaspect.cpp6
-rw-r--r--src/input/frontend/qinputchord.cpp16
-rw-r--r--src/input/frontend/qinputsequence.cpp15
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);