summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/windowmanager-sdl.cc
diff options
context:
space:
mode:
authorAdam Borowski <kilobyte@angband.pl>2011-02-14 01:16:12 +0100
committerAdam Borowski <kilobyte@angband.pl>2011-03-31 22:16:07 +0200
commitd3697953552df3e272b77eb1e7528bacd59643d5 (patch)
treed3e60c629d41e4def11f86a6f3441da01bf17b2b /crawl-ref/source/windowmanager-sdl.cc
parent51b381ba462cf6a355f401e817ee2b63518c077b (diff)
downloadcrawl-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.cc11
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;