summaryrefslogtreecommitdiffstats
path: root/src/input/backend/keyboardcontroller.cpp
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-12-03 15:14:44 +0100
committerPaul Lemire <paul.lemire@kdab.com>2015-12-07 11:27:44 +0000
commitf6ff4023e42bec8cfe088f27c17f7d309f0a9003 (patch)
treeab737236ab7444fb3797841515a24b597373ee75 /src/input/backend/keyboardcontroller.cpp
parentcf0fd70854c43f6a2eb80d53cde0451d0c8e545c (diff)
Input: make KeyboardController a physical device
Change-Id: I8b3de65348006fda1156adc9b55744055eef969c Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/input/backend/keyboardcontroller.cpp')
-rw-r--r--src/input/backend/keyboardcontroller.cpp358
1 files changed, 356 insertions, 2 deletions
diff --git a/src/input/backend/keyboardcontroller.cpp b/src/input/backend/keyboardcontroller.cpp
index 359f52ee7..9686f2d15 100644
--- a/src/input/backend/keyboardcontroller.cpp
+++ b/src/input/backend/keyboardcontroller.cpp
@@ -39,21 +39,343 @@
#include "inputmanagers_p.h"
#include <Qt3DCore/qnode.h>
+#include <QKeyEvent>
+
QT_BEGIN_NAMESPACE
namespace Qt3DInput {
namespace Input {
+namespace {
+
+QPair<int, int> getKeyPosition(int key)
+{
+ QPair<int, int> position;
+
+ switch (key) {
+ case Qt::Key_Escape:
+ return QPair<int, int>(0, 0);
+ case Qt::Key_Tab:
+ return QPair<int, int>(0, 1);
+ case Qt::Key_Backtab:
+ return QPair<int, int>(0, 2);
+ case Qt::Key_Backspace:
+ return QPair<int, int>(0, 3);
+ case Qt::Key_Return:
+ return QPair<int, int>(0, 4);
+ case Qt::Key_Enter:
+ return QPair<int, int>(0, 5);
+ case Qt::Key_Insert:
+ return QPair<int, int>(0, 6);
+ case Qt::Key_Delete:
+ return QPair<int, int>(0, 7);
+ case Qt::Key_Pause:
+ return QPair<int, int>(0, 8);
+ case Qt::Key_Print:
+ return QPair<int, int>(0, 9);
+ case Qt::Key_SysReq:
+ return QPair<int, int>(0, 10);
+ case Qt::Key_Clear:
+ return QPair<int, int>(0, 11);
+ case Qt::Key_Home:
+ return QPair<int, int>(0, 12);
+ case Qt::Key_End:
+ return QPair<int, int>(0, 13);
+ case Qt::Key_Left:
+ return QPair<int, int>(0, 14);
+ case Qt::Key_Right:
+ return QPair<int, int>(0, 16);
+ case Qt::Key_Up:
+ return QPair<int, int>(0, 15);
+ case Qt::Key_Down:
+ return QPair<int, int>(0, 17);
+ case Qt::Key_PageUp:
+ return QPair<int, int>(0, 17);
+ case Qt::Key_PageDown:
+ return QPair<int, int>(0, 19);
+ case Qt::Key_Shift:
+ return QPair<int, int>(0, 20);
+ case Qt::Key_Alt:
+ return QPair<int, int>(0, 23);
+ case Qt::Key_Control:
+ return QPair<int, int>(0, 21);
+ case Qt::Key_Meta:
+ return QPair<int, int>(0, 22);
+ case Qt::Key_CapsLock:
+ return QPair<int, int>(0, 24);
+ case Qt::Key_NumLock:
+ return QPair<int, int>(0, 25);
+ case Qt::Key_ScrollLock:
+ return QPair<int, int>(0, 26);
+ case Qt::Key_F1:
+ return QPair<int, int>(0, 27);
+ case Qt::Key_F2:
+ return QPair<int, int>(0, 28);
+ case Qt::Key_F3:
+ return QPair<int, int>(0, 29);
+ case Qt::Key_F4:
+ return QPair<int, int>(0, 30);
+ case Qt::Key_F5:
+ return QPair<int, int>(0, 31);
+ case Qt::Key_F6:
+ return QPair<int, int>(1, 0);
+ case Qt::Key_F7:
+ return QPair<int, int>(1, 1);
+ case Qt::Key_F8:
+ return QPair<int, int>(1, 2);
+ case Qt::Key_F9:
+ return QPair<int, int>(1, 3);
+ case Qt::Key_F10:
+ return QPair<int, int>(1, 4);
+ case Qt::Key_F11:
+ return QPair<int, int>(1, 5);
+ case Qt::Key_F12:
+ return QPair<int, int>(1, 6);
+ case Qt::Key_F13:
+ return QPair<int, int>(1, 7);
+ case Qt::Key_F14:
+ return QPair<int, int>(1, 8);
+ case Qt::Key_F15:
+ return QPair<int, int>(1, 9);
+ case Qt::Key_F16:
+ return QPair<int, int>(1, 10);
+ case Qt::Key_F17:
+ return QPair<int, int>(1, 11);
+ case Qt::Key_F18:
+ return QPair<int, int>(1, 12);
+ case Qt::Key_F19:
+ return QPair<int, int>(1, 13);
+ case Qt::Key_F20:
+ return QPair<int, int>(1, 14);
+ case Qt::Key_F21:
+ return QPair<int, int>(1, 15);
+ case Qt::Key_F22:
+ return QPair<int, int>(1, 16);
+ case Qt::Key_F23:
+ return QPair<int, int>(1, 17);
+ case Qt::Key_F24:
+ return QPair<int, int>(1, 18);
+ case Qt::Key_F25:
+ return QPair<int, int>(1, 19);
+ case Qt::Key_F26:
+ return QPair<int, int>(1, 20);
+ case Qt::Key_F27:
+ return QPair<int, int>(1, 21);
+ case Qt::Key_F28:
+ return QPair<int, int>(1, 22);
+ case Qt::Key_F29:
+ return QPair<int, int>(1, 23);
+ case Qt::Key_F30:
+ return QPair<int, int>(1, 24);
+ case Qt::Key_F31:
+ return QPair<int, int>(1, 25);
+ case Qt::Key_F32:
+ return QPair<int, int>(1, 26);
+ case Qt::Key_F33:
+ return QPair<int, int>(1, 27);
+ case Qt::Key_F34:
+ return QPair<int, int>(1, 28);
+ case Qt::Key_F35:
+ return QPair<int, int>(1, 29);
+ case Qt::Key_Super_L:
+ return QPair<int, int>(1, 30);
+ case Qt::Key_Super_R:
+ return QPair<int, int>(1, 31);
+ case Qt::Key_Menu:
+ return QPair<int, int>(2, 1);
+ case Qt::Key_Help:
+ return QPair<int, int>(2, 4);
+ case Qt::Key_Hyper_L:
+ return QPair<int, int>(2, 2);
+ case Qt::Key_Hyper_R:
+ return QPair<int, int>(2, 3);
+ case Qt::Key_Direction_L:
+ return QPair<int, int>(2, 5);
+ case Qt::Key_Direction_R:
+ return QPair<int, int>(2, 6);
+ case Qt::Key_Space:
+ return QPair<int, int>(2, 7);
+ case Qt::Key_Exclam:
+ return QPair<int, int>(2, 9);
+ case Qt::Key_QuoteDbl:
+ return QPair<int, int>(2, 10);
+ case Qt::Key_NumberSign:
+ return QPair<int, int>(2, 11);
+ case Qt::Key_Dollar:
+ return QPair<int, int>(2, 12);
+ case Qt::Key_Percent:
+ return QPair<int, int>(2, 13);
+ case Qt::Key_Ampersand:
+ return QPair<int, int>(2, 14);
+ case Qt::Key_Apostrophe:
+ return QPair<int, int>(2, 15);
+ case Qt::Key_ParenLeft:
+ return QPair<int, int>(2, 16);
+ case Qt::Key_ParenRight:
+ return QPair<int, int>(2, 17);
+ case Qt::Key_Asterisk:
+ return QPair<int, int>(2, 18);
+ case Qt::Key_Plus:
+ return QPair<int, int>(2, 19);
+ case Qt::Key_Comma:
+ return QPair<int, int>(2, 20);
+ case Qt::Key_Minus:
+ return QPair<int, int>(2, 21);
+ case Qt::Key_Period:
+ return QPair<int, int>(2, 22);
+ case Qt::Key_Slash:
+ return QPair<int, int>(2, 23);
+ case Qt::Key_0:
+ return QPair<int, int>(2, 24);
+ case Qt::Key_1:
+ return QPair<int, int>(2, 25);
+ case Qt::Key_2:
+ return QPair<int, int>(2, 26);
+ case Qt::Key_3:
+ return QPair<int, int>(2, 27);
+ case Qt::Key_4:
+ return QPair<int, int>(2, 28);
+ case Qt::Key_5:
+ return QPair<int, int>(2, 29);
+ case Qt::Key_6:
+ return QPair<int, int>(2, 30);
+ case Qt::Key_7:
+ return QPair<int, int>(2, 31);
+ case Qt::Key_8:
+ return QPair<int, int>(3, 0);
+ case Qt::Key_9:
+ return QPair<int, int>(3, 1);
+ case Qt::Key_Colon:
+ return QPair<int, int>(3, 2);
+ case Qt::Key_Semicolon:
+ return QPair<int, int>(3, 3);
+ case Qt::Key_Less:
+ return QPair<int, int>(3, 4);
+ case Qt::Key_Equal:
+ return QPair<int, int>(3, 5);
+ case Qt::Key_Greater:
+ return QPair<int, int>(3, 6);
+ case Qt::Key_Question:
+ return QPair<int, int>(3, 7);
+ case Qt::Key_At:
+ return QPair<int, int>(3, 8);
+ case Qt::Key_A:
+ return QPair<int, int>(3, 9);
+ case Qt::Key_B:
+ return QPair<int, int>(3, 10);
+ case Qt::Key_C:
+ return QPair<int, int>(3, 11);
+ case Qt::Key_D:
+ return QPair<int, int>(3, 12);
+ case Qt::Key_E:
+ return QPair<int, int>(3, 13);
+ case Qt::Key_F:
+ return QPair<int, int>(3, 14);
+ case Qt::Key_G:
+ return QPair<int, int>(3, 15);
+ case Qt::Key_H:
+ return QPair<int, int>(3, 16);
+ case Qt::Key_I:
+ return QPair<int, int>(3, 17);
+ case Qt::Key_J:
+ return QPair<int, int>(3, 18);
+ case Qt::Key_K:
+ return QPair<int, int>(3, 19);
+ case Qt::Key_L:
+ return QPair<int, int>(3, 20);
+ case Qt::Key_M:
+ return QPair<int, int>(3, 21);
+ case Qt::Key_N:
+ return QPair<int, int>(3, 22);
+ case Qt::Key_O:
+ return QPair<int, int>(3, 23);
+ case Qt::Key_P:
+ return QPair<int, int>(3, 24);
+ case Qt::Key_Q:
+ return QPair<int, int>(3, 25);
+ case Qt::Key_R:
+ return QPair<int, int>(3, 26);
+ case Qt::Key_S:
+ return QPair<int, int>(3, 27);
+ case Qt::Key_T:
+ return QPair<int, int>(3, 28);
+ case Qt::Key_U:
+ return QPair<int, int>(3, 29);
+ case Qt::Key_V:
+ return QPair<int, int>(3, 30);
+ case Qt::Key_W:
+ return QPair<int, int>(3, 31);
+ case Qt::Key_X:
+ return QPair<int, int>(4, 0);
+ case Qt::Key_Y:
+ return QPair<int, int>(4, 1);
+ case Qt::Key_Z:
+ return QPair<int, int>(4, 2);
+ case Qt::Key_BracketLeft:
+ return QPair<int, int>(4, 3);
+ case Qt::Key_Backslash:
+ return QPair<int, int>(4, 4);
+ case Qt::Key_BracketRight:
+ return QPair<int, int>(4, 5);
+ case Qt::Key_AsciiCircum:
+ return QPair<int, int>(4, 6);
+ case Qt::Key_Underscore:
+ return QPair<int, int>(4, 7);
+ case Qt::Key_QuoteLeft:
+ return QPair<int, int>(4, 8);
+ case Qt::Key_BraceLeft:
+ return QPair<int, int>(4, 9);
+ case Qt::Key_Bar:
+ return QPair<int, int>(4, 10);
+ case Qt::Key_BraceRight:
+ return QPair<int, int>(4, 11);
+ case Qt::Key_AsciiTilde:
+ return QPair<int, int>(4, 12);
+ case Qt::Key_plusminus:
+ return QPair<int, int>(4, 13);
+ case Qt::Key_onesuperior:
+ return QPair<int, int>(4, 14);
+ case Qt::Key_multiply:
+ return QPair<int, int>(4, 15);
+ case Qt::Key_division:
+ return QPair<int, int>(4, 16);
+ case Qt::Key_diaeresis:
+ return QPair<int, int>(4, 17);
+ default:
+ return QPair<int, int>(-1, -1);
+ }
+ return position;
+}
+
+} // anonymous
+
+
// TO DO: Send change to frontend when activeInput changes
KeyboardController::KeyboardController()
- : QBackendNode()
+ : QAbstractPhysicalDeviceBackendNode(QBackendNode::ReadOnly)
, m_inputHandler(Q_NULLPTR)
{
+ m_keyStates.keys[0] = 0;
+ m_keyStates.keys[1] = 0;
+ m_keyStates.keys[2] = 0;
+ m_keyStates.keys[3] = 0;
+ m_keyStates.keys[4] = 0;
+}
+
+void KeyboardController::updateFromPeer(Qt3DCore::QNode *peer)
+{
+ QAbstractPhysicalDeviceBackendNode::updateFromPeer(peer);
}
-void KeyboardController::updateFromPeer(Qt3DCore::QNode *)
+void KeyboardController::cleanup()
{
+ QAbstractPhysicalDeviceBackendNode::cleanup();
+ m_keyStates.keys[0] = 0;
+ m_keyStates.keys[1] = 0;
+ m_keyStates.keys[2] = 0;
+ m_keyStates.keys[3] = 0;
+ m_keyStates.keys[4] = 0;
}
void KeyboardController::requestFocusForInput(const Qt3DCore::QNodeId &inputId)
@@ -88,6 +410,38 @@ void KeyboardController::setCurrentFocusItem(const Qt3DCore::QNodeId &input)
m_currentFocusItem = input;
}
+float KeyboardController::axisValue(int axisIdentifier) const
+{
+ Q_UNUSED(axisIdentifier);
+ return 0.0f;
+}
+
+bool KeyboardController::isButtonPressed(int buttonIdentifier) const
+{
+ QPair<int, int> position = getKeyPosition(buttonIdentifier);
+ if (position.first != -1 && position.second != -1)
+ return m_keyStates.keys[position.first] & (1 << position.second);
+ return false;
+}
+
+void KeyboardController::setButtonValue(int key, bool value)
+{
+ QPair<int, int> position = getKeyPosition(key);
+ if (position.first != -1 && position.second != -1) {
+ if (value)
+ m_keyStates.keys[position.first] |= (1 << position.second);
+ else
+ m_keyStates.keys[position.first] &= ~(1 << position.second);
+ }
+}
+
+void KeyboardController::updateKeyEvents(const QList<QKeyEvent> &events)
+{
+ Q_FOREACH (const QKeyEvent &e, events)
+ setButtonValue(e.key(), e.type() == QKeyEvent::KeyPress ? true : false);
+}
+
+
void KeyboardController::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &)
{
}