Map (most) SDL1 keys -> SDL2.

This commit is contained in:
Paul Chote
2013-11-04 21:22:12 +13:00
parent 78fe3fb702
commit db83db5b51

View File

@@ -9,6 +9,7 @@
#endregion
using System;
using System.Collections.Generic;
using System.IO;
using Tao.Sdl;
@@ -16,6 +17,142 @@ namespace OpenRA.Renderer.SdlCommon
{
public class SdlInput
{
static readonly Dictionary<int, Keycode> KeyRemap = new Dictionary<int, Keycode>
{
{ Sdl.SDLK_BACKSPACE, Keycode.BACKSPACE },
{ Sdl.SDLK_TAB, Keycode.TAB },
{ Sdl.SDLK_CLEAR, Keycode.CLEAR },
{ Sdl.SDLK_RETURN, Keycode.RETURN },
{ Sdl.SDLK_PAUSE, Keycode.PAUSE },
{ Sdl.SDLK_ESCAPE, Keycode.ESCAPE },
{ Sdl.SDLK_SPACE, Keycode.SPACE },
{ Sdl.SDLK_EXCLAIM, Keycode.EXCLAIM },
{ Sdl.SDLK_QUOTEDBL, Keycode.QUOTEDBL },
{ Sdl.SDLK_HASH, Keycode.HASH },
{ Sdl.SDLK_DOLLAR, Keycode.DOLLAR },
{ Sdl.SDLK_AMPERSAND, Keycode.AMPERSAND },
{ Sdl.SDLK_QUOTE, Keycode.QUOTE },
{ Sdl.SDLK_LEFTPAREN, Keycode.LEFTPAREN },
{ Sdl.SDLK_RIGHTPAREN, Keycode.RIGHTPAREN },
{ Sdl.SDLK_ASTERISK, Keycode.ASTERISK },
{ Sdl.SDLK_PLUS, Keycode.PLUS },
{ Sdl.SDLK_COMMA, Keycode.COMMA },
{ Sdl.SDLK_MINUS, Keycode.MINUS },
{ Sdl.SDLK_PERIOD, Keycode.PERIOD },
{ Sdl.SDLK_SLASH, Keycode.SLASH },
{ Sdl.SDLK_0, Keycode.NUMBER_0 },
{ Sdl.SDLK_1, Keycode.NUMBER_1 },
{ Sdl.SDLK_2, Keycode.NUMBER_2 },
{ Sdl.SDLK_3, Keycode.NUMBER_3 },
{ Sdl.SDLK_4, Keycode.NUMBER_4 },
{ Sdl.SDLK_5, Keycode.NUMBER_5 },
{ Sdl.SDLK_6, Keycode.NUMBER_6 },
{ Sdl.SDLK_7, Keycode.NUMBER_7 },
{ Sdl.SDLK_8, Keycode.NUMBER_8 },
{ Sdl.SDLK_9, Keycode.NUMBER_9 },
{ Sdl.SDLK_COLON, Keycode.COLON },
{ Sdl.SDLK_SEMICOLON, Keycode.SEMICOLON },
{ Sdl.SDLK_LESS, Keycode.LESS },
{ Sdl.SDLK_EQUALS, Keycode.EQUALS },
{ Sdl.SDLK_GREATER, Keycode.GREATER },
{ Sdl.SDLK_QUESTION, Keycode.QUESTION },
{ Sdl.SDLK_AT, Keycode.AT },
{ Sdl.SDLK_LEFTBRACKET, Keycode.LEFTBRACKET },
{ Sdl.SDLK_BACKSLASH, Keycode.BACKSLASH },
{ Sdl.SDLK_RIGHTBRACKET, Keycode.RIGHTBRACKET },
{ Sdl.SDLK_CARET, Keycode.CARET },
{ Sdl.SDLK_UNDERSCORE, Keycode.UNDERSCORE },
{ Sdl.SDLK_BACKQUOTE, Keycode.BACKQUOTE },
{ Sdl.SDLK_a, Keycode.A },
{ Sdl.SDLK_b, Keycode.B },
{ Sdl.SDLK_c, Keycode.C },
{ Sdl.SDLK_d, Keycode.D },
{ Sdl.SDLK_e, Keycode.E },
{ Sdl.SDLK_f, Keycode.F },
{ Sdl.SDLK_g, Keycode.G },
{ Sdl.SDLK_h, Keycode.H },
{ Sdl.SDLK_i, Keycode.I },
{ Sdl.SDLK_j, Keycode.J },
{ Sdl.SDLK_k, Keycode.K },
{ Sdl.SDLK_l, Keycode.L },
{ Sdl.SDLK_m, Keycode.M },
{ Sdl.SDLK_n, Keycode.N },
{ Sdl.SDLK_o, Keycode.O },
{ Sdl.SDLK_p, Keycode.P },
{ Sdl.SDLK_q, Keycode.Q },
{ Sdl.SDLK_r, Keycode.R },
{ Sdl.SDLK_s, Keycode.S },
{ Sdl.SDLK_t, Keycode.T },
{ Sdl.SDLK_u, Keycode.U },
{ Sdl.SDLK_v, Keycode.V },
{ Sdl.SDLK_w, Keycode.W },
{ Sdl.SDLK_x, Keycode.X },
{ Sdl.SDLK_y, Keycode.Y },
{ Sdl.SDLK_z, Keycode.Z },
{ Sdl.SDLK_DELETE, Keycode.DELETE },
{ Sdl.SDLK_KP0, Keycode.KP_0 },
{ Sdl.SDLK_KP1, Keycode.KP_1 },
{ Sdl.SDLK_KP2, Keycode.KP_2 },
{ Sdl.SDLK_KP3, Keycode.KP_3 },
{ Sdl.SDLK_KP4, Keycode.KP_4 },
{ Sdl.SDLK_KP5, Keycode.KP_5 },
{ Sdl.SDLK_KP6, Keycode.KP_6 },
{ Sdl.SDLK_KP7, Keycode.KP_7 },
{ Sdl.SDLK_KP8, Keycode.KP_8 },
{ Sdl.SDLK_KP9, Keycode.KP_9 },
{ Sdl.SDLK_KP_PERIOD, Keycode.KP_PERIOD },
{ Sdl.SDLK_KP_DIVIDE, Keycode.KP_DIVIDE },
{ Sdl.SDLK_KP_MULTIPLY, Keycode.KP_MULTIPLY },
{ Sdl.SDLK_KP_MINUS, Keycode.KP_MINUS },
{ Sdl.SDLK_KP_PLUS, Keycode.KP_PLUS },
{ Sdl.SDLK_KP_ENTER, Keycode.KP_ENTER },
{ Sdl.SDLK_KP_EQUALS, Keycode.KP_EQUALS },
{ Sdl.SDLK_UP, Keycode.UP },
{ Sdl.SDLK_DOWN, Keycode.DOWN },
{ Sdl.SDLK_RIGHT, Keycode.RIGHT },
{ Sdl.SDLK_LEFT, Keycode.LEFT },
{ Sdl.SDLK_INSERT, Keycode.INSERT },
{ Sdl.SDLK_HOME, Keycode.HOME },
{ Sdl.SDLK_END, Keycode.END },
{ Sdl.SDLK_PAGEUP, Keycode.PAGEUP },
{ Sdl.SDLK_PAGEDOWN, Keycode.PAGEDOWN },
{ Sdl.SDLK_F1, Keycode.F1 },
{ Sdl.SDLK_F2, Keycode.F2 },
{ Sdl.SDLK_F3, Keycode.F3 },
{ Sdl.SDLK_F4, Keycode.F4 },
{ Sdl.SDLK_F5, Keycode.F5 },
{ Sdl.SDLK_F6, Keycode.F6 },
{ Sdl.SDLK_F7, Keycode.F7 },
{ Sdl.SDLK_F8, Keycode.F8 },
{ Sdl.SDLK_F9, Keycode.F9 },
{ Sdl.SDLK_F10, Keycode.F10 },
{ Sdl.SDLK_F11, Keycode.F11 },
{ Sdl.SDLK_F12, Keycode.F12 },
{ Sdl.SDLK_F13, Keycode.F13 },
{ Sdl.SDLK_F14, Keycode.F14 },
{ Sdl.SDLK_F15, Keycode.F15 },
{ Sdl.SDLK_NUMLOCK, Keycode.NUMLOCKCLEAR },
{ Sdl.SDLK_CAPSLOCK, Keycode.CAPSLOCK },
{ Sdl.SDLK_SCROLLOCK, Keycode.SCROLLLOCK },
{ Sdl.SDLK_RSHIFT, Keycode.RSHIFT },
{ Sdl.SDLK_LSHIFT, Keycode.LSHIFT },
{ Sdl.SDLK_RCTRL, Keycode.RCTRL },
{ Sdl.SDLK_LCTRL, Keycode.LCTRL },
{ Sdl.SDLK_RALT, Keycode.RALT },
{ Sdl.SDLK_LALT, Keycode.LALT },
{ Sdl.SDLK_RMETA, Keycode.RGUI },
{ Sdl.SDLK_LMETA, Keycode.LGUI },
{ Sdl.SDLK_LSUPER, Keycode.LGUI },
{ Sdl.SDLK_RSUPER, Keycode.RGUI },
{ Sdl.SDLK_MODE, Keycode.MODE },
{ Sdl.SDLK_HELP, Keycode.HELP },
{ Sdl.SDLK_PRINT, Keycode.PRINTSCREEN },
{ Sdl.SDLK_SYSREQ, Keycode.SYSREQ },
{ Sdl.SDLK_MENU, Keycode.MENU },
{ Sdl.SDLK_POWER, Keycode.POWER },
{ Sdl.SDLK_UNDO, Keycode.UNDO },
};
MouseButton lastButtonBits = (MouseButton)0;
MouseButton MakeButton(byte b)
@@ -104,7 +241,11 @@ namespace OpenRA.Renderer.SdlCommon
case Sdl.SDL_KEYDOWN:
case Sdl.SDL_KEYUP:
{
var keyCode = (Keycode)e.key.keysym.sym;
// Drop unknown keys
Keycode keyCode;
if (!KeyRemap.TryGetValue(e.key.keysym.sym, out keyCode))
break;
var type = e.type == Sdl.SDL_KEYDOWN ?
KeyInputEvent.Down : KeyInputEvent.Up;