/* client/keyboard.cc This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #include "client/keyboard.h" #include namespace client { void setkeyboardmode(bool input) { if(input) SDL_EnableKeyRepeat(250, SDL_DEFAULT_REPEAT_INTERVAL); else SDL_EnableKeyRepeat(10, SDL_DEFAULT_REPEAT_INTERVAL); } int translate_keysym(const SDL_keysym &keysym) { int key = keysym.sym; bool shift = false; bool numlock = false; // keypad keys if (keysym.mod & KMOD_NUM) { numlock = true; switch(key) { case SDLK_KP0: return '0'; break; case SDLK_KP1: return '1'; break; case SDLK_KP2: return '2'; break; case SDLK_KP3: return '3'; break; case SDLK_KP4: return '4'; break; case SDLK_KP5: return '5'; break; case SDLK_KP6: return '6'; break; case SDLK_KP7: return '7'; break; case SDLK_KP8: return '8'; break; case SDLK_KP9: return '9'; break; } } else { switch(key) { case SDLK_KP0: return SDLK_INSERT; break; case SDLK_KP1: return SDLK_END; break; case SDLK_KP2: return SDLK_DOWN; break; case SDLK_KP3: return SDLK_PAGEDOWN; break; case SDLK_KP4: return SDLK_LEFT; break; case SDLK_KP6: return SDLK_RIGHT; break; case SDLK_KP7: return SDLK_HOME; break; case SDLK_KP8: return SDLK_UP; break; case SDLK_KP9: return SDLK_PAGEUP; break; } } // special keys switch(key) { case SDLK_KP_ENTER: return SDLK_RETURN; break; case SDLK_KP_PERIOD: return '.'; break; case SDLK_KP_DIVIDE: return '/'; break; case SDLK_KP_MULTIPLY: return '*'; break; case SDLK_KP_MINUS: return '-'; break; case SDLK_KP_PLUS: return '+'; break; case SDLK_KP_EQUALS: return '='; break; } // caps lock if (keysym.mod & KMOD_CAPS) shift = true; // left/right shift if ((keysym.mod & KMOD_LSHIFT) || (keysym.mod & KMOD_RSHIFT)) { shift = !shift; } if (shift) { if ((key >= 'a' && key <= 'z')) { key = key + 'A' - 'a'; return key; } switch (key) { case '`': key = '~'; break; case '1': key = '!'; break; case '2': key = '@'; break; case '3': key = '#'; break; case '4': key = '$'; break; case '5': key = '%'; break; case '6': key = '^'; break; case '7': key = '&'; break; case '8': key = '*'; break; case '9': key = '('; break; case '0': key = ')'; break; case '-': key = '_'; break; case '=': key = '+'; break; // second row case '[': key = '{'; break; case ']': key = '}'; break; case '|': key = '\\'; break; // third row case ';': key = ':'; break; case '\'': key = '"'; break; // fourth row case ',': key = '<'; break; case '.': key = '>'; break; case '/': key = '?'; break; } } return key; } } // namespace client