--- a/hedgewars/SDLh.pas Tue Nov 10 22:37:54 2015 +0100
+++ b/hedgewars/SDLh.pas Wed Nov 11 19:25:56 2015 +0100
@@ -241,7 +241,7 @@
MIX_INIT_MODPLUG = $00000004;
MIX_INIT_MP3 = $00000008;
MIX_INIT_OGG = $00000010;
- MIX_INIT_FLUIDSYNTH = $00000020;
+ MIX_INIT_FLUIDSYNTH = $00000020;
{* SDL_TTF *}
TTF_STYLE_NORMAL = 0;
@@ -264,7 +264,8 @@
IMG_INIT_PNG = $00000002;
IMG_INIT_TIF = $00000004;
- {* SDL_keysym *}
+ {* SDL_keycode *}
+ SDLK_UNKNOWN = 0;
SDLK_BACKSPACE = 8;
SDLK_RETURN = 13;
SDLK_ESCAPE = 27;
@@ -285,6 +286,8 @@
SDLK_PAGEUP = 280;
SDLK_PAGEDOWN = 281;
+ // special keycodes (for modifier keys etc. will have this bit set)
+ SDLK_SCANCODE_MASK = (1 shl 30);
/////////////////////////////////////////////////////////////////
/////////////////////// TYPE DEFINITIONS ///////////////////////
@@ -301,9 +304,254 @@
PSDL_GLContext= Pointer;
TSDL_TouchId = Int64;
TSDL_FingerId = Int64;
+ TSDL_Keycode = LongInt;
TSDL_eventaction = (SDL_ADDEVENT, SDL_PEEPEVENT, SDL_GETEVENT);
+ TSDL_Scancode = (
+ SDL_SCANCODE_UNKNOWN := 0,
+ SDL_SCANCODE_A := 4,
+ SDL_SCANCODE_B := 5,
+ SDL_SCANCODE_C := 6,
+ SDL_SCANCODE_D := 7,
+ SDL_SCANCODE_E := 8,
+ SDL_SCANCODE_F := 9,
+ SDL_SCANCODE_G := 10,
+ SDL_SCANCODE_H := 11,
+ SDL_SCANCODE_I := 12,
+ SDL_SCANCODE_J := 13,
+ SDL_SCANCODE_K := 14,
+ SDL_SCANCODE_L := 15,
+ SDL_SCANCODE_M := 16,
+ SDL_SCANCODE_N := 17,
+ SDL_SCANCODE_O := 18,
+ SDL_SCANCODE_P := 19,
+ SDL_SCANCODE_Q := 20,
+ SDL_SCANCODE_R := 21,
+ SDL_SCANCODE_S := 22,
+ SDL_SCANCODE_T := 23,
+ SDL_SCANCODE_U := 24,
+ SDL_SCANCODE_V := 25,
+ SDL_SCANCODE_W := 26,
+ SDL_SCANCODE_X := 27,
+ SDL_SCANCODE_Y := 28,
+ SDL_SCANCODE_Z := 29,
+ SDL_SCANCODE_1 := 30,
+ SDL_SCANCODE_2 := 31,
+ SDL_SCANCODE_3 := 32,
+ SDL_SCANCODE_4 := 33,
+ SDL_SCANCODE_5 := 34,
+ SDL_SCANCODE_6 := 35,
+ SDL_SCANCODE_7 := 36,
+ SDL_SCANCODE_8 := 37,
+ SDL_SCANCODE_9 := 38,
+ SDL_SCANCODE_0 := 39,
+ SDL_SCANCODE_RETURN := 40,
+ SDL_SCANCODE_ESCAPE := 41,
+ SDL_SCANCODE_BACKSPACE := 42,
+ SDL_SCANCODE_TAB := 43,
+ SDL_SCANCODE_SPACE := 44,
+ SDL_SCANCODE_MINUS := 45,
+ SDL_SCANCODE_EQUALS := 46,
+ SDL_SCANCODE_LEFTBRACKET := 47,
+ SDL_SCANCODE_RIGHTBRACKET := 48,
+ SDL_SCANCODE_BACKSLASH := 49,
+ SDL_SCANCODE_NONUSHASH := 50,
+ SDL_SCANCODE_SEMICOLON := 51,
+ SDL_SCANCODE_APOSTROPHE := 52,
+ SDL_SCANCODE_GRAVE := 53,
+ SDL_SCANCODE_COMMA := 54,
+ SDL_SCANCODE_PERIOD := 55,
+ SDL_SCANCODE_SLASH := 56,
+ SDL_SCANCODE_CAPSLOCK := 57,
+ SDL_SCANCODE_F1 := 58,
+ SDL_SCANCODE_F2 := 59,
+ SDL_SCANCODE_F3 := 60,
+ SDL_SCANCODE_F4 := 61,
+ SDL_SCANCODE_F5 := 62,
+ SDL_SCANCODE_F6 := 63,
+ SDL_SCANCODE_F7 := 64,
+ SDL_SCANCODE_F8 := 65,
+ SDL_SCANCODE_F9 := 66,
+ SDL_SCANCODE_F10 := 67,
+ SDL_SCANCODE_F11 := 68,
+ SDL_SCANCODE_F12 := 69,
+ SDL_SCANCODE_PRINTSCREEN := 70,
+ SDL_SCANCODE_SCROLLLOCK := 71,
+ SDL_SCANCODE_PAUSE := 72,
+ SDL_SCANCODE_INSERT := 73,
+ SDL_SCANCODE_HOME := 74,
+ SDL_SCANCODE_PAGEUP := 75,
+ SDL_SCANCODE_DELETE := 76,
+ SDL_SCANCODE_END := 77,
+ SDL_SCANCODE_PAGEDOWN := 78,
+ SDL_SCANCODE_RIGHT := 79,
+ SDL_SCANCODE_LEFT := 80,
+ SDL_SCANCODE_DOWN := 81,
+ SDL_SCANCODE_UP := 82,
+ SDL_SCANCODE_NUMLOCKCLEAR := 83,
+ SDL_SCANCODE_KP_DIVIDE := 84,
+ SDL_SCANCODE_KP_MULTIPLY := 85,
+ SDL_SCANCODE_KP_MINUS := 86,
+ SDL_SCANCODE_KP_PLUS := 87,
+ SDL_SCANCODE_KP_ENTER := 88,
+ SDL_SCANCODE_KP_1 := 89,
+ SDL_SCANCODE_KP_2 := 90,
+ SDL_SCANCODE_KP_3 := 91,
+ SDL_SCANCODE_KP_4 := 92,
+ SDL_SCANCODE_KP_5 := 93,
+ SDL_SCANCODE_KP_6 := 94,
+ SDL_SCANCODE_KP_7 := 95,
+ SDL_SCANCODE_KP_8 := 96,
+ SDL_SCANCODE_KP_9 := 97,
+ SDL_SCANCODE_KP_0 := 98,
+ SDL_SCANCODE_KP_PERIOD := 99,
+ SDL_SCANCODE_NONUSBACKSLASH := 100,
+ SDL_SCANCODE_APPLICATION := 101,
+ SDL_SCANCODE_POWER := 102,
+ SDL_SCANCODE_KP_EQUALS := 103,
+ SDL_SCANCODE_F13 := 104,
+ SDL_SCANCODE_F14 := 105,
+ SDL_SCANCODE_F15 := 106,
+ SDL_SCANCODE_F16 := 107,
+ SDL_SCANCODE_F17 := 108,
+ SDL_SCANCODE_F18 := 109,
+ SDL_SCANCODE_F19 := 110,
+ SDL_SCANCODE_F20 := 111,
+ SDL_SCANCODE_F21 := 112,
+ SDL_SCANCODE_F22 := 113,
+ SDL_SCANCODE_F23 := 114,
+ SDL_SCANCODE_F24 := 115,
+ SDL_SCANCODE_EXECUTE := 116,
+ SDL_SCANCODE_HELP := 117,
+ SDL_SCANCODE_MENU := 118,
+ SDL_SCANCODE_SELECT := 119,
+ SDL_SCANCODE_STOP := 120,
+ SDL_SCANCODE_AGAIN := 121,
+ SDL_SCANCODE_UNDO := 122,
+ SDL_SCANCODE_CUT := 123,
+ SDL_SCANCODE_COPY := 124,
+ SDL_SCANCODE_PASTE := 125,
+ SDL_SCANCODE_FIND := 126,
+ SDL_SCANCODE_MUTE := 127,
+ SDL_SCANCODE_VOLUMEUP := 128,
+ SDL_SCANCODE_VOLUMEDOWN := 129,
+ SDL_SCANCODE_KP_COMMA := 133,
+ SDL_SCANCODE_KP_EQUALSAS400 := 134,
+ SDL_SCANCODE_INTERNATIONAL1 := 135,
+ SDL_SCANCODE_INTERNATIONAL2 := 136,
+ SDL_SCANCODE_INTERNATIONAL3 := 137,
+ SDL_SCANCODE_INTERNATIONAL4 := 138,
+ SDL_SCANCODE_INTERNATIONAL5 := 139,
+ SDL_SCANCODE_INTERNATIONAL6 := 140,
+ SDL_SCANCODE_INTERNATIONAL7 := 141,
+ SDL_SCANCODE_INTERNATIONAL8 := 142,
+ SDL_SCANCODE_INTERNATIONAL9 := 143,
+ SDL_SCANCODE_LANG1 := 144, (*< Hangul/English toggle *)
+ SDL_SCANCODE_LANG2 := 145, (*< Hanja conversion *)
+ SDL_SCANCODE_LANG3 := 146, (*< Katakana *)
+ SDL_SCANCODE_LANG4 := 147, (*< Hiragana *)
+ SDL_SCANCODE_LANG5 := 148, (*< Zenkaku/Hankaku *)
+ SDL_SCANCODE_LANG6 := 149, (*< reserved *)
+ SDL_SCANCODE_LANG7 := 150, (*< reserved *)
+ SDL_SCANCODE_LANG8 := 151, (*< reserved *)
+ SDL_SCANCODE_LANG9 := 152, (*< reserved *)
+ SDL_SCANCODE_ALTERASE := 153,
+ SDL_SCANCODE_SYSREQ := 154,
+ SDL_SCANCODE_CANCEL := 155,
+ SDL_SCANCODE_CLEAR := 156,
+ SDL_SCANCODE_PRIOR := 157,
+ SDL_SCANCODE_RETURN2 := 158,
+ SDL_SCANCODE_SEPARATOR := 159,
+ SDL_SCANCODE_OUT := 160,
+ SDL_SCANCODE_OPER := 161,
+ SDL_SCANCODE_CLEARAGAIN := 162,
+ SDL_SCANCODE_CRSEL := 163,
+ SDL_SCANCODE_EXSEL := 164,
+ SDL_SCANCODE_KP_00 := 176,
+ SDL_SCANCODE_KP_000 := 177,
+ SDL_SCANCODE_THOUSANDSSEPARATOR := 178,
+ SDL_SCANCODE_DECIMALSEPARATOR := 179,
+ SDL_SCANCODE_CURRENCYUNIT := 180,
+ SDL_SCANCODE_CURRENCYSUBUNIT := 181,
+ SDL_SCANCODE_KP_LEFTPAREN := 182,
+ SDL_SCANCODE_KP_RIGHTPAREN := 183,
+ SDL_SCANCODE_KP_LEFTBRACE := 184,
+ SDL_SCANCODE_KP_RIGHTBRACE := 185,
+ SDL_SCANCODE_KP_TAB := 186,
+ SDL_SCANCODE_KP_BACKSPACE := 187,
+ SDL_SCANCODE_KP_A := 188,
+ SDL_SCANCODE_KP_B := 189,
+ SDL_SCANCODE_KP_C := 190,
+ SDL_SCANCODE_KP_D := 191,
+ SDL_SCANCODE_KP_E := 192,
+ SDL_SCANCODE_KP_F := 193,
+ SDL_SCANCODE_KP_XOR := 194,
+ SDL_SCANCODE_KP_POWER := 195,
+ SDL_SCANCODE_KP_PERCENT := 196,
+ SDL_SCANCODE_KP_LESS := 197,
+ SDL_SCANCODE_KP_GREATER := 198,
+ SDL_SCANCODE_KP_AMPERSAND := 199,
+ SDL_SCANCODE_KP_DBLAMPERSAND := 200,
+ SDL_SCANCODE_KP_VERTICALBAR := 201,
+ SDL_SCANCODE_KP_DBLVERTICALBAR := 202,
+ SDL_SCANCODE_KP_COLON := 203,
+ SDL_SCANCODE_KP_HASH := 204,
+ SDL_SCANCODE_KP_SPACE := 205,
+ SDL_SCANCODE_KP_AT := 206,
+ SDL_SCANCODE_KP_EXCLAM := 207,
+ SDL_SCANCODE_KP_MEMSTORE := 208,
+ SDL_SCANCODE_KP_MEMRECALL := 209,
+ SDL_SCANCODE_KP_MEMCLEAR := 210,
+ SDL_SCANCODE_KP_MEMADD := 211,
+ SDL_SCANCODE_KP_MEMSUBTRACT := 212,
+ SDL_SCANCODE_KP_MEMMULTIPLY := 213,
+ SDL_SCANCODE_KP_MEMDIVIDE := 214,
+ SDL_SCANCODE_KP_PLUSMINUS := 215,
+ SDL_SCANCODE_KP_CLEAR := 216,
+ SDL_SCANCODE_KP_CLEARENTRY := 217,
+ SDL_SCANCODE_KP_BINARY := 218,
+ SDL_SCANCODE_KP_OCTAL := 219,
+ SDL_SCANCODE_KP_DECIMAL := 220,
+ SDL_SCANCODE_KP_HEXADECIMAL := 221,
+ SDL_SCANCODE_LCTRL := 224,
+ SDL_SCANCODE_LSHIFT := 225,
+ SDL_SCANCODE_LALT := 226,
+ SDL_SCANCODE_LGUI := 227,
+ SDL_SCANCODE_RCTRL := 228,
+ SDL_SCANCODE_RSHIFT := 229,
+ SDL_SCANCODE_RALT := 230,
+ SDL_SCANCODE_RGUI := 231,
+ SDL_SCANCODE_MODE := 257,
+ SDL_SCANCODE_AUDIONEXT := 258,
+ SDL_SCANCODE_AUDIOPREV := 259,
+ SDL_SCANCODE_AUDIOSTOP := 260,
+ SDL_SCANCODE_AUDIOPLAY := 261,
+ SDL_SCANCODE_AUDIOMUTE := 262,
+ SDL_SCANCODE_MEDIASELECT := 263,
+ SDL_SCANCODE_WWW := 264,
+ SDL_SCANCODE_MAIL := 265,
+ SDL_SCANCODE_CALCULATOR := 266,
+ SDL_SCANCODE_COMPUTER := 267,
+ SDL_SCANCODE_AC_SEARCH := 268,
+ SDL_SCANCODE_AC_HOME := 269,
+ SDL_SCANCODE_AC_BACK := 270,
+ SDL_SCANCODE_AC_FORWARD := 271,
+ SDL_SCANCODE_AC_STOP := 272,
+ SDL_SCANCODE_AC_REFRESH := 273,
+ SDL_SCANCODE_AC_BOOKMARKS := 274,
+ SDL_SCANCODE_BRIGHTNESSDOWN := 275,
+ SDL_SCANCODE_BRIGHTNESSUP := 276,
+ SDL_SCANCODE_DISPLAYSWITCH := 277,
+ SDL_SCANCODE_KBDILLUMTOGGLE := 278,
+ SDL_SCANCODE_KBDILLUMDOWN := 279,
+ SDL_SCANCODE_KBDILLUMUP := 280,
+ SDL_SCANCODE_EJECT := 281,
+ SDL_SCANCODE_SLEEP := 282,
+ SDL_SCANCODE_APP1 := 283,
+ SDL_SCANCODE_APP2 := 284
+ );
+
PSDL_Rect = ^TSDL_Rect;
TSDL_Rect = record
x, y, w, h: LongInt;
@@ -441,8 +689,8 @@
{* SDL_Event type definition *}
TSDL_Keysym = record
- scancode: LongInt;
- sym: LongInt;
+ scancode: TSDL_Scancode;
+ sym: TSDL_Keycode;
modifier: Word;
unused: LongWord;
end;
@@ -854,10 +1102,10 @@
function SDL_GetMouseState(x, y: PLongInt): Byte; cdecl; external SDLLibName;
-function SDL_GetKeyName(key: LongWord): PChar; cdecl; external SDLLibName;
-function SDL_GetScancodeName(key: LongWord): PChar; cdecl; external SDLLibName;
-function SDL_GetKeyFromScancode(key: LongWord): LongInt; cdecl; external SDLLibName;
-
+function SDL_GetKeyName(key: TSDL_Keycode): PChar; cdecl; external SDLLibName;
+function SDL_GetScancodeName(key: TSDL_Scancode): PChar; cdecl; external SDLLibName;
+function SDL_GetKeyFromScancode(key: TSDL_Scancode): TSDL_Keycode; cdecl; external SDLLibName;
+// SDL2 functions has some additional functions (not listed here) for keycode/scancode translation
procedure SDL_PumpEvents; cdecl; external SDLLibName;
function SDL_PollEvent(event: PSDL_Event): LongInt; cdecl; external SDLLibName;