diff options
Diffstat (limited to 'src/input')
-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 |