diff options
author | Paul Lemire <paul.lemire.ecortex@kdab.com> | 2014-11-12 12:55:42 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2014-11-14 20:29:48 +0100 |
commit | 9d69a1a11c738f740cac57fa493e9ba3a7c4041b (patch) | |
tree | b36933b1d66dcad2ecbbae046077433f32e8f104 | |
parent | a6913e7e688a38603b2ffa912635ff4e7a5e54eb (diff) |
KeyboardController: vector of KeyboardInputs and last requester saved
Contains a vector of QNodeUuid and a vector of HKeyboardInput containing
references to KeyboardInput that are managed by the controller.
Saves the id of the last KeyboardInput requesting focus, this will be the one
to have focus next frame.
Change-Id: I15bca4f445c9bed79cb270ef65fddd73002518f9
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
-rw-r--r-- | src/input/keyboardcontroller.cpp | 23 | ||||
-rw-r--r-- | src/input/keyboardcontroller_p.h | 14 |
2 files changed, 35 insertions, 2 deletions
diff --git a/src/input/keyboardcontroller.cpp b/src/input/keyboardcontroller.cpp index a4ead52bc..c629ce290 100644 --- a/src/input/keyboardcontroller.cpp +++ b/src/input/keyboardcontroller.cpp @@ -54,6 +54,7 @@ namespace Input { KeyboardController::KeyboardController() : QBackendNode(QBackendNode::ReadWrite) + , m_inputHandler(Q_NULLPTR) { } @@ -63,10 +64,29 @@ void KeyboardController::updateFromPeer(QNode *) void KeyboardController::requestFocusForInput(const QNodeUuid &inputId) { - Q_UNUSED(inputId); // Saves the last inputId, this will then be used in an Aspect Job to determine which // input will have the focus. This in turn will call KeyboardInput::setFocus which will // decide if sending a notification to the frontend is necessary + m_lastRequester = inputId; +} + +void KeyboardController::setInputHandler(InputHandler *handler) +{ + m_inputHandler = handler; +} + +void KeyboardController::addKeyboardInput(const QNodeUuid &input) +{ + if (!m_keyboardInputs.contains(input)) { + m_keyboardInputs.append(input); + m_keyboardInputHandles.append(m_inputHandler->keyboardInputManager()->lookupHandle(input)); + } +} + +void KeyboardController::removeKeyboardInput(const QNodeUuid &input) +{ + m_keyboardInputs.removeAll(input); + m_keyboardInputHandles.removeAll(m_inputHandler->keyboardInputManager()->lookupHandle(input)); } void KeyboardController::sceneChangeEvent(const QSceneChangePtr &) @@ -81,6 +101,7 @@ KeyboardControllerFunctor::KeyboardControllerFunctor(InputHandler *handler) QBackendNode *KeyboardControllerFunctor::create(QNode *frontend) const { KeyboardController *controller = m_handler->keyboardControllerManager()->getOrCreateResource(frontend->uuid()); + controller->setInputHandler(m_handler); controller->setPeer(frontend); return controller; } diff --git a/src/input/keyboardcontroller_p.h b/src/input/keyboardcontroller_p.h index 513d323f3..15a51ba0d 100644 --- a/src/input/keyboardcontroller_p.h +++ b/src/input/keyboardcontroller_p.h @@ -44,6 +44,7 @@ #include <Qt3DCore/qbackendnode.h> #include <Qt3DCore/qnodeuuid.h> +#include <Qt3DInput/private/handle_types_p.h> QT_BEGIN_NAMESPACE @@ -59,12 +60,23 @@ public: KeyboardController(); void updateFromPeer(QNode *peer) Q_DECL_OVERRIDE; void requestFocusForInput(const QNodeUuid &inputId); + void setInputHandler(InputHandler *handler); + + void addKeyboardInput(const QNodeUuid &input); + void removeKeyboardInput(const QNodeUuid &input); + + inline QNodeUuid lastKeyboardInputRequester() const { return m_lastRequester; } + inline QVector<QNodeUuid> keyboardInputs() const { return m_keyboardInputs; } + inline QVector<HKeyboardInput> keyboardInputsHandles() const { return m_keyboardInputHandles; } protected: void sceneChangeEvent(const QSceneChangePtr &) Q_DECL_OVERRIDE; private: - QList<QNodeUuid> m_keyboardObserver; + InputHandler *m_inputHandler; + QVector<QNodeUuid> m_keyboardInputs; + QVector<HKeyboardInput> m_keyboardInputHandles; + QNodeUuid m_lastRequester; }; class KeyboardControllerFunctor : public QBackendNodeFunctor |