summaryrefslogtreecommitdiffstats
path: root/src/input
diff options
context:
space:
mode:
Diffstat (limited to 'src/input')
-rw-r--r--src/input/keyboardcontroller.cpp23
-rw-r--r--src/input/keyboardcontroller_p.h14
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