ultimatepp/uppsrc/VirtualGui/SDL2GL/Keys.cpp
cxl 1040cd3073 VirtualGui/SDL2GL key handling improvements (thanks Oblivion)
git-svn-id: svn://ultimatepp.org/upp/trunk@15993 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2021-06-13 13:00:38 +00:00

144 lines
No EOL
3.5 KiB
C++

#include "SDL2GL.h"
namespace Upp {
const static VectorMap<dword, dword> SDL_key_map = {
// { SDLK_BACKSPACE, K_BACK },
{ SDLK_BACKSPACE, K_BACKSPACE },
{ SDLK_TAB, K_TAB },
{ SDLK_SPACE, K_SPACE },
{ SDLK_RETURN, K_RETURN },
{ SDLK_LSHIFT, K_SHIFT_KEY },
{ SDLK_LCTRL, K_CTRL_KEY },
{ SDLK_LALT, K_ALT_KEY },
{ SDLK_CAPSLOCK, K_CAPSLOCK },
{ SDLK_ESCAPE, K_ESCAPE },
{ SDLK_PAGEUP, K_PAGEUP },
{ SDLK_PAGEDOWN, K_PAGEDOWN },
{ SDLK_END, K_END },
{ SDLK_HOME, K_HOME },
{ SDLK_LEFT, K_LEFT },
{ SDLK_UP, K_UP },
{ SDLK_RIGHT, K_RIGHT },
{ SDLK_DOWN, K_DOWN },
{ SDLK_INSERT, K_INSERT },
{ SDLK_DELETE, K_DELETE },
{ SDLK_KP_0, K_NUMPAD0 },
{ SDLK_KP_1, K_NUMPAD1 },
{ SDLK_KP_2, K_NUMPAD2 },
{ SDLK_KP_3, K_NUMPAD3 },
{ SDLK_KP_4, K_NUMPAD4 },
{ SDLK_KP_5, K_NUMPAD5 },
{ SDLK_KP_6, K_NUMPAD6 },
{ SDLK_KP_7, K_NUMPAD7 },
{ SDLK_KP_8, K_NUMPAD8 },
{ SDLK_KP_9, K_NUMPAD9 },
{ SDLK_KP_MULTIPLY, K_MULTIPLY },
{ SDLK_KP_PLUS, K_ADD },
{ SDLK_KP_PERIOD, K_SEPARATOR },
{ SDLK_KP_MINUS, K_SUBTRACT },
{ SDLK_KP_PERIOD, K_DECIMAL },
{ SDLK_KP_DIVIDE, K_DIVIDE },
{ SDLK_SCROLLLOCK, K_SCROLL },
{ SDLK_KP_ENTER, K_ENTER },
{ SDLK_F1, K_F1 },
{ SDLK_F2, K_F2 },
{ SDLK_F3, K_F3 },
{ SDLK_F4, K_F4 },
{ SDLK_F5, K_F5 },
{ SDLK_F6, K_F6 },
{ SDLK_F7, K_F7 },
{ SDLK_F8, K_F8 },
{ SDLK_F9, K_F9 },
{ SDLK_F10, K_F10 },
{ SDLK_F11, K_F11 },
{ SDLK_F12, K_F12 },
{ SDLK_a, K_A },
{ SDLK_b, K_B },
{ SDLK_c, K_C },
{ SDLK_d, K_D },
{ SDLK_e, K_E },
{ SDLK_f, K_F },
{ SDLK_g, K_G },
{ SDLK_h, K_H },
{ SDLK_i, K_I },
{ SDLK_j, K_J },
{ SDLK_k, K_K },
{ SDLK_l, K_L },
{ SDLK_m, K_M },
{ SDLK_n, K_N },
{ SDLK_o, K_O },
{ SDLK_p, K_P },
{ SDLK_q, K_Q },
{ SDLK_r, K_R },
{ SDLK_s, K_S },
{ SDLK_t, K_T },
{ SDLK_u, K_U },
{ SDLK_v, K_V },
{ SDLK_w, K_W },
{ SDLK_x, K_X },
{ SDLK_y, K_Y },
{ SDLK_z, K_Z },
{ SDLK_0, K_0 },
{ SDLK_1, K_1 },
{ SDLK_2, K_2 },
{ SDLK_3, K_3 },
{ SDLK_4, K_4 },
{ SDLK_5, K_5 },
{ SDLK_6, K_6 },
{ SDLK_7, K_7 },
{ SDLK_8, K_8 },
{ SDLK_9, K_9 },
{ K_CTRL|219, K_CTRL_LBRACKET },
{ K_CTRL|221, K_CTRL_RBRACKET },
{ K_CTRL|0xbd, K_CTRL_MINUS },
{ K_CTRL|0xc0, K_CTRL_GRAVE },
{ K_CTRL|0xbf, K_CTRL_SLASH },
{ K_CTRL|0xdc, K_CTRL_BACKSLASH },
{ K_CTRL|0xbc, K_CTRL_COMMA },
{ K_CTRL|0xbe, K_CTRL_PERIOD },
{ K_CTRL|0xbe, K_CTRL_SEMICOLON },
{ K_CTRL|0xbb, K_CTRL_EQUAL },
{ K_CTRL|0xde, K_CTRL_APOSTROPHE },
{ SDLK_PAUSE, K_BREAK }, // Is it really?
{ SDLK_PLUS, K_PLUS },
{ SDLK_MINUS, K_MINUS },
{ SDLK_COMMA, K_COMMA },
{ SDLK_PERIOD, K_PERIOD },
{ SDLK_SEMICOLON, K_SEMICOLON },
{ SDLK_SLASH, K_SLASH },
{ SDLK_CARET, K_GRAVE },
{ SDLK_LEFTBRACKET, K_LBRACKET },
{ SDLK_BACKSLASH, K_BACKSLASH },
{ SDLK_RIGHTBRACKET, K_RBRACKET },
{ SDLK_QUOTEDBL, K_QUOTEDBL }
};
dword fbKEYtoK(dword chr)
{
int i = SDL_key_map.Find(chr);
if(i >= 0) {
chr = SDL_key_map[i];
if(findarg(chr, K_ALT_KEY, K_CTRL_KEY, K_SHIFT_KEY) >= 0)
return chr;
}
else
chr |= K_DELTA;
if(GetCtrl()) chr |= K_CTRL;
if(GetAlt()) chr |= K_ALT;
if(GetShift()) chr |= K_SHIFT;
return chr;
}
}