Fix missing key binding
This commit is contained in:
parent
4e57642d7a
commit
453b834f85
@ -658,7 +658,15 @@ bool CIrrDeviceSDL::run()
|
||||
|
||||
EKEY_CODE key;
|
||||
if (idx == -1)
|
||||
key = (EKEY_CODE)0;
|
||||
{
|
||||
// Fallback to use scancode directly if not found, happens in
|
||||
// belarusian keyboard layout for example
|
||||
auto it = ScanCodeMap.find(SDL_event.key.keysym.scancode);
|
||||
if (it != ScanCodeMap.end())
|
||||
key = it->second;
|
||||
else
|
||||
key = (EKEY_CODE)0;
|
||||
}
|
||||
else
|
||||
key = (EKEY_CODE)KeyMap[idx].Win32Key;
|
||||
|
||||
@ -1090,9 +1098,121 @@ void CIrrDeviceSDL::createKeyMap()
|
||||
KeyMap.push_back(SKeyMap(SDLK_MINUS, IRR_KEY_MINUS));
|
||||
KeyMap.push_back(SKeyMap(SDLK_PERIOD, IRR_KEY_PERIOD));
|
||||
|
||||
KeyMap.push_back(SKeyMap(SDLK_EQUALS, IRR_KEY_PLUS));
|
||||
KeyMap.push_back(SKeyMap(SDLK_LEFTBRACKET, IRR_KEY_OEM_4));
|
||||
KeyMap.push_back(SKeyMap(SDLK_RIGHTBRACKET, IRR_KEY_OEM_6));
|
||||
KeyMap.push_back(SKeyMap(SDLK_BACKSLASH, IRR_KEY_OEM_5));
|
||||
KeyMap.push_back(SKeyMap(SDLK_SEMICOLON, IRR_KEY_OEM_1));
|
||||
KeyMap.push_back(SKeyMap(SDLK_SLASH, IRR_KEY_OEM_2));
|
||||
KeyMap.push_back(SKeyMap(SDLK_MODE, IRR_KEY_BUTTON_MODE));
|
||||
|
||||
// some special keys missing
|
||||
|
||||
KeyMap.sort();
|
||||
|
||||
ScanCodeMap[SDL_SCANCODE_A] = IRR_KEY_A;
|
||||
ScanCodeMap[SDL_SCANCODE_B] = IRR_KEY_B;
|
||||
ScanCodeMap[SDL_SCANCODE_C] = IRR_KEY_C;
|
||||
ScanCodeMap[SDL_SCANCODE_D] = IRR_KEY_D;
|
||||
ScanCodeMap[SDL_SCANCODE_E] = IRR_KEY_E;
|
||||
ScanCodeMap[SDL_SCANCODE_F] = IRR_KEY_F;
|
||||
ScanCodeMap[SDL_SCANCODE_G] = IRR_KEY_G;
|
||||
ScanCodeMap[SDL_SCANCODE_H] = IRR_KEY_H;
|
||||
ScanCodeMap[SDL_SCANCODE_I] = IRR_KEY_I;
|
||||
ScanCodeMap[SDL_SCANCODE_J] = IRR_KEY_J;
|
||||
ScanCodeMap[SDL_SCANCODE_K] = IRR_KEY_K;
|
||||
ScanCodeMap[SDL_SCANCODE_L] = IRR_KEY_L;
|
||||
ScanCodeMap[SDL_SCANCODE_M] = IRR_KEY_M;
|
||||
ScanCodeMap[SDL_SCANCODE_N] = IRR_KEY_N;
|
||||
ScanCodeMap[SDL_SCANCODE_O] = IRR_KEY_O;
|
||||
ScanCodeMap[SDL_SCANCODE_P] = IRR_KEY_P;
|
||||
ScanCodeMap[SDL_SCANCODE_Q] = IRR_KEY_Q;
|
||||
ScanCodeMap[SDL_SCANCODE_R] = IRR_KEY_R;
|
||||
ScanCodeMap[SDL_SCANCODE_S] = IRR_KEY_S;
|
||||
ScanCodeMap[SDL_SCANCODE_T] = IRR_KEY_T;
|
||||
ScanCodeMap[SDL_SCANCODE_U] = IRR_KEY_U;
|
||||
ScanCodeMap[SDL_SCANCODE_V] = IRR_KEY_V;
|
||||
ScanCodeMap[SDL_SCANCODE_W] = IRR_KEY_W;
|
||||
ScanCodeMap[SDL_SCANCODE_X] = IRR_KEY_X;
|
||||
ScanCodeMap[SDL_SCANCODE_Y] = IRR_KEY_Y;
|
||||
ScanCodeMap[SDL_SCANCODE_Z] = IRR_KEY_Z;
|
||||
ScanCodeMap[SDL_SCANCODE_1] = IRR_KEY_1;
|
||||
ScanCodeMap[SDL_SCANCODE_2] = IRR_KEY_2;
|
||||
ScanCodeMap[SDL_SCANCODE_3] = IRR_KEY_3;
|
||||
ScanCodeMap[SDL_SCANCODE_4] = IRR_KEY_4;
|
||||
ScanCodeMap[SDL_SCANCODE_5] = IRR_KEY_5;
|
||||
ScanCodeMap[SDL_SCANCODE_6] = IRR_KEY_6;
|
||||
ScanCodeMap[SDL_SCANCODE_7] = IRR_KEY_7;
|
||||
ScanCodeMap[SDL_SCANCODE_8] = IRR_KEY_8;
|
||||
ScanCodeMap[SDL_SCANCODE_9] = IRR_KEY_9;
|
||||
ScanCodeMap[SDL_SCANCODE_0] = IRR_KEY_0;
|
||||
ScanCodeMap[SDL_SCANCODE_RETURN] = IRR_KEY_RETURN;
|
||||
ScanCodeMap[SDL_SCANCODE_ESCAPE] = IRR_KEY_ESCAPE;
|
||||
ScanCodeMap[SDL_SCANCODE_BACKSPACE] = IRR_KEY_BACK;
|
||||
ScanCodeMap[SDL_SCANCODE_TAB] = IRR_KEY_TAB;
|
||||
ScanCodeMap[SDL_SCANCODE_SPACE] = IRR_KEY_SPACE;
|
||||
ScanCodeMap[SDL_SCANCODE_MINUS] = IRR_KEY_MINUS;
|
||||
ScanCodeMap[SDL_SCANCODE_EQUALS] = IRR_KEY_PLUS;
|
||||
ScanCodeMap[SDL_SCANCODE_LEFTBRACKET] = IRR_KEY_OEM_4;
|
||||
ScanCodeMap[SDL_SCANCODE_RIGHTBRACKET] = IRR_KEY_OEM_6;
|
||||
ScanCodeMap[SDL_SCANCODE_BACKSLASH] = IRR_KEY_OEM_5;
|
||||
ScanCodeMap[SDL_SCANCODE_SEMICOLON] = IRR_KEY_OEM_1;
|
||||
ScanCodeMap[SDL_SCANCODE_APOSTROPHE] = IRR_KEY_OEM_7;
|
||||
ScanCodeMap[SDL_SCANCODE_GRAVE] = IRR_KEY_OEM_3;
|
||||
ScanCodeMap[SDL_SCANCODE_COMMA] = IRR_KEY_COMMA;
|
||||
ScanCodeMap[SDL_SCANCODE_PERIOD] = IRR_KEY_PERIOD;
|
||||
ScanCodeMap[SDL_SCANCODE_SLASH] = IRR_KEY_OEM_2;
|
||||
ScanCodeMap[SDL_SCANCODE_CAPSLOCK] = IRR_KEY_CAPITAL;
|
||||
ScanCodeMap[SDL_SCANCODE_F1] = IRR_KEY_F1;
|
||||
ScanCodeMap[SDL_SCANCODE_F2] = IRR_KEY_F2;
|
||||
ScanCodeMap[SDL_SCANCODE_F3] = IRR_KEY_F3;
|
||||
ScanCodeMap[SDL_SCANCODE_F4] = IRR_KEY_F4;
|
||||
ScanCodeMap[SDL_SCANCODE_F5] = IRR_KEY_F5;
|
||||
ScanCodeMap[SDL_SCANCODE_F6] = IRR_KEY_F6;
|
||||
ScanCodeMap[SDL_SCANCODE_F7] = IRR_KEY_F7;
|
||||
ScanCodeMap[SDL_SCANCODE_F8] = IRR_KEY_F8;
|
||||
ScanCodeMap[SDL_SCANCODE_F9] = IRR_KEY_F9;
|
||||
ScanCodeMap[SDL_SCANCODE_F10] = IRR_KEY_F10;
|
||||
ScanCodeMap[SDL_SCANCODE_F11] = IRR_KEY_F11;
|
||||
ScanCodeMap[SDL_SCANCODE_F12] = IRR_KEY_F12;
|
||||
ScanCodeMap[SDL_SCANCODE_PRINTSCREEN] = IRR_KEY_PRINT;
|
||||
ScanCodeMap[SDL_SCANCODE_SCROLLLOCK] = IRR_KEY_SCROLL;
|
||||
ScanCodeMap[SDL_SCANCODE_PAUSE] = IRR_KEY_PAUSE;
|
||||
ScanCodeMap[SDL_SCANCODE_INSERT] = IRR_KEY_INSERT;
|
||||
ScanCodeMap[SDL_SCANCODE_HOME] = IRR_KEY_HOME;
|
||||
ScanCodeMap[SDL_SCANCODE_PAGEUP] = IRR_KEY_PRIOR;
|
||||
ScanCodeMap[SDL_SCANCODE_DELETE] = IRR_KEY_DELETE;
|
||||
ScanCodeMap[SDL_SCANCODE_END] = IRR_KEY_END;
|
||||
ScanCodeMap[SDL_SCANCODE_PAGEDOWN] = IRR_KEY_NEXT;
|
||||
ScanCodeMap[SDL_SCANCODE_RIGHT] = IRR_KEY_RIGHT;
|
||||
ScanCodeMap[SDL_SCANCODE_LEFT] = IRR_KEY_LEFT;
|
||||
ScanCodeMap[SDL_SCANCODE_DOWN] = IRR_KEY_DOWN;
|
||||
ScanCodeMap[SDL_SCANCODE_UP] = IRR_KEY_UP;
|
||||
ScanCodeMap[SDL_SCANCODE_NUMLOCKCLEAR] = IRR_KEY_NUMLOCK;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_DIVIDE] = IRR_KEY_DIVIDE;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_MULTIPLY] = IRR_KEY_MULTIPLY;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_MINUS] = IRR_KEY_MINUS;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_PLUS] = IRR_KEY_PLUS;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_ENTER] = IRR_KEY_RETURN;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_1] = IRR_KEY_NUMPAD1;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_2] = IRR_KEY_NUMPAD2;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_3] = IRR_KEY_NUMPAD3;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_4] = IRR_KEY_NUMPAD4;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_5] = IRR_KEY_NUMPAD5;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_6] = IRR_KEY_NUMPAD6;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_7] = IRR_KEY_NUMPAD7;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_8] = IRR_KEY_NUMPAD8;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_9] = IRR_KEY_NUMPAD9;
|
||||
ScanCodeMap[SDL_SCANCODE_KP_0] = IRR_KEY_NUMPAD0;
|
||||
ScanCodeMap[SDL_SCANCODE_LCTRL] = IRR_KEY_LCONTROL;
|
||||
ScanCodeMap[SDL_SCANCODE_LSHIFT] = IRR_KEY_LSHIFT;
|
||||
ScanCodeMap[SDL_SCANCODE_LALT] = IRR_KEY_LMENU;
|
||||
ScanCodeMap[SDL_SCANCODE_LGUI] = IRR_KEY_LWIN;
|
||||
ScanCodeMap[SDL_SCANCODE_RCTRL] = IRR_KEY_RCONTROL;
|
||||
ScanCodeMap[SDL_SCANCODE_RSHIFT] = IRR_KEY_RSHIFT;
|
||||
ScanCodeMap[SDL_SCANCODE_RALT] = IRR_KEY_RMENU;
|
||||
ScanCodeMap[SDL_SCANCODE_RGUI] = IRR_KEY_RWIN;
|
||||
ScanCodeMap[SDL_SCANCODE_MODE] = IRR_KEY_BUTTON_MODE;
|
||||
}
|
||||
|
||||
|
||||
|
@ -326,6 +326,7 @@ namespace irr
|
||||
};
|
||||
|
||||
core::array<SKeyMap> KeyMap;
|
||||
std::map<SDL_Scancode, irr::EKEY_CODE> ScanCodeMap;
|
||||
SDL_SysWMinfo Info;
|
||||
void tryCreateOpenGLContext(u32 flags);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user