summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire.ecortex@kdab.com>2014-11-12 12:55:42 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-11-14 20:29:48 +0100
commit9d69a1a11c738f740cac57fa493e9ba3a7c4041b (patch)
treeb36933b1d66dcad2ecbbae046077433f32e8f104
parenta6913e7e688a38603b2ffa912635ff4e7a5e54eb (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.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