summaryrefslogtreecommitdiff
path: root/src/yuzu
diff options
context:
space:
mode:
Diffstat (limited to 'src/yuzu')
-rw-r--r--src/yuzu/bootmanager.cpp276
-rw-r--r--src/yuzu/bootmanager.h6
-rw-r--r--src/yuzu/configuration/config.cpp167
3 files changed, 288 insertions, 161 deletions
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index 3c5590a01..61513a5b4 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -392,15 +392,287 @@ void GRenderWindow::closeEvent(QCloseEvent* event) {
QWidget::closeEvent(event);
}
+int GRenderWindow::QtKeyToSwitchKey(Qt::Key qt_key) {
+ switch (qt_key) {
+ case Qt::Key_A:
+ return Settings::NativeKeyboard::A;
+ case Qt::Key_B:
+ return Settings::NativeKeyboard::B;
+ case Qt::Key_C:
+ return Settings::NativeKeyboard::C;
+ case Qt::Key_D:
+ return Settings::NativeKeyboard::D;
+ case Qt::Key_E:
+ return Settings::NativeKeyboard::E;
+ case Qt::Key_F:
+ return Settings::NativeKeyboard::F;
+ case Qt::Key_G:
+ return Settings::NativeKeyboard::G;
+ case Qt::Key_H:
+ return Settings::NativeKeyboard::H;
+ case Qt::Key_I:
+ return Settings::NativeKeyboard::I;
+ case Qt::Key_J:
+ return Settings::NativeKeyboard::J;
+ case Qt::Key_K:
+ return Settings::NativeKeyboard::K;
+ case Qt::Key_L:
+ return Settings::NativeKeyboard::L;
+ case Qt::Key_M:
+ return Settings::NativeKeyboard::M;
+ case Qt::Key_N:
+ return Settings::NativeKeyboard::N;
+ case Qt::Key_O:
+ return Settings::NativeKeyboard::O;
+ case Qt::Key_P:
+ return Settings::NativeKeyboard::P;
+ case Qt::Key_Q:
+ return Settings::NativeKeyboard::Q;
+ case Qt::Key_R:
+ return Settings::NativeKeyboard::R;
+ case Qt::Key_S:
+ return Settings::NativeKeyboard::S;
+ case Qt::Key_T:
+ return Settings::NativeKeyboard::T;
+ case Qt::Key_U:
+ return Settings::NativeKeyboard::U;
+ case Qt::Key_V:
+ return Settings::NativeKeyboard::V;
+ case Qt::Key_W:
+ return Settings::NativeKeyboard::W;
+ case Qt::Key_X:
+ return Settings::NativeKeyboard::X;
+ case Qt::Key_Y:
+ return Settings::NativeKeyboard::Y;
+ case Qt::Key_Z:
+ return Settings::NativeKeyboard::Z;
+ case Qt::Key_1:
+ return Settings::NativeKeyboard::N1;
+ case Qt::Key_2:
+ return Settings::NativeKeyboard::N2;
+ case Qt::Key_3:
+ return Settings::NativeKeyboard::N3;
+ case Qt::Key_4:
+ return Settings::NativeKeyboard::N4;
+ case Qt::Key_5:
+ return Settings::NativeKeyboard::N5;
+ case Qt::Key_6:
+ return Settings::NativeKeyboard::N6;
+ case Qt::Key_7:
+ return Settings::NativeKeyboard::N7;
+ case Qt::Key_8:
+ return Settings::NativeKeyboard::N8;
+ case Qt::Key_9:
+ return Settings::NativeKeyboard::N9;
+ case Qt::Key_0:
+ return Settings::NativeKeyboard::N0;
+ case Qt::Key_Return:
+ return Settings::NativeKeyboard::Return;
+ case Qt::Key_Escape:
+ return Settings::NativeKeyboard::Escape;
+ case Qt::Key_Backspace:
+ return Settings::NativeKeyboard::Backspace;
+ case Qt::Key_Tab:
+ return Settings::NativeKeyboard::Tab;
+ case Qt::Key_Space:
+ return Settings::NativeKeyboard::Space;
+ case Qt::Key_Minus:
+ return Settings::NativeKeyboard::Minus;
+ case Qt::Key_Plus:
+ case Qt::Key_questiondown:
+ return Settings::NativeKeyboard::Plus;
+ case Qt::Key_BracketLeft:
+ case Qt::Key_BraceLeft:
+ return Settings::NativeKeyboard::OpenBracket;
+ case Qt::Key_BracketRight:
+ case Qt::Key_BraceRight:
+ return Settings::NativeKeyboard::CloseBracket;
+ case Qt::Key_Bar:
+ return Settings::NativeKeyboard::Pipe;
+ case Qt::Key_Dead_Tilde:
+ return Settings::NativeKeyboard::Tilde;
+ case Qt::Key_Ntilde:
+ case Qt::Key_Semicolon:
+ return Settings::NativeKeyboard::Semicolon;
+ case Qt::Key_Apostrophe:
+ return Settings::NativeKeyboard::Quote;
+ case Qt::Key_Dead_Grave:
+ return Settings::NativeKeyboard::Backquote;
+ case Qt::Key_Comma:
+ return Settings::NativeKeyboard::Comma;
+ case Qt::Key_Period:
+ return Settings::NativeKeyboard::Period;
+ case Qt::Key_Slash:
+ return Settings::NativeKeyboard::Slash;
+ case Qt::Key_CapsLock:
+ return Settings::NativeKeyboard::CapsLock;
+ case Qt::Key_F1:
+ return Settings::NativeKeyboard::F1;
+ case Qt::Key_F2:
+ return Settings::NativeKeyboard::F2;
+ case Qt::Key_F3:
+ return Settings::NativeKeyboard::F3;
+ case Qt::Key_F4:
+ return Settings::NativeKeyboard::F4;
+ case Qt::Key_F5:
+ return Settings::NativeKeyboard::F5;
+ case Qt::Key_F6:
+ return Settings::NativeKeyboard::F6;
+ case Qt::Key_F7:
+ return Settings::NativeKeyboard::F7;
+ case Qt::Key_F8:
+ return Settings::NativeKeyboard::F8;
+ case Qt::Key_F9:
+ return Settings::NativeKeyboard::F9;
+ case Qt::Key_F10:
+ return Settings::NativeKeyboard::F10;
+ case Qt::Key_F11:
+ return Settings::NativeKeyboard::F11;
+ case Qt::Key_F12:
+ return Settings::NativeKeyboard::F12;
+ case Qt::Key_Print:
+ return Settings::NativeKeyboard::PrintScreen;
+ case Qt::Key_ScrollLock:
+ return Settings::NativeKeyboard::ScrollLock;
+ case Qt::Key_Pause:
+ return Settings::NativeKeyboard::Pause;
+ case Qt::Key_Insert:
+ return Settings::NativeKeyboard::Insert;
+ case Qt::Key_Home:
+ return Settings::NativeKeyboard::Home;
+ case Qt::Key_PageUp:
+ return Settings::NativeKeyboard::PageUp;
+ case Qt::Key_Delete:
+ return Settings::NativeKeyboard::Delete;
+ case Qt::Key_End:
+ return Settings::NativeKeyboard::End;
+ case Qt::Key_PageDown:
+ return Settings::NativeKeyboard::PageDown;
+ case Qt::Key_Right:
+ return Settings::NativeKeyboard::Right;
+ case Qt::Key_Left:
+ return Settings::NativeKeyboard::Left;
+ case Qt::Key_Down:
+ return Settings::NativeKeyboard::Down;
+ case Qt::Key_Up:
+ return Settings::NativeKeyboard::Up;
+ case Qt::Key_NumLock:
+ return Settings::NativeKeyboard::NumLock;
+ // Numpad keys are missing here
+ case Qt::Key_F13:
+ return Settings::NativeKeyboard::F13;
+ case Qt::Key_F14:
+ return Settings::NativeKeyboard::F14;
+ case Qt::Key_F15:
+ return Settings::NativeKeyboard::F15;
+ case Qt::Key_F16:
+ return Settings::NativeKeyboard::F16;
+ case Qt::Key_F17:
+ return Settings::NativeKeyboard::F17;
+ case Qt::Key_F18:
+ return Settings::NativeKeyboard::F18;
+ case Qt::Key_F19:
+ return Settings::NativeKeyboard::F19;
+ case Qt::Key_F20:
+ return Settings::NativeKeyboard::F20;
+ case Qt::Key_F21:
+ return Settings::NativeKeyboard::F21;
+ case Qt::Key_F22:
+ return Settings::NativeKeyboard::F22;
+ case Qt::Key_F23:
+ return Settings::NativeKeyboard::F23;
+ case Qt::Key_F24:
+ return Settings::NativeKeyboard::F24;
+ // case Qt:::
+ // return Settings::NativeKeyboard::KPComma;
+ // case Qt:::
+ // return Settings::NativeKeyboard::Ro;
+ case Qt::Key_Hiragana_Katakana:
+ return Settings::NativeKeyboard::KatakanaHiragana;
+ case Qt::Key_yen:
+ return Settings::NativeKeyboard::Yen;
+ case Qt::Key_Henkan:
+ return Settings::NativeKeyboard::Henkan;
+ case Qt::Key_Muhenkan:
+ return Settings::NativeKeyboard::Muhenkan;
+ // case Qt:::
+ // return Settings::NativeKeyboard::NumPadCommaPc98;
+ case Qt::Key_Hangul:
+ return Settings::NativeKeyboard::HangulEnglish;
+ case Qt::Key_Hangul_Hanja:
+ return Settings::NativeKeyboard::Hanja;
+ case Qt::Key_Katakana:
+ return Settings::NativeKeyboard::KatakanaKey;
+ case Qt::Key_Hiragana:
+ return Settings::NativeKeyboard::HiraganaKey;
+ case Qt::Key_Zenkaku_Hankaku:
+ return Settings::NativeKeyboard::ZenkakuHankaku;
+ // Modifier keys are handled by the modifier property
+ default:
+ return 0;
+ }
+}
+
+int GRenderWindow::QtModifierToSwitchModdifier(quint32 qt_moddifiers) {
+ int moddifier = 0;
+ // The values are obtained through testing, Qt doesn't seem to provide a proper enum
+ if ((qt_moddifiers & 0x1) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::LeftShift;
+ }
+ if ((qt_moddifiers & 0x2) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::LeftControl;
+ }
+ if ((qt_moddifiers & 0x4) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::LeftAlt;
+ }
+ if ((qt_moddifiers & 0x08) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::LeftMeta;
+ }
+ if ((qt_moddifiers & 0x10) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::RightShift;
+ }
+ if ((qt_moddifiers & 0x20) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::RightControl;
+ }
+ if ((qt_moddifiers & 0x40) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::RightAlt;
+ }
+ if ((qt_moddifiers & 0x80) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::RightMeta;
+ }
+ if ((qt_moddifiers & 0x100) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::CapsLock;
+ }
+ if ((qt_moddifiers & 0x200) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::NumLock;
+ }
+ // Verify the last two keys
+ if ((qt_moddifiers & 0x400) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::Katakana;
+ }
+ if ((qt_moddifiers & 0x800) != 0) {
+ moddifier |= 1 << Settings::NativeKeyboard::Hiragana;
+ }
+ return moddifier;
+}
+
void GRenderWindow::keyPressEvent(QKeyEvent* event) {
if (!event->isAutoRepeat()) {
- input_subsystem->GetKeyboard()->PressKey(event->key());
+ const auto moddifier = QtModifierToSwitchModdifier(event->nativeModifiers());
+ // Replace event->key() with event->nativeVirtualKey() since the second one provides raw key
+ // buttons
+ const auto key = QtKeyToSwitchKey(Qt::Key(event->key()));
+ input_subsystem->GetKeyboard()->SetModifiers(moddifier);
+ input_subsystem->GetKeyboard()->PressKey(key);
}
}
void GRenderWindow::keyReleaseEvent(QKeyEvent* event) {
if (!event->isAutoRepeat()) {
- input_subsystem->GetKeyboard()->ReleaseKey(event->key());
+ const auto moddifier = QtModifierToSwitchModdifier(event->nativeModifiers());
+ const auto key = QtKeyToSwitchKey(Qt::Key(event->key()));
+ input_subsystem->GetKeyboard()->SetModifiers(moddifier);
+ input_subsystem->GetKeyboard()->ReleaseKey(key);
}
}
diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h
index 95594f81c..c42d139be 100644
--- a/src/yuzu/bootmanager.h
+++ b/src/yuzu/bootmanager.h
@@ -158,6 +158,12 @@ public:
void resizeEvent(QResizeEvent* event) override;
+ /// Converts a Qt keybard key into NativeKeyboard key
+ static int QtKeyToSwitchKey(Qt::Key qt_keys);
+
+ /// Converts a Qt modifier keys into NativeKeyboard modifier keys
+ static int QtModifierToSwitchModdifier(quint32 qt_moddifiers);
+
void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override;
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 7669fe474..ccf274895 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -65,157 +65,6 @@ const std::array<int, Settings::NativeMouseButton::NumMouseButtons> Config::defa
Qt::Key_BracketLeft, Qt::Key_BracketRight, Qt::Key_Apostrophe, Qt::Key_Minus, Qt::Key_Equal,
};
-const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> Config::default_keyboard_keys = {
- 0,
- 0,
- 0,
- 0,
- Qt::Key_A,
- Qt::Key_B,
- Qt::Key_C,
- Qt::Key_D,
- Qt::Key_E,
- Qt::Key_F,
- Qt::Key_G,
- Qt::Key_H,
- Qt::Key_I,
- Qt::Key_J,
- Qt::Key_K,
- Qt::Key_L,
- Qt::Key_M,
- Qt::Key_N,
- Qt::Key_O,
- Qt::Key_P,
- Qt::Key_Q,
- Qt::Key_R,
- Qt::Key_S,
- Qt::Key_T,
- Qt::Key_U,
- Qt::Key_V,
- Qt::Key_W,
- Qt::Key_X,
- Qt::Key_Y,
- Qt::Key_Z,
- Qt::Key_1,
- Qt::Key_2,
- Qt::Key_3,
- Qt::Key_4,
- Qt::Key_5,
- Qt::Key_6,
- Qt::Key_7,
- Qt::Key_8,
- Qt::Key_9,
- Qt::Key_0,
- Qt::Key_Enter,
- Qt::Key_Escape,
- Qt::Key_Backspace,
- Qt::Key_Tab,
- Qt::Key_Space,
- Qt::Key_Minus,
- Qt::Key_Equal,
- Qt::Key_BracketLeft,
- Qt::Key_BracketRight,
- Qt::Key_Backslash,
- Qt::Key_Dead_Tilde,
- Qt::Key_Semicolon,
- Qt::Key_Apostrophe,
- Qt::Key_Dead_Grave,
- Qt::Key_Comma,
- Qt::Key_Period,
- Qt::Key_Slash,
- Qt::Key_CapsLock,
-
- Qt::Key_F1,
- Qt::Key_F2,
- Qt::Key_F3,
- Qt::Key_F4,
- Qt::Key_F5,
- Qt::Key_F6,
- Qt::Key_F7,
- Qt::Key_F8,
- Qt::Key_F9,
- Qt::Key_F10,
- Qt::Key_F11,
- Qt::Key_F12,
-
- Qt::Key_SysReq,
- Qt::Key_ScrollLock,
- Qt::Key_Pause,
- Qt::Key_Insert,
- Qt::Key_Home,
- Qt::Key_PageUp,
- Qt::Key_Delete,
- Qt::Key_End,
- Qt::Key_PageDown,
- Qt::Key_Right,
- Qt::Key_Left,
- Qt::Key_Down,
- Qt::Key_Up,
-
- Qt::Key_NumLock,
- Qt::Key_Slash,
- Qt::Key_Asterisk,
- Qt::Key_Minus,
- Qt::Key_Plus,
- Qt::Key_Enter,
- Qt::Key_1,
- Qt::Key_2,
- Qt::Key_3,
- Qt::Key_4,
- Qt::Key_5,
- Qt::Key_6,
- Qt::Key_7,
- Qt::Key_8,
- Qt::Key_9,
- Qt::Key_0,
- Qt::Key_Period,
-
- 0,
- 0,
- Qt::Key_PowerOff,
- Qt::Key_Equal,
-
- Qt::Key_F13,
- Qt::Key_F14,
- Qt::Key_F15,
- Qt::Key_F16,
- Qt::Key_F17,
- Qt::Key_F18,
- Qt::Key_F19,
- Qt::Key_F20,
- Qt::Key_F21,
- Qt::Key_F22,
- Qt::Key_F23,
- Qt::Key_F24,
-
- Qt::Key_Open,
- Qt::Key_Help,
- Qt::Key_Menu,
- 0,
- Qt::Key_Stop,
- Qt::Key_AudioRepeat,
- Qt::Key_Undo,
- Qt::Key_Cut,
- Qt::Key_Copy,
- Qt::Key_Paste,
- Qt::Key_Find,
- Qt::Key_VolumeMute,
- Qt::Key_VolumeUp,
- Qt::Key_VolumeDown,
- Qt::Key_CapsLock,
- Qt::Key_NumLock,
- Qt::Key_ScrollLock,
- Qt::Key_Comma,
-
- Qt::Key_ParenLeft,
- Qt::Key_ParenRight,
-};
-
-const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> Config::default_keyboard_mods = {
- Qt::Key_Control, Qt::Key_Shift, Qt::Key_Alt, Qt::Key_ApplicationLeft,
- Qt::Key_Control, Qt::Key_Shift, Qt::Key_AltGr, Qt::Key_ApplicationRight,
-};
-
// This shouldn't have anything except static initializers (no functions). So
// QKeySequence(...).toString() is NOT ALLOWED HERE.
// This must be in alphabetical order according to action name as it must have the same order as
@@ -496,14 +345,14 @@ void Config::ReadDebugValues() {
void Config::ReadKeyboardValues() {
ReadBasicSetting(Settings::values.keyboard_enabled);
- std::transform(default_keyboard_keys.begin(), default_keyboard_keys.end(),
- Settings::values.keyboard_keys.begin(), InputCommon::GenerateKeyboardParam);
- std::transform(default_keyboard_mods.begin(), default_keyboard_mods.end(),
- Settings::values.keyboard_keys.begin() +
- Settings::NativeKeyboard::LeftControlKey,
- InputCommon::GenerateKeyboardParam);
- std::transform(default_keyboard_mods.begin(), default_keyboard_mods.end(),
- Settings::values.keyboard_mods.begin(), InputCommon::GenerateKeyboardParam);
+ for (std::size_t i = 0; i < Settings::values.keyboard_keys.size(); ++i) {
+ Settings::values.keyboard_keys[i] = InputCommon::GenerateKeyboardParam(static_cast<int>(i));
+ }
+
+ for (std::size_t i = 0; i < Settings::values.keyboard_mods.size(); ++i) {
+ Settings::values.keyboard_mods[i] =
+ InputCommon::GenerateModdifierKeyboardParam(static_cast<int>(i));
+ }
}
void Config::ReadMouseValues() {