|
|
|
@ -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); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|