1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:07:45 +00:00

Ladybird: Simplify awkward keyboard mapping code

This commit is contained in:
Andreas Kling 2022-08-14 18:30:52 +02:00 committed by Andrew Kaster
parent 90c0ae5e63
commit b1acf17d3c

View file

@ -425,332 +425,128 @@ unsigned get_modifiers_from_qt_keyboard_event(QKeyEvent const& event)
KeyCode get_keycode_from_qt_keyboard_event(QKeyEvent const& event) KeyCode get_keycode_from_qt_keyboard_event(QKeyEvent const& event)
{ {
auto key = (KeyCode)event.nativeScanCode(); struct Mapping {
key = Key_Insert; constexpr Mapping(Qt::Key q, KeyCode s)
: qt_key(q)
, serenity_key(s)
{
}
switch (event.key()) { Qt::Key qt_key;
case Qt::Key_Escape: KeyCode serenity_key;
key = Key_Escape; };
break;
case Qt::Key_Tab: constexpr Mapping mappings[] = {
key = Key_Tab; { Qt::Key_0, Key_0 },
break; { Qt::Key_1, Key_1 },
case Qt::Key_Backspace: { Qt::Key_2, Key_2 },
key = Key_Backspace; { Qt::Key_3, Key_3 },
break; { Qt::Key_4, Key_4 },
case Qt::Key_Return: { Qt::Key_5, Key_5 },
key = Key_Return; { Qt::Key_6, Key_6 },
break; { Qt::Key_7, Key_7 },
case Qt::Key_Insert: { Qt::Key_8, Key_8 },
key = Key_Insert; { Qt::Key_9, Key_9 },
break; { Qt::Key_A, Key_A },
case Qt::Key_Delete: { Qt::Key_Alt, Key_Alt },
key = Key_Delete; { Qt::Key_Ampersand, Key_Ampersand },
break; { Qt::Key_Apostrophe, Key_Apostrophe },
case Qt::Key_Print: { Qt::Key_AsciiCircum, Key_Circumflex },
key = Key_PrintScreen; { Qt::Key_AsciiTilde, Key_Tilde },
break; { Qt::Key_Asterisk, Key_Asterisk },
case Qt::Key_SysReq: { Qt::Key_At, Key_AtSign },
key = Key_SysRq; { Qt::Key_B, Key_B },
break; { Qt::Key_Backslash, Key_Backslash },
case Qt::Key_Home: { Qt::Key_Backspace, Key_Backspace },
key = Key_Home; { Qt::Key_Bar, Key_Pipe },
break; { Qt::Key_BraceLeft, Key_LeftBrace },
case Qt::Key_End: { Qt::Key_BraceRight, Key_RightBrace },
key = Key_End; { Qt::Key_BracketLeft, Key_LeftBracket },
break; { Qt::Key_BracketRight, Key_RightBracket },
case Qt::Key_Left: { Qt::Key_C, Key_C },
key = Key_Left; { Qt::Key_CapsLock, Key_CapsLock },
break; { Qt::Key_Colon, Key_Colon },
case Qt::Key_Up: { Qt::Key_Comma, Key_Comma },
key = Key_Up; { Qt::Key_Control, Key_Control },
break; { Qt::Key_D, Key_D },
case Qt::Key_Right: { Qt::Key_Delete, Key_Delete },
key = Key_Right; { Qt::Key_Dollar, Key_Dollar },
break; { Qt::Key_Down, Key_Down },
case Qt::Key_Down: { Qt::Key_E, Key_E },
key = Key_Down; { Qt::Key_End, Key_End },
break; { Qt::Key_Equal, Key_Equal },
case Qt::Key_PageUp: { Qt::Key_Escape, Key_Escape },
key = Key_PageUp; { Qt::Key_exclamdown, Key_ExclamationPoint },
break; { Qt::Key_F, Key_F },
case Qt::Key_PageDown: { Qt::Key_F1, Key_F1 },
key = Key_PageDown; { Qt::Key_F10, Key_F10 },
break; { Qt::Key_F11, Key_F11 },
case Qt::Key_Shift: { Qt::Key_F12, Key_F12 },
key = Key_LeftShift; { Qt::Key_F2, Key_F2 },
break; { Qt::Key_F3, Key_F3 },
// TODO: On Serenity/AK - we distinghuish the shift by the modifiers flag. { Qt::Key_F4, Key_F4 },
// case Qt::Key_Shift: { Qt::Key_F5, Key_F5 },
// key = Key_RightShift; { Qt::Key_F6, Key_F6 },
// break; { Qt::Key_F7, Key_F7 },
case Qt::Key_Control: { Qt::Key_F8, Key_F8 },
key = Key_Control; { Qt::Key_F9, Key_F9 },
break; { Qt::Key_G, Key_G },
case Qt::Key_Alt: { Qt::Key_Greater, Key_GreaterThan },
key = Key_Alt; { Qt::Key_H, Key_H },
break; { Qt::Key_Home, Key_Home },
case Qt::Key_CapsLock: { Qt::Key_I, Key_I },
key = Key_CapsLock; { Qt::Key_Insert, Key_Insert },
break; { Qt::Key_J, Key_J },
case Qt::Key_NumLock: { Qt::Key_K, Key_K },
key = Key_NumLock; { Qt::Key_L, Key_L },
break; { Qt::Key_Left, Key_Left },
case Qt::Key_ScrollLock: { Qt::Key_Less, Key_LessThan },
key = Key_ScrollLock; { Qt::Key_M, Key_M },
break; { Qt::Key_Menu, Key_Menu },
case Qt::Key_F1: { Qt::Key_Minus, Key_Minus },
key = Key_F1; { Qt::Key_N, Key_N },
break; { Qt::Key_NumLock, Key_NumLock },
case Qt::Key_F2: { Qt::Key_O, Key_O },
key = Key_F2; { Qt::Key_P, Key_P },
break; { Qt::Key_PageDown, Key_PageDown },
case Qt::Key_F3: { Qt::Key_PageUp, Key_PageUp },
key = Key_F3; { Qt::Key_ParenLeft, Key_LeftParen },
break; { Qt::Key_ParenRight, Key_RightParen },
case Qt::Key_F4: { Qt::Key_Percent, Key_Percent },
key = Key_F4; { Qt::Key_Period, Key_Period },
break; { Qt::Key_Plus, Key_Plus },
case Qt::Key_F5: { Qt::Key_Print, Key_PrintScreen },
key = Key_F5; { Qt::Key_Q, Key_Q },
break; { Qt::Key_Question, Key_QuestionMark },
case Qt::Key_F6: { Qt::Key_QuoteDbl, Key_DoubleQuote },
key = Key_F6; { Qt::Key_R, Key_R },
break; { Qt::Key_Return, Key_Return },
case Qt::Key_F7: { Qt::Key_Right, Key_Right },
key = Key_F7; { Qt::Key_S, Key_S },
break; { Qt::Key_ScrollLock, Key_ScrollLock },
case Qt::Key_F8: { Qt::Key_Semicolon, Key_Semicolon },
key = Key_F8; { Qt::Key_Shift, Key_LeftShift },
break; { Qt::Key_Slash, Key_Slash },
case Qt::Key_F9: { Qt::Key_Space, Key_Space },
key = Key_F9; { Qt::Key_Super_L, Key_Super },
break; { Qt::Key_SysReq, Key_SysRq },
case Qt::Key_F10: { Qt::Key_T, Key_T },
key = Key_F10; { Qt::Key_Tab, Key_Tab },
break; { Qt::Key_U, Key_U },
case Qt::Key_F11: { Qt::Key_Underscore, Key_Underscore },
key = Key_F11; { Qt::Key_Up, Key_Up },
break; { Qt::Key_V, Key_V },
case Qt::Key_F12: { Qt::Key_W, Key_W },
key = Key_F12; { Qt::Key_X, Key_X },
break; { Qt::Key_Y, Key_Y },
case Qt::Key_Space: { Qt::Key_Z, Key_Z },
key = Key_Space; };
break;
case Qt::Key_exclamdown: for (auto const& mapping : mappings) {
key = Key_ExclamationPoint; if (event.key() == mapping.qt_key)
break; return mapping.serenity_key;
case Qt::Key_QuoteDbl:
key = Key_DoubleQuote;
break;
// case Qt::Key_: ????
// key = Key_Hashtag;
// break;
case Qt::Key_Dollar:
key = Key_Dollar;
break;
case Qt::Key_Percent:
key = Key_Percent;
break;
case Qt::Key_Ampersand:
key = Key_Ampersand;
break;
case Qt::Key_Apostrophe:
key = Key_Apostrophe;
break;
case Qt::Key_ParenLeft:
key = Key_LeftParen;
break;
case Qt::Key_ParenRight:
key = Key_RightParen;
break;
case Qt::Key_Asterisk:
key = Key_Asterisk;
break;
case Qt::Key_Plus:
key = Key_Plus;
break;
case Qt::Key_Comma:
key = Key_Comma;
break;
case Qt::Key_Minus:
key = Key_Minus;
break;
case Qt::Key_Period:
key = Key_Period;
break;
case Qt::Key_Slash:
key = Key_Slash;
break;
case Qt::Key_0:
key = Key_0;
break;
case Qt::Key_1:
key = Key_1;
break;
case Qt::Key_2:
key = Key_2;
break;
case Qt::Key_3:
key = Key_3;
break;
case Qt::Key_4:
key = Key_4;
break;
case Qt::Key_5:
key = Key_5;
break;
case Qt::Key_6:
key = Key_6;
break;
case Qt::Key_7:
key = Key_7;
break;
case Qt::Key_8:
key = Key_8;
break;
case Qt::Key_9:
key = Key_9;
break;
case Qt::Key_Colon:
key = Key_Colon;
break;
case Qt::Key_Semicolon:
key = Key_Semicolon;
break;
case Qt::Key_Less:
key = Key_LessThan;
break;
case Qt::Key_Equal:
key = Key_Equal;
break;
case Qt::Key_Greater:
key = Key_GreaterThan;
break;
case Qt::Key_Question:
key = Key_QuestionMark;
break;
case Qt::Key_At:
key = Key_AtSign;
break;
case Qt::Key_A:
key = Key_A;
break;
case Qt::Key_B:
key = Key_B;
break;
case Qt::Key_C:
key = Key_C;
break;
case Qt::Key_D:
key = Key_D;
break;
case Qt::Key_E:
key = Key_E;
break;
case Qt::Key_F:
key = Key_F;
break;
case Qt::Key_G:
key = Key_G;
break;
case Qt::Key_H:
key = Key_H;
break;
case Qt::Key_I:
key = Key_I;
break;
case Qt::Key_J:
key = Key_J;
break;
case Qt::Key_K:
key = Key_K;
break;
case Qt::Key_L:
key = Key_L;
break;
case Qt::Key_M:
key = Key_M;
break;
case Qt::Key_N:
key = Key_N;
break;
case Qt::Key_O:
key = Key_O;
break;
case Qt::Key_P:
key = Key_P;
break;
case Qt::Key_Q:
key = Key_Q;
break;
case Qt::Key_R:
key = Key_R;
break;
case Qt::Key_S:
key = Key_S;
break;
case Qt::Key_T:
key = Key_T;
break;
case Qt::Key_U:
key = Key_U;
break;
case Qt::Key_V:
key = Key_V;
break;
case Qt::Key_W:
key = Key_W;
break;
case Qt::Key_X:
key = Key_X;
break;
case Qt::Key_Y:
key = Key_Y;
break;
case Qt::Key_Z:
key = Key_Z;
break;
case Qt::Key_BracketLeft:
key = Key_LeftBracket;
break;
case Qt::Key_BracketRight:
key = Key_RightBracket;
break;
case Qt::Key_Backslash:
key = Key_Backslash;
break;
// case Qt::Key_fk: ???
// key = Key_Circumflex;
// break;
case Qt::Key_Underscore:
key = Key_Underscore;
break;
case Qt::Key_BraceLeft:
key = Key_LeftBrace;
break;
case Qt::Key_BraceRight:
key = Key_RightBrace;
break;
case Qt::Key_Bar:
key = Key_Pipe;
break;
case Qt::Key_AsciiTilde: //? Unsure about it
key = Key_Tilde;
break;
// case Qt::Key_AsciiTilde: ???
// key = Key_Backtick;
// break;
// On serenity - super/meta R/L are distinguished by key modifiers
case Qt::Key_Super_L:
key = Key_Super;
break;
case Qt::Key_Menu:
key = Key_Menu;
break;
} }
return key; return Key_Invalid;
} }
void WebView::mouseMoveEvent(QMouseEvent* event) void WebView::mouseMoveEvent(QMouseEvent* event)