|
@@ -22,6 +22,7 @@
|
|
|
|
|
|
#include "Keyboard.h"
|
|
#include "Keyboard.h"
|
|
#include "window/Window.h"
|
|
#include "window/Window.h"
|
|
|
|
+#include "common/config.h"
|
|
|
|
|
|
// SDL before 2.0.18 lack KMOD_SCROLL. Use KMOD_RESERVED instead.
|
|
// SDL before 2.0.18 lack KMOD_SCROLL. Use KMOD_RESERVED instead.
|
|
#if !SDL_VERSION_ATLEAST(2, 0, 18)
|
|
#if !SDL_VERSION_ATLEAST(2, 0, 18)
|
|
@@ -57,10 +58,13 @@ bool Keyboard::isDown(const std::vector<Key> &keylist) const
|
|
|
|
|
|
for (Key key : keylist)
|
|
for (Key key : keylist)
|
|
{
|
|
{
|
|
- SDL_Scancode scancode = SDL_GetScancodeFromKey(keymap[key]);
|
|
|
|
-
|
|
|
|
- if (state[scancode])
|
|
|
|
- return true;
|
|
|
|
|
|
+ SDL_Keycode sdlkey = SDLK_UNKNOWN;
|
|
|
|
+ if (getConstant(key, sdlkey))
|
|
|
|
+ {
|
|
|
|
+ SDL_Scancode scancode = SDL_GetScancodeFromKey(sdlkey);
|
|
|
|
+ if (state[scancode])
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return false;
|
|
return false;
|
|
@@ -120,23 +124,18 @@ Keyboard::Key Keyboard::getKeyFromScancode(Scancode scancode) const
|
|
|
|
|
|
SDL_Keycode sdlkey = SDL_GetKeyFromScancode(sdlscancode);
|
|
SDL_Keycode sdlkey = SDL_GetKeyFromScancode(sdlscancode);
|
|
|
|
|
|
- for (int i = 0; i < KEY_MAX_ENUM; i++)
|
|
|
|
- {
|
|
|
|
- if (keymap[i] == sdlkey)
|
|
|
|
- return (Key) i;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return KEY_UNKNOWN;
|
|
|
|
|
|
+ Key key = KEY_UNKNOWN;
|
|
|
|
+ getConstant(sdlkey, key);
|
|
|
|
+ return key;
|
|
}
|
|
}
|
|
|
|
|
|
Keyboard::Scancode Keyboard::getScancodeFromKey(Key key) const
|
|
Keyboard::Scancode Keyboard::getScancodeFromKey(Key key) const
|
|
{
|
|
{
|
|
Scancode scancode = SCANCODE_UNKNOWN;
|
|
Scancode scancode = SCANCODE_UNKNOWN;
|
|
|
|
|
|
- if (key != KEY_MAX_ENUM)
|
|
|
|
|
|
+ SDL_Keycode sdlkey = SDLK_UNKNOWN;
|
|
|
|
+ if (getConstant(key, sdlkey))
|
|
{
|
|
{
|
|
- SDL_Keycode sdlkey = keymap[key];
|
|
|
|
-
|
|
|
|
SDL_Scancode sdlscancode = SDL_GetScancodeFromKey(sdlkey);
|
|
SDL_Scancode sdlscancode = SDL_GetScancodeFromKey(sdlkey);
|
|
scancodes.find(sdlscancode, scancode);
|
|
scancodes.find(sdlscancode, scancode);
|
|
}
|
|
}
|
|
@@ -183,6 +182,65 @@ bool Keyboard::hasScreenKeyboard() const
|
|
return SDL_HasScreenKeyboardSupport() != SDL_FALSE;
|
|
return SDL_HasScreenKeyboardSupport() != SDL_FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+bool Keyboard::getConstant(Key in, SDL_Keycode &out)
|
|
|
|
+{
|
|
|
|
+ if (in & KEY_SCANCODE_MASK)
|
|
|
|
+ {
|
|
|
|
+ auto it = keyToSDLKey.find(in);
|
|
|
|
+ if (it != keyToSDLKey.end())
|
|
|
|
+ {
|
|
|
|
+ out = it->second;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ // All other keys use the same value as their ASCII character
|
|
|
|
+ // representation in SDL and in love.
|
|
|
|
+ out = (SDL_Keycode)in;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+bool Keyboard::getConstant(SDL_Keycode in, Key &out)
|
|
|
|
+{
|
|
|
|
+#ifdef LOVE_ANDROID
|
|
|
|
+ // TODO: Can this be done more cleanly?
|
|
|
|
+ if (in == SDLK_AC_BACK)
|
|
|
|
+ {
|
|
|
|
+ out = KEY_ESCAPE;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ if (in & SDLK_SCANCODE_MASK)
|
|
|
|
+ {
|
|
|
|
+ if (sdlKeyToKey.empty())
|
|
|
|
+ {
|
|
|
|
+ for (const auto& kvp : keyToSDLKey)
|
|
|
|
+ sdlKeyToKey[kvp.second] = kvp.first;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ auto it = sdlKeyToKey.find(in);
|
|
|
|
+ if (it != sdlKeyToKey.end())
|
|
|
|
+ {
|
|
|
|
+ out = it->second;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ // All other keys use the same value as their ASCII character
|
|
|
|
+ // representation in SDL and in love.
|
|
|
|
+ out = (Key)in;
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return false;
|
|
|
|
+}
|
|
|
|
+
|
|
bool Keyboard::getConstant(Scancode in, SDL_Scancode &out)
|
|
bool Keyboard::getConstant(Scancode in, SDL_Scancode &out)
|
|
{
|
|
{
|
|
return scancodes.find(in, out);
|
|
return scancodes.find(in, out);
|
|
@@ -193,220 +251,147 @@ bool Keyboard::getConstant(SDL_Scancode in, Scancode &out)
|
|
return scancodes.find(in, out);
|
|
return scancodes.find(in, out);
|
|
}
|
|
}
|
|
|
|
|
|
-const SDL_Keycode *Keyboard::createKeyMap()
|
|
|
|
|
|
+std::map<Keyboard::Key, SDL_Keycode> Keyboard::keyToSDLKey =
|
|
{
|
|
{
|
|
- // Array must be static so its lifetime continues once the function returns.
|
|
|
|
- static SDL_Keycode k[Keyboard::KEY_MAX_ENUM] = {SDLK_UNKNOWN};
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_UNKNOWN] = SDLK_UNKNOWN;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_RETURN] = SDLK_RETURN;
|
|
|
|
- k[Keyboard::KEY_ESCAPE] = SDLK_ESCAPE;
|
|
|
|
- k[Keyboard::KEY_BACKSPACE] = SDLK_BACKSPACE;
|
|
|
|
- k[Keyboard::KEY_TAB] = SDLK_TAB;
|
|
|
|
- k[Keyboard::KEY_SPACE] = SDLK_SPACE;
|
|
|
|
- k[Keyboard::KEY_EXCLAIM] = SDLK_EXCLAIM;
|
|
|
|
- k[Keyboard::KEY_QUOTEDBL] = SDLK_QUOTEDBL;
|
|
|
|
- k[Keyboard::KEY_HASH] = SDLK_HASH;
|
|
|
|
- k[Keyboard::KEY_PERCENT] = SDLK_PERCENT;
|
|
|
|
- k[Keyboard::KEY_DOLLAR] = SDLK_DOLLAR;
|
|
|
|
- k[Keyboard::KEY_AMPERSAND] = SDLK_AMPERSAND;
|
|
|
|
- k[Keyboard::KEY_QUOTE] = SDLK_QUOTE;
|
|
|
|
- k[Keyboard::KEY_LEFTPAREN] = SDLK_LEFTPAREN;
|
|
|
|
- k[Keyboard::KEY_RIGHTPAREN] = SDLK_RIGHTPAREN;
|
|
|
|
- k[Keyboard::KEY_ASTERISK] = SDLK_ASTERISK;
|
|
|
|
- k[Keyboard::KEY_PLUS] = SDLK_PLUS;
|
|
|
|
- k[Keyboard::KEY_COMMA] = SDLK_COMMA;
|
|
|
|
- k[Keyboard::KEY_MINUS] = SDLK_MINUS;
|
|
|
|
- k[Keyboard::KEY_PERIOD] = SDLK_PERIOD;
|
|
|
|
- k[Keyboard::KEY_SLASH] = SDLK_SLASH;
|
|
|
|
- k[Keyboard::KEY_0] = SDLK_0;
|
|
|
|
- k[Keyboard::KEY_1] = SDLK_1;
|
|
|
|
- k[Keyboard::KEY_2] = SDLK_2;
|
|
|
|
- k[Keyboard::KEY_3] = SDLK_3;
|
|
|
|
- k[Keyboard::KEY_4] = SDLK_4;
|
|
|
|
- k[Keyboard::KEY_5] = SDLK_5;
|
|
|
|
- k[Keyboard::KEY_6] = SDLK_6;
|
|
|
|
- k[Keyboard::KEY_7] = SDLK_7;
|
|
|
|
- k[Keyboard::KEY_8] = SDLK_8;
|
|
|
|
- k[Keyboard::KEY_9] = SDLK_9;
|
|
|
|
- k[Keyboard::KEY_COLON] = SDLK_COLON;
|
|
|
|
- k[Keyboard::KEY_SEMICOLON] = SDLK_SEMICOLON;
|
|
|
|
- k[Keyboard::KEY_LESS] = SDLK_LESS;
|
|
|
|
- k[Keyboard::KEY_EQUALS] = SDLK_EQUALS;
|
|
|
|
- k[Keyboard::KEY_GREATER] = SDLK_GREATER;
|
|
|
|
- k[Keyboard::KEY_QUESTION] = SDLK_QUESTION;
|
|
|
|
- k[Keyboard::KEY_AT] = SDLK_AT;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_LEFTBRACKET] = SDLK_LEFTBRACKET;
|
|
|
|
- k[Keyboard::KEY_BACKSLASH] = SDLK_BACKSLASH;
|
|
|
|
- k[Keyboard::KEY_RIGHTBRACKET] = SDLK_RIGHTBRACKET;
|
|
|
|
- k[Keyboard::KEY_CARET] = SDLK_CARET;
|
|
|
|
- k[Keyboard::KEY_UNDERSCORE] = SDLK_UNDERSCORE;
|
|
|
|
- k[Keyboard::KEY_BACKQUOTE] = SDLK_BACKQUOTE;
|
|
|
|
- k[Keyboard::KEY_A] = SDLK_a;
|
|
|
|
- k[Keyboard::KEY_B] = SDLK_b;
|
|
|
|
- k[Keyboard::KEY_C] = SDLK_c;
|
|
|
|
- k[Keyboard::KEY_D] = SDLK_d;
|
|
|
|
- k[Keyboard::KEY_E] = SDLK_e;
|
|
|
|
- k[Keyboard::KEY_F] = SDLK_f;
|
|
|
|
- k[Keyboard::KEY_G] = SDLK_g;
|
|
|
|
- k[Keyboard::KEY_H] = SDLK_h;
|
|
|
|
- k[Keyboard::KEY_I] = SDLK_i;
|
|
|
|
- k[Keyboard::KEY_J] = SDLK_j;
|
|
|
|
- k[Keyboard::KEY_K] = SDLK_k;
|
|
|
|
- k[Keyboard::KEY_L] = SDLK_l;
|
|
|
|
- k[Keyboard::KEY_M] = SDLK_m;
|
|
|
|
- k[Keyboard::KEY_N] = SDLK_n;
|
|
|
|
- k[Keyboard::KEY_O] = SDLK_o;
|
|
|
|
- k[Keyboard::KEY_P] = SDLK_p;
|
|
|
|
- k[Keyboard::KEY_Q] = SDLK_q;
|
|
|
|
- k[Keyboard::KEY_R] = SDLK_r;
|
|
|
|
- k[Keyboard::KEY_S] = SDLK_s;
|
|
|
|
- k[Keyboard::KEY_T] = SDLK_t;
|
|
|
|
- k[Keyboard::KEY_U] = SDLK_u;
|
|
|
|
- k[Keyboard::KEY_V] = SDLK_v;
|
|
|
|
- k[Keyboard::KEY_W] = SDLK_w;
|
|
|
|
- k[Keyboard::KEY_X] = SDLK_x;
|
|
|
|
- k[Keyboard::KEY_Y] = SDLK_y;
|
|
|
|
- k[Keyboard::KEY_Z] = SDLK_z;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_CAPSLOCK] = SDLK_CAPSLOCK;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_F1] = SDLK_F1;
|
|
|
|
- k[Keyboard::KEY_F2] = SDLK_F2;
|
|
|
|
- k[Keyboard::KEY_F3] = SDLK_F3;
|
|
|
|
- k[Keyboard::KEY_F4] = SDLK_F4;
|
|
|
|
- k[Keyboard::KEY_F5] = SDLK_F5;
|
|
|
|
- k[Keyboard::KEY_F6] = SDLK_F6;
|
|
|
|
- k[Keyboard::KEY_F7] = SDLK_F7;
|
|
|
|
- k[Keyboard::KEY_F8] = SDLK_F8;
|
|
|
|
- k[Keyboard::KEY_F9] = SDLK_F9;
|
|
|
|
- k[Keyboard::KEY_F10] = SDLK_F10;
|
|
|
|
- k[Keyboard::KEY_F11] = SDLK_F11;
|
|
|
|
- k[Keyboard::KEY_F12] = SDLK_F12;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_PRINTSCREEN] = SDLK_PRINTSCREEN;
|
|
|
|
- k[Keyboard::KEY_SCROLLLOCK] = SDLK_SCROLLLOCK;
|
|
|
|
- k[Keyboard::KEY_PAUSE] = SDLK_PAUSE;
|
|
|
|
- k[Keyboard::KEY_INSERT] = SDLK_INSERT;
|
|
|
|
- k[Keyboard::KEY_HOME] = SDLK_HOME;
|
|
|
|
- k[Keyboard::KEY_PAGEUP] = SDLK_PAGEUP;
|
|
|
|
- k[Keyboard::KEY_DELETE] = SDLK_DELETE;
|
|
|
|
- k[Keyboard::KEY_END] = SDLK_END;
|
|
|
|
- k[Keyboard::KEY_PAGEDOWN] = SDLK_PAGEDOWN;
|
|
|
|
- k[Keyboard::KEY_RIGHT] = SDLK_RIGHT;
|
|
|
|
- k[Keyboard::KEY_LEFT] = SDLK_LEFT;
|
|
|
|
- k[Keyboard::KEY_DOWN] = SDLK_DOWN;
|
|
|
|
- k[Keyboard::KEY_UP] = SDLK_UP;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_NUMLOCKCLEAR] = SDLK_NUMLOCKCLEAR;
|
|
|
|
- k[Keyboard::KEY_KP_DIVIDE] = SDLK_KP_DIVIDE;
|
|
|
|
- k[Keyboard::KEY_KP_MULTIPLY] = SDLK_KP_MULTIPLY;
|
|
|
|
- k[Keyboard::KEY_KP_MINUS] = SDLK_KP_MINUS;
|
|
|
|
- k[Keyboard::KEY_KP_PLUS] = SDLK_KP_PLUS;
|
|
|
|
- k[Keyboard::KEY_KP_ENTER] = SDLK_KP_ENTER;
|
|
|
|
- k[Keyboard::KEY_KP_0] = SDLK_KP_0;
|
|
|
|
- k[Keyboard::KEY_KP_1] = SDLK_KP_1;
|
|
|
|
- k[Keyboard::KEY_KP_2] = SDLK_KP_2;
|
|
|
|
- k[Keyboard::KEY_KP_3] = SDLK_KP_3;
|
|
|
|
- k[Keyboard::KEY_KP_4] = SDLK_KP_4;
|
|
|
|
- k[Keyboard::KEY_KP_5] = SDLK_KP_5;
|
|
|
|
- k[Keyboard::KEY_KP_6] = SDLK_KP_6;
|
|
|
|
- k[Keyboard::KEY_KP_7] = SDLK_KP_7;
|
|
|
|
- k[Keyboard::KEY_KP_8] = SDLK_KP_8;
|
|
|
|
- k[Keyboard::KEY_KP_9] = SDLK_KP_9;
|
|
|
|
- k[Keyboard::KEY_KP_PERIOD] = SDLK_KP_PERIOD;
|
|
|
|
- k[Keyboard::KEY_KP_COMMA] = SDLK_KP_COMMA;
|
|
|
|
- k[Keyboard::KEY_KP_EQUALS] = SDLK_KP_EQUALS;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_APPLICATION] = SDLK_APPLICATION;
|
|
|
|
- k[Keyboard::KEY_POWER] = SDLK_POWER;
|
|
|
|
- k[Keyboard::KEY_F13] = SDLK_F13;
|
|
|
|
- k[Keyboard::KEY_F14] = SDLK_F14;
|
|
|
|
- k[Keyboard::KEY_F15] = SDLK_F15;
|
|
|
|
- k[Keyboard::KEY_F16] = SDLK_F16;
|
|
|
|
- k[Keyboard::KEY_F17] = SDLK_F17;
|
|
|
|
- k[Keyboard::KEY_F18] = SDLK_F18;
|
|
|
|
- k[Keyboard::KEY_F19] = SDLK_F19;
|
|
|
|
- k[Keyboard::KEY_F20] = SDLK_F20;
|
|
|
|
- k[Keyboard::KEY_F21] = SDLK_F21;
|
|
|
|
- k[Keyboard::KEY_F22] = SDLK_F22;
|
|
|
|
- k[Keyboard::KEY_F23] = SDLK_F23;
|
|
|
|
- k[Keyboard::KEY_F24] = SDLK_F24;
|
|
|
|
- k[Keyboard::KEY_EXECUTE] = SDLK_EXECUTE;
|
|
|
|
- k[Keyboard::KEY_HELP] = SDLK_HELP;
|
|
|
|
- k[Keyboard::KEY_MENU] = SDLK_MENU;
|
|
|
|
- k[Keyboard::KEY_SELECT] = SDLK_SELECT;
|
|
|
|
- k[Keyboard::KEY_STOP] = SDLK_STOP;
|
|
|
|
- k[Keyboard::KEY_AGAIN] = SDLK_AGAIN;
|
|
|
|
- k[Keyboard::KEY_UNDO] = SDLK_UNDO;
|
|
|
|
- k[Keyboard::KEY_CUT] = SDLK_CUT;
|
|
|
|
- k[Keyboard::KEY_COPY] = SDLK_COPY;
|
|
|
|
- k[Keyboard::KEY_PASTE] = SDLK_PASTE;
|
|
|
|
- k[Keyboard::KEY_FIND] = SDLK_FIND;
|
|
|
|
- k[Keyboard::KEY_MUTE] = SDLK_MUTE;
|
|
|
|
- k[Keyboard::KEY_VOLUMEUP] = SDLK_VOLUMEUP;
|
|
|
|
- k[Keyboard::KEY_VOLUMEDOWN] = SDLK_VOLUMEDOWN;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_ALTERASE] = SDLK_ALTERASE;
|
|
|
|
- k[Keyboard::KEY_SYSREQ] = SDLK_SYSREQ;
|
|
|
|
- k[Keyboard::KEY_CANCEL] = SDLK_CANCEL;
|
|
|
|
- k[Keyboard::KEY_CLEAR] = SDLK_CLEAR;
|
|
|
|
- k[Keyboard::KEY_PRIOR] = SDLK_PRIOR;
|
|
|
|
- k[Keyboard::KEY_RETURN2] = SDLK_RETURN2;
|
|
|
|
- k[Keyboard::KEY_SEPARATOR] = SDLK_SEPARATOR;
|
|
|
|
- k[Keyboard::KEY_OUT] = SDLK_OUT;
|
|
|
|
- k[Keyboard::KEY_OPER] = SDLK_OPER;
|
|
|
|
- k[Keyboard::KEY_CLEARAGAIN] = SDLK_CLEARAGAIN;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_THOUSANDSSEPARATOR] = SDLK_THOUSANDSSEPARATOR;
|
|
|
|
- k[Keyboard::KEY_DECIMALSEPARATOR] = SDLK_DECIMALSEPARATOR;
|
|
|
|
- k[Keyboard::KEY_CURRENCYUNIT] = SDLK_CURRENCYUNIT;
|
|
|
|
- k[Keyboard::KEY_CURRENCYSUBUNIT] = SDLK_CURRENCYSUBUNIT;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_LCTRL] = SDLK_LCTRL;
|
|
|
|
- k[Keyboard::KEY_LSHIFT] = SDLK_LSHIFT;
|
|
|
|
- k[Keyboard::KEY_LALT] = SDLK_LALT;
|
|
|
|
- k[Keyboard::KEY_LGUI] = SDLK_LGUI;
|
|
|
|
- k[Keyboard::KEY_RCTRL] = SDLK_RCTRL;
|
|
|
|
- k[Keyboard::KEY_RSHIFT] = SDLK_RSHIFT;
|
|
|
|
- k[Keyboard::KEY_RALT] = SDLK_RALT;
|
|
|
|
- k[Keyboard::KEY_RGUI] = SDLK_RGUI;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_MODE] = SDLK_MODE;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_AUDIONEXT] = SDLK_AUDIONEXT;
|
|
|
|
- k[Keyboard::KEY_AUDIOPREV] = SDLK_AUDIOPREV;
|
|
|
|
- k[Keyboard::KEY_AUDIOSTOP] = SDLK_AUDIOSTOP;
|
|
|
|
- k[Keyboard::KEY_AUDIOPLAY] = SDLK_AUDIOPLAY;
|
|
|
|
- k[Keyboard::KEY_AUDIOMUTE] = SDLK_AUDIOMUTE;
|
|
|
|
- k[Keyboard::KEY_MEDIASELECT] = SDLK_MEDIASELECT;
|
|
|
|
- k[Keyboard::KEY_WWW] = SDLK_WWW;
|
|
|
|
- k[Keyboard::KEY_MAIL] = SDLK_MAIL;
|
|
|
|
- k[Keyboard::KEY_CALCULATOR] = SDLK_CALCULATOR;
|
|
|
|
- k[Keyboard::KEY_COMPUTER] = SDLK_COMPUTER;
|
|
|
|
- k[Keyboard::KEY_APP_SEARCH] = SDLK_AC_SEARCH;
|
|
|
|
- k[Keyboard::KEY_APP_HOME] = SDLK_AC_HOME;
|
|
|
|
- k[Keyboard::KEY_APP_BACK] = SDLK_AC_BACK;
|
|
|
|
- k[Keyboard::KEY_APP_FORWARD] = SDLK_AC_FORWARD;
|
|
|
|
- k[Keyboard::KEY_APP_STOP] = SDLK_AC_STOP;
|
|
|
|
- k[Keyboard::KEY_APP_REFRESH] = SDLK_AC_REFRESH;
|
|
|
|
- k[Keyboard::KEY_APP_BOOKMARKS] = SDLK_AC_BOOKMARKS;
|
|
|
|
-
|
|
|
|
- k[Keyboard::KEY_BRIGHTNESSDOWN] = SDLK_BRIGHTNESSDOWN;
|
|
|
|
- k[Keyboard::KEY_BRIGHTNESSUP] = SDLK_BRIGHTNESSUP;
|
|
|
|
- k[Keyboard::KEY_DISPLAYSWITCH] = SDLK_DISPLAYSWITCH;
|
|
|
|
- k[Keyboard::KEY_KBDILLUMTOGGLE] = SDLK_KBDILLUMTOGGLE;
|
|
|
|
- k[Keyboard::KEY_KBDILLUMDOWN] = SDLK_KBDILLUMDOWN;
|
|
|
|
- k[Keyboard::KEY_KBDILLUMUP] = SDLK_KBDILLUMUP;
|
|
|
|
- k[Keyboard::KEY_EJECT] = SDLK_EJECT;
|
|
|
|
- k[Keyboard::KEY_SLEEP] = SDLK_SLEEP;
|
|
|
|
-
|
|
|
|
- return k;
|
|
|
|
-}
|
|
|
|
|
|
+ // ASCII characters don't need to go here since they can be directly
|
|
|
|
+ // converted.
|
|
|
|
+
|
|
|
|
+ { KEY_UNKNOWN, SDLK_UNKNOWN },
|
|
|
|
+
|
|
|
|
+ { KEY_CAPSLOCK, SDLK_CAPSLOCK },
|
|
|
|
+
|
|
|
|
+ { KEY_F1, SDLK_F1 },
|
|
|
|
+ { KEY_F2, SDLK_F2 },
|
|
|
|
+ { KEY_F3, SDLK_F3 },
|
|
|
|
+ { KEY_F4, SDLK_F4 },
|
|
|
|
+ { KEY_F5, SDLK_F5 },
|
|
|
|
+ { KEY_F6, SDLK_F6 },
|
|
|
|
+ { KEY_F7, SDLK_F7 },
|
|
|
|
+ { KEY_F8, SDLK_F8 },
|
|
|
|
+ { KEY_F9, SDLK_F9 },
|
|
|
|
+ { KEY_F10, SDLK_F10 },
|
|
|
|
+ { KEY_F11, SDLK_F11 },
|
|
|
|
+ { KEY_F12, SDLK_F12 },
|
|
|
|
+
|
|
|
|
+ { KEY_PRINTSCREEN, SDLK_PRINTSCREEN },
|
|
|
|
+ { KEY_SCROLLLOCK, SDLK_SCROLLLOCK },
|
|
|
|
+ { KEY_PAUSE, SDLK_PAUSE },
|
|
|
|
+ { KEY_INSERT, SDLK_INSERT },
|
|
|
|
+ { KEY_HOME, SDLK_HOME },
|
|
|
|
+ { KEY_PAGEUP, SDLK_PAGEUP },
|
|
|
|
+ { KEY_DELETE, SDLK_DELETE },
|
|
|
|
+ { KEY_END, SDLK_END },
|
|
|
|
+ { KEY_PAGEDOWN, SDLK_PAGEDOWN },
|
|
|
|
+ { KEY_RIGHT, SDLK_RIGHT },
|
|
|
|
+ { KEY_LEFT, SDLK_LEFT },
|
|
|
|
+ { KEY_DOWN, SDLK_DOWN },
|
|
|
|
+ { KEY_UP, SDLK_UP },
|
|
|
|
+
|
|
|
|
+ { KEY_NUMLOCKCLEAR, SDLK_NUMLOCKCLEAR },
|
|
|
|
+ { KEY_KP_DIVIDE, SDLK_KP_DIVIDE },
|
|
|
|
+ { KEY_KP_MULTIPLY, SDLK_KP_MULTIPLY },
|
|
|
|
+ { KEY_KP_MINUS, SDLK_KP_MINUS },
|
|
|
|
+ { KEY_KP_PLUS, SDLK_KP_PLUS },
|
|
|
|
+ { KEY_KP_ENTER, SDLK_KP_ENTER },
|
|
|
|
+ { KEY_KP_0, SDLK_KP_0 },
|
|
|
|
+ { KEY_KP_1, SDLK_KP_1 },
|
|
|
|
+ { KEY_KP_2, SDLK_KP_2 },
|
|
|
|
+ { KEY_KP_3, SDLK_KP_3 },
|
|
|
|
+ { KEY_KP_4, SDLK_KP_4 },
|
|
|
|
+ { KEY_KP_5, SDLK_KP_5 },
|
|
|
|
+ { KEY_KP_6, SDLK_KP_6 },
|
|
|
|
+ { KEY_KP_7, SDLK_KP_7 },
|
|
|
|
+ { KEY_KP_8, SDLK_KP_8 },
|
|
|
|
+ { KEY_KP_9, SDLK_KP_9 },
|
|
|
|
+ { KEY_KP_PERIOD, SDLK_KP_PERIOD },
|
|
|
|
+ { KEY_KP_COMMA, SDLK_KP_COMMA },
|
|
|
|
+ { KEY_KP_EQUALS, SDLK_KP_EQUALS },
|
|
|
|
+
|
|
|
|
+ { KEY_APPLICATION, SDLK_APPLICATION },
|
|
|
|
+ { KEY_POWER, SDLK_POWER },
|
|
|
|
+ { KEY_F13, SDLK_F13 },
|
|
|
|
+ { KEY_F14, SDLK_F14 },
|
|
|
|
+ { KEY_F15, SDLK_F15 },
|
|
|
|
+ { KEY_F16, SDLK_F16 },
|
|
|
|
+ { KEY_F17, SDLK_F17 },
|
|
|
|
+ { KEY_F18, SDLK_F18 },
|
|
|
|
+ { KEY_F19, SDLK_F19 },
|
|
|
|
+ { KEY_F20, SDLK_F20 },
|
|
|
|
+ { KEY_F21, SDLK_F21 },
|
|
|
|
+ { KEY_F22, SDLK_F22 },
|
|
|
|
+ { KEY_F23, SDLK_F23 },
|
|
|
|
+ { KEY_F24, SDLK_F24 },
|
|
|
|
+ { KEY_EXECUTE, SDLK_EXECUTE },
|
|
|
|
+ { KEY_HELP, SDLK_HELP },
|
|
|
|
+ { KEY_MENU, SDLK_MENU },
|
|
|
|
+ { KEY_SELECT, SDLK_SELECT },
|
|
|
|
+ { KEY_STOP, SDLK_STOP },
|
|
|
|
+ { KEY_AGAIN, SDLK_AGAIN },
|
|
|
|
+ { KEY_UNDO, SDLK_UNDO },
|
|
|
|
+ { KEY_CUT, SDLK_CUT },
|
|
|
|
+ { KEY_COPY, SDLK_COPY },
|
|
|
|
+ { KEY_PASTE, SDLK_PASTE },
|
|
|
|
+ { KEY_FIND, SDLK_FIND },
|
|
|
|
+ { KEY_MUTE, SDLK_MUTE },
|
|
|
|
+ { KEY_VOLUMEUP, SDLK_VOLUMEUP },
|
|
|
|
+ { KEY_VOLUMEDOWN, SDLK_VOLUMEDOWN },
|
|
|
|
+
|
|
|
|
+ { KEY_ALTERASE, SDLK_ALTERASE },
|
|
|
|
+ { KEY_SYSREQ, SDLK_SYSREQ },
|
|
|
|
+ { KEY_CANCEL, SDLK_CANCEL },
|
|
|
|
+ { KEY_CLEAR, SDLK_CLEAR },
|
|
|
|
+ { KEY_PRIOR, SDLK_PRIOR },
|
|
|
|
+ { KEY_RETURN2, SDLK_RETURN2 },
|
|
|
|
+ { KEY_SEPARATOR, SDLK_SEPARATOR },
|
|
|
|
+ { KEY_OUT, SDLK_OUT },
|
|
|
|
+ { KEY_OPER, SDLK_OPER },
|
|
|
|
+ { KEY_CLEARAGAIN, SDLK_CLEARAGAIN },
|
|
|
|
+
|
|
|
|
+ { KEY_THOUSANDSSEPARATOR, SDLK_THOUSANDSSEPARATOR },
|
|
|
|
+ { KEY_DECIMALSEPARATOR, SDLK_DECIMALSEPARATOR },
|
|
|
|
+ { KEY_CURRENCYUNIT, SDLK_CURRENCYUNIT },
|
|
|
|
+ { KEY_CURRENCYSUBUNIT, SDLK_CURRENCYSUBUNIT },
|
|
|
|
+
|
|
|
|
+ { KEY_LCTRL, SDLK_LCTRL },
|
|
|
|
+ { KEY_LSHIFT, SDLK_LSHIFT },
|
|
|
|
+ { KEY_LALT, SDLK_LALT },
|
|
|
|
+ { KEY_LGUI, SDLK_LGUI },
|
|
|
|
+ { KEY_RCTRL, SDLK_RCTRL },
|
|
|
|
+ { KEY_RSHIFT, SDLK_RSHIFT },
|
|
|
|
+ { KEY_RALT, SDLK_RALT },
|
|
|
|
+ { KEY_RGUI, SDLK_RGUI },
|
|
|
|
+
|
|
|
|
+ { KEY_MODE, SDLK_MODE },
|
|
|
|
+
|
|
|
|
+ { KEY_AUDIONEXT, SDLK_AUDIONEXT },
|
|
|
|
+ { KEY_AUDIOPREV, SDLK_AUDIOPREV },
|
|
|
|
+ { KEY_AUDIOSTOP, SDLK_AUDIOSTOP },
|
|
|
|
+ { KEY_AUDIOPLAY, SDLK_AUDIOPLAY },
|
|
|
|
+ { KEY_AUDIOMUTE, SDLK_AUDIOMUTE },
|
|
|
|
+ { KEY_MEDIASELECT, SDLK_MEDIASELECT },
|
|
|
|
+ { KEY_WWW, SDLK_WWW },
|
|
|
|
+ { KEY_MAIL, SDLK_MAIL },
|
|
|
|
+ { KEY_CALCULATOR, SDLK_CALCULATOR },
|
|
|
|
+ { KEY_COMPUTER, SDLK_COMPUTER },
|
|
|
|
+ { KEY_APP_SEARCH, SDLK_AC_SEARCH },
|
|
|
|
+ { KEY_APP_HOME, SDLK_AC_HOME },
|
|
|
|
+ { KEY_APP_BACK, SDLK_AC_BACK },
|
|
|
|
+ { KEY_APP_FORWARD, SDLK_AC_FORWARD },
|
|
|
|
+ { KEY_APP_STOP, SDLK_AC_STOP },
|
|
|
|
+ { KEY_APP_REFRESH, SDLK_AC_REFRESH },
|
|
|
|
+ { KEY_APP_BOOKMARKS, SDLK_AC_BOOKMARKS },
|
|
|
|
+
|
|
|
|
+ { KEY_BRIGHTNESSDOWN, SDLK_BRIGHTNESSDOWN },
|
|
|
|
+ { KEY_BRIGHTNESSUP, SDLK_BRIGHTNESSUP },
|
|
|
|
+ { KEY_DISPLAYSWITCH, SDLK_DISPLAYSWITCH },
|
|
|
|
+ { KEY_KBDILLUMTOGGLE, SDLK_KBDILLUMTOGGLE },
|
|
|
|
+ { KEY_KBDILLUMDOWN, SDLK_KBDILLUMDOWN },
|
|
|
|
+ { KEY_KBDILLUMUP, SDLK_KBDILLUMUP },
|
|
|
|
+ { KEY_EJECT, SDLK_EJECT },
|
|
|
|
+ { KEY_SLEEP, SDLK_SLEEP },
|
|
|
|
+};
|
|
|
|
|
|
-const SDL_Keycode *Keyboard::keymap = Keyboard::createKeyMap();
|
|
|
|
|
|
+std::map<SDL_Keycode, Keyboard::Key> Keyboard::sdlKeyToKey;
|
|
|
|
|
|
EnumMap<Keyboard::Scancode, SDL_Scancode, SDL_NUM_SCANCODES>::Entry Keyboard::scancodeEntries[] =
|
|
EnumMap<Keyboard::Scancode, SDL_Scancode, SDL_NUM_SCANCODES>::Entry Keyboard::scancodeEntries[] =
|
|
{
|
|
{
|