diff options
author | Adam Borowski <kilobyte@angband.pl> | 2011-02-14 01:16:12 +0100 |
---|---|---|
committer | Adam Borowski <kilobyte@angband.pl> | 2011-03-31 22:16:07 +0200 |
commit | d3697953552df3e272b77eb1e7528bacd59643d5 (patch) | |
tree | d3e60c629d41e4def11f86a6f3441da01bf17b2b /crawl-ref/source/windowmanager-sdl.cc | |
parent | 51b381ba462cf6a355f401e817ee2b63518c077b (diff) | |
download | crawl-ref-d3697953552df3e272b77eb1e7528bacd59643d5.tar.gz crawl-ref-d3697953552df3e272b77eb1e7528bacd59643d5.zip |
Evict all non-character key codes to negative values (tiles).
Diffstat (limited to 'crawl-ref/source/windowmanager-sdl.cc')
-rw-r--r-- | crawl-ref/source/windowmanager-sdl.cc | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/crawl-ref/source/windowmanager-sdl.cc b/crawl-ref/source/windowmanager-sdl.cc index 15ea788197..dee6108959 100644 --- a/crawl-ref/source/windowmanager-sdl.cc +++ b/crawl-ref/source/windowmanager-sdl.cc @@ -136,7 +136,7 @@ static int _translate_keysym(SDL_keysym &keysym) case SDLK_EURO: case SDLK_UNDO: ASSERT(keysym.sym >= SDLK_F1 && keysym.sym <= SDLK_UNDO); - return (keysym.sym + (SDLK_UNDO - SDLK_F1 + 1) * mod); + return -(keysym.sym + (SDLK_UNDO - SDLK_F1 + 1) * mod); // Hack. libw32c overloads clear with '5' too. case SDLK_KP5: @@ -179,10 +179,10 @@ static int _translate_keysym(SDL_keysym &keysym) } // Alt does not get baked into keycodes like shift and ctrl, so handle it. - const int key_offset = (mod & MOD_ALT) ? 3000 : 0; + const int key_offset = (mod & MOD_ALT) ? -3000 : 0; const bool is_ascii = ((keysym.unicode & 0xFF80) == 0); - return (is_ascii ? (keysym.unicode & 0x7F) + key_offset : 0); + return (is_ascii ? (keysym.unicode & 0x7F) + key_offset : keysym.unicode); } static void _translate_event(const SDL_MouseMotionEvent &sdl_event, @@ -484,6 +484,11 @@ int SDLWrapper::wait_event(wm_event *event) event->key.keysym.key_mod = _get_modifiers(sdlevent.key.keysym); event->key.keysym.unicode = sdlevent.key.keysym.unicode; event->key.keysym.sym = _translate_keysym(sdlevent.key.keysym); + + // Everything that's not an actual character (ie, all special keys) + // must be < 0. Dead/shift keys are 0. + ASSERT(event->key.keysym.unicode && event->key.keysym.sym > 0 + || !event->key.keysym.unicode && event->key.keysym.sym <= 0); break; case SDL_KEYUP: event->type = WM_KEYUP; |