#655 fixed keyboard mapping

This commit is contained in:
Vadim Grigoruk
2018-08-23 22:38:49 +03:00
parent cd26848048
commit 607ebd6d59
3 changed files with 122 additions and 240 deletions

View File

@@ -392,7 +392,7 @@ static void processMouse()
static void processKeyboard()
{
static const u8 KeyboardCodes[] =
static const u32 KeyboardCodes[tic_keys_count] =
{
#include "keycodes.inl"
};
@@ -402,9 +402,33 @@ static void processKeyboard()
const u8* keyboard = SDL_GetKeyboardState(NULL);
for(s32 i = 0, c = 0; i < COUNT_OF(KeyboardCodes) && c < COUNT_OF(input->keyboard.keys); i++)
if(keyboard[i] && KeyboardCodes[i] > tic_key_unknown)
input->keyboard.keys[c++] = KeyboardCodes[i];
enum{BufSize = COUNT_OF(input->keyboard.keys)};
s32 c = 0;
{
SDL_Keymod mod = SDL_GetModState();
if(mod & KMOD_RSHIFT) input->keyboard.keys[c++] = tic_key_shift;
if(mod & (KMOD_RCTRL | KMOD_GUI)) input->keyboard.keys[c++] = tic_key_ctrl;
if(mod & KMOD_RALT) input->keyboard.keys[c++] = tic_key_alt;
if(mod & KMOD_CAPS) input->keyboard.keys[c++] = tic_key_capslock;
}
for(s32 i = 0; i < SDL_NUM_SCANCODES && c < BufSize; i++)
{
if(keyboard[i])
{
u32 keycode = SDL_GetKeyFromScancode(i);
for(s32 k = 0; k < COUNT_OF(KeyboardCodes); k++)
{
if(KeyboardCodes[k] == keycode)
{
input->keyboard.keys[c++] = k;
break;
}
}
}
}
}
#if !defined(__EMSCRIPTEN__) && !defined(__MACOSX__)