diff options
| author | Bastien Bouclet | 2011-08-06 15:52:02 +0200 | 
|---|---|---|
| committer | Bastien Bouclet | 2011-08-06 15:52:02 +0200 | 
| commit | 2daf69267d15025a0259aaf873d83814b78b92ae (patch) | |
| tree | cae7e736c5d5e2849c866b5f7045fe96a3543b5e | |
| parent | 3384f9146c91bc1803ae8c4eff5eca2d3a102832 (diff) | |
| download | scummvm-rg350-2daf69267d15025a0259aaf873d83814b78b92ae.tar.gz scummvm-rg350-2daf69267d15025a0259aaf873d83814b78b92ae.tar.bz2 scummvm-rg350-2daf69267d15025a0259aaf873d83814b78b92ae.zip | |
SDL: Don't rely on SDL keycodes and OSystem keycodes being the same.
SDL 1.3 shuffles keycodes around ...
| -rw-r--r-- | backends/events/sdl/sdl-events.cpp | 147 | ||||
| -rw-r--r-- | backends/events/sdl/sdl-events.h | 5 | 
2 files changed, 150 insertions, 2 deletions
| diff --git a/backends/events/sdl/sdl-events.cpp b/backends/events/sdl/sdl-events.cpp index 4489a2e580..d4f40958fe 100644 --- a/backends/events/sdl/sdl-events.cpp +++ b/backends/events/sdl/sdl-events.cpp @@ -194,6 +194,149 @@ void SdlEventSource::SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event) {  		event.kbd.flags |= Common::KBD_CAPS;  } +Common::KeyCode SdlEventSource::SDLToOSystemKeycode(const SDLKey key) { +	switch (key) { +	case SDLK_BACKSPACE: return Common::KEYCODE_BACKSPACE; +	case SDLK_TAB: return Common::KEYCODE_TAB; +	case SDLK_CLEAR: return Common::KEYCODE_CLEAR; +	case SDLK_RETURN: return Common::KEYCODE_RETURN; +	case SDLK_PAUSE: return Common::KEYCODE_PAUSE; +	case SDLK_ESCAPE: return Common::KEYCODE_ESCAPE; +	case SDLK_SPACE: return Common::KEYCODE_SPACE; +	case SDLK_EXCLAIM: return Common::KEYCODE_EXCLAIM; +	case SDLK_QUOTEDBL: return Common::KEYCODE_QUOTEDBL; +	case SDLK_HASH: return Common::KEYCODE_HASH; +	case SDLK_DOLLAR: return Common::KEYCODE_DOLLAR; +	case SDLK_AMPERSAND: return Common::KEYCODE_AMPERSAND; +	case SDLK_QUOTE: return Common::KEYCODE_QUOTE; +	case SDLK_LEFTPAREN: return Common::KEYCODE_LEFTPAREN; +	case SDLK_RIGHTPAREN: return Common::KEYCODE_RIGHTPAREN; +	case SDLK_ASTERISK: return Common::KEYCODE_ASTERISK; +	case SDLK_PLUS: return Common::KEYCODE_PLUS; +	case SDLK_COMMA: return Common::KEYCODE_COMMA; +	case SDLK_MINUS: return Common::KEYCODE_MINUS; +	case SDLK_PERIOD: return Common::KEYCODE_PERIOD; +	case SDLK_SLASH: return Common::KEYCODE_SLASH; +	case SDLK_0: return Common::KEYCODE_0; +	case SDLK_1: return Common::KEYCODE_1; +	case SDLK_2: return Common::KEYCODE_2; +	case SDLK_3: return Common::KEYCODE_3; +	case SDLK_4: return Common::KEYCODE_4; +	case SDLK_5: return Common::KEYCODE_5; +	case SDLK_6: return Common::KEYCODE_6; +	case SDLK_7: return Common::KEYCODE_7; +	case SDLK_8: return Common::KEYCODE_8; +	case SDLK_9: return Common::KEYCODE_9; +	case SDLK_COLON: return Common::KEYCODE_COLON; +	case SDLK_SEMICOLON: return Common::KEYCODE_SEMICOLON; +	case SDLK_LESS: return Common::KEYCODE_LESS; +	case SDLK_EQUALS: return Common::KEYCODE_EQUALS; +	case SDLK_GREATER: return Common::KEYCODE_GREATER; +	case SDLK_QUESTION: return Common::KEYCODE_QUESTION; +	case SDLK_AT: return Common::KEYCODE_AT; +	case SDLK_LEFTBRACKET: return Common::KEYCODE_LEFTBRACKET; +	case SDLK_BACKSLASH: return Common::KEYCODE_BACKSLASH; +	case SDLK_RIGHTBRACKET: return Common::KEYCODE_RIGHTBRACKET; +	case SDLK_CARET: return Common::KEYCODE_CARET; +	case SDLK_UNDERSCORE: return Common::KEYCODE_UNDERSCORE; +	case SDLK_BACKQUOTE: return Common::KEYCODE_BACKQUOTE; +	case SDLK_a: return Common::KEYCODE_a; +	case SDLK_b: return Common::KEYCODE_b; +	case SDLK_c: return Common::KEYCODE_c; +	case SDLK_d: return Common::KEYCODE_d; +	case SDLK_e: return Common::KEYCODE_e; +	case SDLK_f: return Common::KEYCODE_f; +	case SDLK_g: return Common::KEYCODE_g; +	case SDLK_h: return Common::KEYCODE_h; +	case SDLK_i: return Common::KEYCODE_i; +	case SDLK_j: return Common::KEYCODE_j; +	case SDLK_k: return Common::KEYCODE_k; +	case SDLK_l: return Common::KEYCODE_l; +	case SDLK_m: return Common::KEYCODE_m; +	case SDLK_n: return Common::KEYCODE_n; +	case SDLK_o: return Common::KEYCODE_o; +	case SDLK_p: return Common::KEYCODE_p; +	case SDLK_q: return Common::KEYCODE_q; +	case SDLK_r: return Common::KEYCODE_r; +	case SDLK_s: return Common::KEYCODE_s; +	case SDLK_t: return Common::KEYCODE_t; +	case SDLK_u: return Common::KEYCODE_u; +	case SDLK_v: return Common::KEYCODE_v; +	case SDLK_w: return Common::KEYCODE_w; +	case SDLK_x: return Common::KEYCODE_x; +	case SDLK_y: return Common::KEYCODE_y; +	case SDLK_z: return Common::KEYCODE_z; +	case SDLK_DELETE: return Common::KEYCODE_DELETE; +#if SDL_VERSION_ATLEAST(1, 3, 0) +	case SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_GRAVE): return Common::KEYCODE_TILDE; +#else +	case SDLK_WORLD_16: return Common::KEYCODE_TILDE; +#endif +	case SDLK_KP0: return Common::KEYCODE_KP0; +	case SDLK_KP1: return Common::KEYCODE_KP1; +	case SDLK_KP2: return Common::KEYCODE_KP2; +	case SDLK_KP3: return Common::KEYCODE_KP3; +	case SDLK_KP4: return Common::KEYCODE_KP4; +	case SDLK_KP5: return Common::KEYCODE_KP5; +	case SDLK_KP6: return Common::KEYCODE_KP6; +	case SDLK_KP7: return Common::KEYCODE_KP7; +	case SDLK_KP8: return Common::KEYCODE_KP8; +	case SDLK_KP9: return Common::KEYCODE_KP9; +	case SDLK_KP_PERIOD: return Common::KEYCODE_KP_PERIOD; +	case SDLK_KP_DIVIDE: return Common::KEYCODE_KP_DIVIDE; +	case SDLK_KP_MULTIPLY: return Common::KEYCODE_KP_MULTIPLY; +	case SDLK_KP_MINUS: return Common::KEYCODE_KP_MINUS; +	case SDLK_KP_PLUS: return Common::KEYCODE_KP_PLUS; +	case SDLK_KP_ENTER: return Common::KEYCODE_KP_ENTER; +	case SDLK_KP_EQUALS: return Common::KEYCODE_KP_EQUALS; +	case SDLK_UP: return Common::KEYCODE_UP; +	case SDLK_DOWN: return Common::KEYCODE_DOWN; +	case SDLK_RIGHT: return Common::KEYCODE_RIGHT; +	case SDLK_LEFT: return Common::KEYCODE_LEFT; +	case SDLK_INSERT: return Common::KEYCODE_INSERT; +	case SDLK_HOME: return Common::KEYCODE_HOME; +	case SDLK_END: return Common::KEYCODE_END; +	case SDLK_PAGEUP: return Common::KEYCODE_PAGEUP; +	case SDLK_PAGEDOWN: return Common::KEYCODE_PAGEDOWN; +	case SDLK_F1: return Common::KEYCODE_F1; +	case SDLK_F2: return Common::KEYCODE_F2; +	case SDLK_F3: return Common::KEYCODE_F3; +	case SDLK_F4: return Common::KEYCODE_F4; +	case SDLK_F5: return Common::KEYCODE_F5; +	case SDLK_F6: return Common::KEYCODE_F6; +	case SDLK_F7: return Common::KEYCODE_F7; +	case SDLK_F8: return Common::KEYCODE_F8; +	case SDLK_F9: return Common::KEYCODE_F9; +	case SDLK_F10: return Common::KEYCODE_F10; +	case SDLK_F11: return Common::KEYCODE_F11; +	case SDLK_F12: return Common::KEYCODE_F12; +	case SDLK_F13: return Common::KEYCODE_F13; +	case SDLK_F14: return Common::KEYCODE_F14; +	case SDLK_F15: return Common::KEYCODE_F15; +	case SDLK_NUMLOCK: return Common::KEYCODE_NUMLOCK; +	case SDLK_CAPSLOCK: return Common::KEYCODE_CAPSLOCK; +	case SDLK_SCROLLOCK: return Common::KEYCODE_SCROLLOCK; +	case SDLK_RSHIFT: return Common::KEYCODE_RSHIFT; +	case SDLK_LSHIFT: return Common::KEYCODE_LSHIFT; +	case SDLK_RCTRL: return Common::KEYCODE_RCTRL; +	case SDLK_LCTRL: return Common::KEYCODE_LCTRL; +	case SDLK_RALT: return Common::KEYCODE_RALT; +	case SDLK_LALT: return Common::KEYCODE_LALT; +	case SDLK_LSUPER: return Common::KEYCODE_LSUPER; +	case SDLK_RSUPER: return Common::KEYCODE_RSUPER; +	case SDLK_MODE: return Common::KEYCODE_MODE; +	case SDLK_COMPOSE: return Common::KEYCODE_COMPOSE; +	case SDLK_HELP: return Common::KEYCODE_HELP; +	case SDLK_PRINT: return Common::KEYCODE_PRINT; +	case SDLK_SYSREQ: return Common::KEYCODE_SYSREQ; +	case SDLK_BREAK: return Common::KEYCODE_BREAK; +	case SDLK_MENU: return Common::KEYCODE_MENU; +	case SDLK_POWER: return Common::KEYCODE_POWER; +	case SDLK_UNDO: return Common::KEYCODE_UNDO; +	default: return Common::KEYCODE_INVALID; +	} +} +  bool SdlEventSource::pollEvent(Common::Event &event) {  	handleKbdMouse(); @@ -302,7 +445,7 @@ bool SdlEventSource::handleKeyDown(SDL_Event &ev, Common::Event &event) {  		return true;  	event.type = Common::EVENT_KEYDOWN; -	event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym; +	event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);  	event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);  	return true; @@ -346,7 +489,7 @@ bool SdlEventSource::handleKeyUp(SDL_Event &ev, Common::Event &event) {  	// continue normally  	event.type = Common::EVENT_KEYUP; -	event.kbd.keycode = (Common::KeyCode)ev.key.keysym.sym; +	event.kbd.keycode = SDLToOSystemKeycode(ev.key.keysym.sym);  	event.kbd.ascii = mapKey(ev.key.keysym.sym, (SDLMod)ev.key.keysym.mod, (Uint16)ev.key.keysym.unicode);  	// Ctrl-Alt-<key> will change the GFX mode diff --git a/backends/events/sdl/sdl-events.h b/backends/events/sdl/sdl-events.h index 805b76b108..9122692a8e 100644 --- a/backends/events/sdl/sdl-events.h +++ b/backends/events/sdl/sdl-events.h @@ -127,6 +127,11 @@ protected:  	 * Configures the key modifiers flags status  	 */  	virtual void SDLModToOSystemKeyFlags(SDLMod mod, Common::Event &event); + +	/** +	 * Translates SDL key codes to OSystem key codes +	 */ +	Common::KeyCode SDLToOSystemKeycode(const SDLKey key);  };  #endif | 
