summaryrefslogtreecommitdiffstats
path: root/src/input
diff options
context:
space:
mode:
authorMike Krus <mike.krus@kdab.com>2019-09-27 19:27:50 +0100
committerMike Krus <mike.krus@kdab.com>2019-10-01 07:04:08 +0100
commitbf34cec2c4e184c7b5dad23435bec45983b6b796 (patch)
tree40a955e2e25cce89107e713bde58bc19d1eb767b /src/input
parente532a1cf37855f79a0a662d9b07786337e5fd220 (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.cpp42
-rw-r--r--src/input/backend/keyboardhandler_p.h8
-rw-r--r--src/input/frontend/qinputaspect.cpp2
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())));