diff options
author | Mike Krus <mike.krus@kdab.com> | 2019-09-27 19:27:50 +0100 |
---|---|---|
committer | Mike Krus <mike.krus@kdab.com> | 2019-10-01 07:04:08 +0100 |
commit | bf34cec2c4e184c7b5dad23435bec45983b6b796 (patch) | |
tree | 40a955e2e25cce89107e713bde58bc19d1eb767b /src/input | |
parent | e532a1cf37855f79a0a662d9b07786337e5fd220 (diff) |
Update QKeyboardHandler to use direct sync
Change-Id: I08fdf7d4beccc512f84e70449ed706eab6df7d0b
Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src/input')
-rw-r--r-- | src/input/backend/keyboardhandler.cpp | 42 | ||||
-rw-r--r-- | src/input/backend/keyboardhandler_p.h | 8 | ||||
-rw-r--r-- | src/input/frontend/qinputaspect.cpp | 2 |
3 files changed, 22 insertions, 30 deletions
diff --git a/src/input/backend/keyboardhandler.cpp b/src/input/backend/keyboardhandler.cpp index ae1e6d03c..e96fbb9d2 100644 --- a/src/input/backend/keyboardhandler.cpp +++ b/src/input/backend/keyboardhandler.cpp @@ -56,22 +56,12 @@ namespace Qt3DInput { namespace Input { KeyboardHandler::KeyboardHandler() - : QBackendNode(QBackendNode::ReadWrite) + : BackendNode(QBackendNode::ReadWrite) , m_inputHandler(nullptr) , m_focus(false) { } -void KeyboardHandler::initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) -{ - const auto typedChange = qSharedPointerCast<Qt3DCore::QNodeCreatedChange<QKeyboardHandlerData>>(change); - const auto &data = typedChange->data; - setSourcerDevice(data.keyboardDeviceId); - m_focus = false; - if (data.focus) - requestFocus(); -} - Qt3DCore::QNodeId KeyboardHandler::keyboardDevice() const { return m_keyboardDevice; @@ -105,24 +95,28 @@ void KeyboardHandler::keyEvent(const QKeyEventPtr &event) notifyObservers(e); } -void KeyboardHandler::sceneChangeEvent(const QSceneChangePtr &e) +void KeyboardHandler::syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) { + BackendNode::syncFromFrontEnd(frontEnd, firstTime); + const Qt3DInput::QKeyboardHandler *node = qobject_cast<const Qt3DInput::QKeyboardHandler *>(frontEnd); + if (!node) + return; + + if (firstTime) + m_focus = false; + bool focusRequest = false; - if (e->type() == PropertyUpdated) { - QPropertyUpdatedChangePtr propertyChange = qSharedPointerCast<QPropertyUpdatedChange>(e); - if (propertyChange->propertyName() == QByteArrayLiteral("sourceDevice")) { - const QNodeId newId = propertyChange->value().value<QNodeId>(); - if (m_keyboardDevice != newId) { - setSourcerDevice(newId); - focusRequest = m_focus; - } - } else if (propertyChange->propertyName() == QByteArrayLiteral("focus")) { - focusRequest = propertyChange->value().toBool(); - } + auto id = Qt3DCore::qIdForNode(node->sourceDevice()); + if (m_keyboardDevice != id) { + setSourcerDevice(id); + focusRequest = m_focus; } + + if (m_focus != node->focus()) + focusRequest = node->focus(); + if (focusRequest) requestFocus(); - QBackendNode::sceneChangeEvent(e); } void KeyboardHandler::requestFocus() diff --git a/src/input/backend/keyboardhandler_p.h b/src/input/backend/keyboardhandler_p.h index 317c33792..903b4d511 100644 --- a/src/input/backend/keyboardhandler_p.h +++ b/src/input/backend/keyboardhandler_p.h @@ -52,7 +52,7 @@ // #include <Qt3DInput/qkeyevent.h> -#include <Qt3DCore/qbackendnode.h> +#include <Qt3DInput/private/backendnode_p.h> #include <Qt3DCore/qnodeid.h> QT_BEGIN_NAMESPACE @@ -63,7 +63,7 @@ namespace Input { class InputHandler; -class Q_AUTOTEST_EXPORT KeyboardHandler : public Qt3DCore::QBackendNode +class Q_AUTOTEST_EXPORT KeyboardHandler : public BackendNode { public: KeyboardHandler(); @@ -75,15 +75,13 @@ public: inline bool focus() const { return m_focus; } - void sceneChangeEvent(const Qt3DCore::QSceneChangePtr &e) override; + void syncFromFrontEnd(const Qt3DCore::QNode *frontEnd, bool firstTime) override; protected: void requestFocus(); void setSourcerDevice(Qt3DCore::QNodeId device); private: - void initializeFromPeer(const Qt3DCore::QNodeCreatedChangeBasePtr &change) final; - InputHandler *m_inputHandler; Qt3DCore::QNodeId m_keyboardDevice; bool m_focus; diff --git a/src/input/frontend/qinputaspect.cpp b/src/input/frontend/qinputaspect.cpp index 05e860a4b..fffde2851 100644 --- a/src/input/frontend/qinputaspect.cpp +++ b/src/input/frontend/qinputaspect.cpp @@ -146,7 +146,7 @@ QInputAspect::QInputAspect(QInputAspectPrivate &dd, QObject *parent) qRegisterMetaType<Qt3DInput::QAbstractPhysicalDevice*>(); registerBackendType<QKeyboardDevice, true>(QBackendNodeMapperPtr(new Input::KeyboardDeviceFunctor(this, d_func()->m_inputHandler.data()))); - registerBackendType<QKeyboardHandler>(QBackendNodeMapperPtr(new Input::KeyboardHandlerFunctor(d_func()->m_inputHandler.data()))); + registerBackendType<QKeyboardHandler, true>(QBackendNodeMapperPtr(new Input::KeyboardHandlerFunctor(d_func()->m_inputHandler.data()))); registerBackendType<QMouseDevice, true>(QBackendNodeMapperPtr(new Input::MouseDeviceFunctor(this, d_func()->m_inputHandler.data()))); registerBackendType<QMouseHandler>(QBackendNodeMapperPtr(new Input::MouseHandlerFunctor(d_func()->m_inputHandler.data()))); registerBackendType<QAxis, true>(QBackendNodeMapperPtr(new Input::InputNodeFunctor<Input::Axis, Input::AxisManager>(d_func()->m_inputHandler->axisManager()))); |