mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-15 07:00:58 +00:00
Merge pull request #212 from DanielGibson/sdl-input-overhaul
SDL input overhaul
This commit is contained in:
commit
e7817d770f
4 changed files with 555 additions and 55 deletions
|
@ -169,6 +169,30 @@ keyname_t keynames[] =
|
|||
NAMEKEY2( POWER ),
|
||||
NAMEKEY2( SLEEP ),
|
||||
|
||||
// DG: adding names for keys from cegui/directinput I added in enum keyNum_t in sys_public.h
|
||||
// (they're really valid directinput scancodes, they just haven't been handled before in d3bfg)
|
||||
NAMEKEY2( OEM_102 ),
|
||||
NAMEKEY2( ABNT_C1 ),
|
||||
NAMEKEY2( NEXTTRACK ),
|
||||
NAMEKEY2( MUTE ),
|
||||
NAMEKEY2( CALCULATOR ),
|
||||
NAMEKEY2( PLAYPAUSE ),
|
||||
NAMEKEY2( MEDIASTOP ),
|
||||
NAMEKEY2( VOLUMEDOWN ),
|
||||
NAMEKEY2( VOLUMEUP ),
|
||||
NAMEKEY2( WEBHOME ),
|
||||
NAMEKEY2( WAKE ),
|
||||
NAMEKEY2( WEBSEARCH ),
|
||||
NAMEKEY2( WEBFAVORITES ),
|
||||
NAMEKEY2( WEBREFRESH ),
|
||||
NAMEKEY2( WEBSTOP ),
|
||||
NAMEKEY2( WEBFORWARD ),
|
||||
NAMEKEY2( WEBBACK ),
|
||||
NAMEKEY2( MYCOMPUTER ),
|
||||
NAMEKEY2( MAIL ),
|
||||
NAMEKEY2( MEDIASELECT ),
|
||||
// DG end
|
||||
|
||||
// --
|
||||
|
||||
NAMEKEY( MOUSE1, "#str_07054" ),
|
||||
|
@ -370,8 +394,9 @@ idKeyInput::LocalizedKeyName
|
|||
*/
|
||||
const char* idKeyInput::LocalizedKeyName( keyNum_t keynum )
|
||||
{
|
||||
// RB: FIXME
|
||||
// RB
|
||||
#if defined(_WIN32)
|
||||
// DG TODO: move this into a win32 Sys_GetKeyName()
|
||||
if( keynum < K_JOY1 )
|
||||
{
|
||||
// On the PC, we want to turn the scan code in to a key label that matches the currently selected keyboard layout
|
||||
|
@ -393,7 +418,21 @@ const char* idKeyInput::LocalizedKeyName( keyNum_t keynum )
|
|||
return bindStr;
|
||||
}
|
||||
}
|
||||
#else // DG: for !Windows I introduced Sys_GetKeyName() to get key label for current keyboard layout
|
||||
|
||||
const char* ret = nullptr;
|
||||
|
||||
if( keynum < K_JOY1 ) // only for keyboard keys, not joystick or mouse
|
||||
{
|
||||
ret = Sys_GetKeyName( keynum );
|
||||
}
|
||||
|
||||
if( ret != NULL )
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
// check for a key string
|
||||
for( keyname_t* kn = keynames; kn->name; kn++ )
|
||||
{
|
||||
|
@ -403,10 +442,7 @@ const char* idKeyInput::LocalizedKeyName( keyNum_t keynum )
|
|||
}
|
||||
}
|
||||
return "????";
|
||||
#else
|
||||
return KeyNumToString( keynum );
|
||||
#endif
|
||||
// RB end
|
||||
// RB/DG end
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
361
neo/sys/sdl/sdl2_scancode_mappings.h
Normal file
361
neo/sys/sdl/sdl2_scancode_mappings.h
Normal file
|
@ -0,0 +1,361 @@
|
|||
/*
|
||||
* Maps SDL2 scancodes to directinput keynums/scancodes.
|
||||
* Useful if you're porting a game that uses dinput scancodes internally
|
||||
* (for key bindings etc) or any other lib (like CEGUI) that uses them.
|
||||
*
|
||||
* (C) 2015 Daniel Gibson, do whatever you want with this.
|
||||
*
|
||||
* No warranty is offered or implied; use this code at your own risk.
|
||||
*
|
||||
* Released to the Public Domain, do whatever you want with this: use it,
|
||||
* modify it, copy it into your own code, ...
|
||||
* No need to mention me or this "license" in your code or docs, even though
|
||||
* it would be appreciated, of course.
|
||||
*/
|
||||
|
||||
|
||||
#ifndef _SDL2_SCANCODE_TO_DINPUT_MAPPINGS_H_
|
||||
#define _SDL2_SCANCODE_TO_DINPUT_MAPPINGS_H_
|
||||
|
||||
// TODO: map the following keys, if possible:
|
||||
// #define DIK_UNDERLINE 0x93 /* (NEC PC98) */
|
||||
// #define DIK_KANJI 0x94 /* (Japanese keyboard) */
|
||||
// #define DIK_AX 0x96 /* (Japan AX) */
|
||||
// #define DIK_UNLABELED 0x97 /* (J3100) */
|
||||
//
|
||||
// #define DIK_WAKE 0xE3 /* System Wake */
|
||||
//
|
||||
// (#define DIK_ABNT_C2 0x7E /* Numpad . on Brazilian keyboard */ - system should map this to KP_COMMA or something,
|
||||
// according to USB doc, so probably it doesn't need mapping here)
|
||||
|
||||
// maps SDL2 scancodes to directinput keynums/scancodes - dinput_key = scanCodeToKeyNum[(int)your_sdl2_scancode];
|
||||
static int scanCodeToKeyNum[SDL_NUM_SCANCODES] = {
|
||||
0x0, // SDL_SCANCODE_UNKNOWN = 0, => 0 should also work for dinput codes as "not assigned/unknown"
|
||||
0x0, // // 1 (unused)
|
||||
0x0, // // 2 (unused)
|
||||
0x0, // // 3 (unused)
|
||||
0x1E, // SDL_SCANCODE_A = 4, - DIK_A
|
||||
0x30, // SDL_SCANCODE_B = 5, - DIK_B
|
||||
0x2E, // SDL_SCANCODE_C = 6, - DIK_C
|
||||
0x20, // SDL_SCANCODE_D = 7, - DIK_D
|
||||
0x12, // SDL_SCANCODE_E = 8, - DIK_E
|
||||
0x21, // SDL_SCANCODE_F = 9, - DIK_F
|
||||
0x22, // SDL_SCANCODE_G = 10, - DIK_G
|
||||
0x23, // SDL_SCANCODE_H = 11, - DIK_H
|
||||
0x17, // SDL_SCANCODE_I = 12, - DIK_I
|
||||
0x24, // SDL_SCANCODE_J = 13, - DIK_J
|
||||
0x25, // SDL_SCANCODE_K = 14, - DIK_K
|
||||
0x26, // SDL_SCANCODE_L = 15, - DIK_L
|
||||
0x32, // SDL_SCANCODE_M = 16, - DIK_M
|
||||
0x31, // SDL_SCANCODE_N = 17, - DIK_N
|
||||
0x18, // SDL_SCANCODE_O = 18, - DIK_O
|
||||
0x19, // SDL_SCANCODE_P = 19, - DIK_P
|
||||
0x10, // SDL_SCANCODE_Q = 20, - DIK_Q
|
||||
0x13, // SDL_SCANCODE_R = 21, - DIK_R
|
||||
0x1F, // SDL_SCANCODE_S = 22, - DIK_S
|
||||
0x14, // SDL_SCANCODE_T = 23, - DIK_T
|
||||
0x16, // SDL_SCANCODE_U = 24, - DIK_U
|
||||
0x2F, // SDL_SCANCODE_V = 25, - DIK_V
|
||||
0x11, // SDL_SCANCODE_W = 26, - DIK_W
|
||||
0x2D, // SDL_SCANCODE_X = 27, - DIK_X
|
||||
0x15, // SDL_SCANCODE_Y = 28, - DIK_Y
|
||||
0x2C, // SDL_SCANCODE_Z = 29, - DIK_Z
|
||||
|
||||
0x02, // SDL_SCANCODE_1 = 30, - DIK_1
|
||||
0x03, // SDL_SCANCODE_2 = 31, - DIK_2
|
||||
0x04, // SDL_SCANCODE_3 = 32, - DIK_3
|
||||
0x05, // SDL_SCANCODE_4 = 33, - DIK_4
|
||||
0x06, // SDL_SCANCODE_5 = 34, - DIK_5
|
||||
0x07, // SDL_SCANCODE_6 = 35, - DIK_6
|
||||
0x08, // SDL_SCANCODE_7 = 36, - DIK_7
|
||||
0x09, // SDL_SCANCODE_8 = 37, - DIK_8
|
||||
0x0A, // SDL_SCANCODE_9 = 38, - DIK_9
|
||||
0x0B, // SDL_SCANCODE_0 = 39, - DIK_0
|
||||
|
||||
0x1C, // SDL_SCANCODE_RETURN = 40, - DIK_RETURN
|
||||
0x01, // SDL_SCANCODE_ESCAPE = 41, - DIK_ESCAPE
|
||||
0x0E, // SDL_SCANCODE_BACKSPACE = 42, - DIK_BACK
|
||||
0x0F, // SDL_SCANCODE_TAB = 43, - DIK_TAB
|
||||
0x39, // SDL_SCANCODE_SPACE = 44, - DIK_SPACE
|
||||
|
||||
0x0C, // SDL_SCANCODE_MINUS = 45, - DIK_MINUS
|
||||
0x0D, // SDL_SCANCODE_EQUALS = 46, - DIK_EQUALS
|
||||
0x1A, // SDL_SCANCODE_LEFTBRACKET = 47, - DIK_LBRACKET
|
||||
0x1B, // SDL_SCANCODE_RIGHTBRACKET = 48, - DIK_RBRACKET
|
||||
0x2B, // SDL_SCANCODE_BACKSLASH = 49, // next to enter, US: [\|] DE: [#'] UK: [#~] - DIK_BACKSLASH
|
||||
0x2B, // SDL_SCANCODE_NONUSHASH = 50, // same key as before actually on some layouts, systems should map this to SDL_SCANCODE_BACKSLASH - DIK_BACKSLASH
|
||||
0x27, // SDL_SCANCODE_SEMICOLON = 51, - DIK_SEMICOLON
|
||||
0x28, // SDL_SCANCODE_APOSTROPHE = 52, - DIK_APOSTROPHE
|
||||
0x29, // SDL_SCANCODE_GRAVE = 53, // "quake/doom3 console key" - DIK_GRAVE
|
||||
0x33, // SDL_SCANCODE_COMMA = 54, - DIK_COMMA
|
||||
0x34, // SDL_SCANCODE_PERIOD = 55, - DIK_PERIOD
|
||||
0x35, // SDL_SCANCODE_SLASH = 56, - DIK_SLASH
|
||||
|
||||
0x3A, // SDL_SCANCODE_CAPSLOCK = 57, - DIK_CAPITAL
|
||||
|
||||
0x3B, // SDL_SCANCODE_F1 = 58, - DIK_F1
|
||||
0x3C, // SDL_SCANCODE_F2 = 59, - DIK_F2
|
||||
0x3D, // SDL_SCANCODE_F3 = 60, - DIK_F3
|
||||
0x3E, // SDL_SCANCODE_F4 = 61, - DIK_F4
|
||||
0x3F, // SDL_SCANCODE_F5 = 62, - DIK_F5
|
||||
0x40, // SDL_SCANCODE_F6 = 63, - DIK_F6
|
||||
0x41, // SDL_SCANCODE_F7 = 64, - DIK_F7
|
||||
0x42, // SDL_SCANCODE_F8 = 65, - DIK_F8
|
||||
0x43, // SDL_SCANCODE_F9 = 66, - DIK_F9
|
||||
0x44, // SDL_SCANCODE_F10 = 67, - DIK_F10
|
||||
0x57, // SDL_SCANCODE_F11 = 68, - DIK_F11
|
||||
0x58, // SDL_SCANCODE_F12 = 69, - DIK_F12
|
||||
|
||||
0xB7, // SDL_SCANCODE_PRINTSCREEN = 70, // - DIK_SYSRQ; SDL_SCANCODE_SYSREQ also maps to this!
|
||||
|
||||
0x46, // SDL_SCANCODE_SCROLLLOCK = 71, - DIK_SCROLL
|
||||
0xC5, // SDL_SCANCODE_PAUSE = 72, - DIK_PAUSE
|
||||
0xD2, // SDL_SCANCODE_INSERT = 73, // insert on PC, help on some Mac keyboards (but does send code 73, not 117) - DIK_INSERT
|
||||
0xC7, // SDL_SCANCODE_HOME = 74, - DIK_HOME
|
||||
0xC9, // SDL_SCANCODE_PAGEUP = 75, - DIK_PRIOR
|
||||
0xD3, // SDL_SCANCODE_DELETE = 76, - DIK_DELETE
|
||||
0xCF, // SDL_SCANCODE_END = 77, - DIK_END
|
||||
0xD1, // SDL_SCANCODE_PAGEDOWN = 78, - DIK_NEXT
|
||||
0xCD, // SDL_SCANCODE_RIGHT = 79, - DIK_RIGHT
|
||||
0xCB, // SDL_SCANCODE_LEFT = 80, - DIK_LEFT
|
||||
0xD0, // SDL_SCANCODE_DOWN = 81, - DIK_DOWN
|
||||
0xC8, // SDL_SCANCODE_UP = 82, - DIK_UP
|
||||
|
||||
0x45, // SDL_SCANCODE_NUMLOCKCLEAR = 83, // num lock on PC, clear on Mac keyboards - DIK_NUMLOCK
|
||||
|
||||
0xB5, // SDL_SCANCODE_KP_DIVIDE = 84, - DIK_DIVIDE
|
||||
0x37, // SDL_SCANCODE_KP_MULTIPLY = 85, - DIK_MULTIPLY
|
||||
0x4A, // SDL_SCANCODE_KP_MINUS = 86, - DIK_SUBTRACT
|
||||
0x4E, // SDL_SCANCODE_KP_PLUS = 87, - DIK_ADD
|
||||
0x9C, // SDL_SCANCODE_KP_ENTER = 88, - DIK_NUMPADENTER
|
||||
0x4F, // SDL_SCANCODE_KP_1 = 89, - DIK_NUMPAD1
|
||||
0x50, // SDL_SCANCODE_KP_2 = 90, - DIK_NUMPAD2
|
||||
0x51, // SDL_SCANCODE_KP_3 = 91, - DIK_NUMPAD3
|
||||
0x4B, // SDL_SCANCODE_KP_4 = 92, - DIK_NUMPAD4
|
||||
0x4C, // SDL_SCANCODE_KP_5 = 93, - DIK_NUMPAD5
|
||||
0x4D, // SDL_SCANCODE_KP_6 = 94, - DIK_NUMPAD6
|
||||
0x47, // SDL_SCANCODE_KP_7 = 95, - DIK_NUMPAD7
|
||||
0x48, // SDL_SCANCODE_KP_8 = 96, - DIK_NUMPAD8
|
||||
0x49, // SDL_SCANCODE_KP_9 = 97, - DIK_NUMPAD9
|
||||
0x52, // SDL_SCANCODE_KP_0 = 98, - DIK_NUMPAD0
|
||||
0x53, // SDL_SCANCODE_KP_PERIOD = 99, - DIK_DECIMAL
|
||||
|
||||
0x56, // SDL_SCANCODE_NONUSBACKSLASH = 100, // [<>|] on german keyboard, next to left shift - DIK_OEM_102
|
||||
0xDD, // SDL_SCANCODE_APPLICATION = 101, // windows contextual menu, compose - DIK_APPS
|
||||
0xDE, // SDL_SCANCODE_POWER = 102, // should be a status flag, but some mac keyboards have a power key - DIK_POWER
|
||||
|
||||
0x8D, // SDL_SCANCODE_KP_EQUALS = 103, - DIK_NUMPADEQUALS
|
||||
0x64, // SDL_SCANCODE_F13 = 104, - DIK_F13
|
||||
0x65, // SDL_SCANCODE_F14 = 105, - DIK_F14
|
||||
0x66, // SDL_SCANCODE_F15 = 106, - DIK_F15
|
||||
0x67, // SDL_SCANCODE_F16 = 107, // TODO: F16 and up don't have DIK_ constants! is this right?
|
||||
0x68, // SDL_SCANCODE_F17 = 108, // (at least 0x67-0x6F have no DIK_constants at all)
|
||||
0x69, // SDL_SCANCODE_F18 = 109,
|
||||
0x6A, // SDL_SCANCODE_F19 = 110,
|
||||
0x6B, // SDL_SCANCODE_F20 = 111,
|
||||
0x6C, // SDL_SCANCODE_F21 = 112,
|
||||
0x6D, // SDL_SCANCODE_F22 = 113,
|
||||
0x6E, // SDL_SCANCODE_F23 = 114,
|
||||
0x6F, // SDL_SCANCODE_F24 = 115,
|
||||
|
||||
0x0, // SDL_SCANCODE_EXECUTE = 116,
|
||||
0x0, // SDL_SCANCODE_HELP = 117,
|
||||
0x0, // SDL_SCANCODE_MENU = 118,
|
||||
0x0, // SDL_SCANCODE_SELECT = 119,
|
||||
|
||||
0x95, // SDL_SCANCODE_STOP = 120, - DIK_STOP
|
||||
|
||||
0x0, // SDL_SCANCODE_AGAIN = 121, // redo
|
||||
0x0, // SDL_SCANCODE_UNDO = 122,
|
||||
0x0, // SDL_SCANCODE_CUT = 123,
|
||||
0x0, // SDL_SCANCODE_COPY = 124,
|
||||
0x0, // SDL_SCANCODE_PASTE = 125,
|
||||
0x0, // SDL_SCANCODE_FIND = 126,
|
||||
0x0, // SDL_SCANCODE_MUTE = 127,
|
||||
|
||||
0xB0, // SDL_SCANCODE_VOLUMEUP = 128, - DIK_VOLUMEUP
|
||||
0xAE, // SDL_SCANCODE_VOLUMEDOWN = 129, - DIK_VOLUMEDOWN
|
||||
|
||||
// /* not sure whether there's a reason to enable these */
|
||||
0x0, // /* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */
|
||||
0x0, // /* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */
|
||||
0x0, // /* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */
|
||||
|
||||
0xB3, // SDL_SCANCODE_KP_COMMA = 133, - DIK_NUMPADCOMMA
|
||||
|
||||
0x0, // SDL_SCANCODE_KP_EQUALSAS400 = 134,
|
||||
|
||||
0x73, // SDL_SCANCODE_INTERNATIONAL1 = 135, // this is really brazilian / and ? - DIK_ABNT_C1
|
||||
0x0, // SDL_SCANCODE_INTERNATIONAL2 = 136, // TODO: Hut1_12v2.pdf page 60, footnote 16
|
||||
0x7D, // SDL_SCANCODE_INTERNATIONAL3 = 137, - DIK_YEN
|
||||
0x79, // SDL_SCANCODE_INTERNATIONAL4 = 138, // Japan: XFER/"convert kana -> kanji", right of space - DIK_CONVERT
|
||||
0x7B, // SDL_SCANCODE_INTERNATIONAL5 = 139, // Japan: NFER/"don't convert kana -> kanji", left of space - DIK_NOCONVERT
|
||||
0x0, // SDL_SCANCODE_INTERNATIONAL6 = 140, // TODO: Hut1_12v2.pdf page 60, footnote 20
|
||||
0x0, // SDL_SCANCODE_INTERNATIONAL7 = 141, // Toggle Double-Byte/Single-Byte mode.
|
||||
0x0, // SDL_SCANCODE_INTERNATIONAL8 = 142, // Undefined, available for other Front End Language Processors
|
||||
0x0, // SDL_SCANCODE_INTERNATIONAL9 = 143, // Undefined, available for other Front End Language Processors
|
||||
0x0, // SDL_SCANCODE_LANG1 = 144, // Hangul/English toggle (Korea)
|
||||
0x0, // SDL_SCANCODE_LANG2 = 145, // Hanja conversion (Korea)
|
||||
0x70, // SDL_SCANCODE_LANG3 = 146, // Katakana (Japan) - DIK_KANA
|
||||
0x0, // SDL_SCANCODE_LANG4 = 147, // Hiragana (Japan)
|
||||
0x0, // SDL_SCANCODE_LANG5 = 148, // Zenkaku/Hankaku (Japan)
|
||||
0x0, // SDL_SCANCODE_LANG6 = 149, // reserved
|
||||
0x0, // SDL_SCANCODE_LANG7 = 150, // reserved
|
||||
0x0, // SDL_SCANCODE_LANG8 = 151, // reserved
|
||||
0x0, // SDL_SCANCODE_LANG9 = 152, // reserved
|
||||
|
||||
0x0, // SDL_SCANCODE_ALTERASE = 153, // Erase-Eaze
|
||||
|
||||
0xB7, // SDL_SCANCODE_SYSREQ = 154, - DIK_SYSRQ; SDL_SCANCODE_PRINTSCREEN also maps to this!
|
||||
|
||||
0x0, // SDL_SCANCODE_CANCEL = 155,
|
||||
0x0, // SDL_SCANCODE_CLEAR = 156,
|
||||
0x0, // SDL_SCANCODE_PRIOR = 157,
|
||||
0x0, // SDL_SCANCODE_RETURN2 = 158,
|
||||
0x0, // SDL_SCANCODE_SEPARATOR = 159,
|
||||
0x0, // SDL_SCANCODE_OUT = 160,
|
||||
0x0, // SDL_SCANCODE_OPER = 161,
|
||||
0x0, // SDL_SCANCODE_CLEARAGAIN = 162,
|
||||
0x0, // SDL_SCANCODE_CRSEL = 163,
|
||||
0x0, // SDL_SCANCODE_EXSEL = 164,
|
||||
|
||||
0x0, // 165 (unused)
|
||||
0x0, // 166 (unused)
|
||||
0x0, // 167 (unused)
|
||||
0x0, // 168 (unused)
|
||||
0x0, // 169 (unused)
|
||||
0x0, // 170 (unused)
|
||||
0x0, // 171 (unused)
|
||||
0x0, // 172 (unused)
|
||||
0x0, // 173 (unused)
|
||||
0x0, // 174 (unused)
|
||||
0x0, // 175 (unused)
|
||||
|
||||
0x0, // SDL_SCANCODE_KP_00 = 176,
|
||||
0x0, // SDL_SCANCODE_KP_000 = 177,
|
||||
0x0, // SDL_SCANCODE_THOUSANDSSEPARATOR = 178,
|
||||
0x0, // SDL_SCANCODE_DECIMALSEPARATOR = 179,
|
||||
0x0, // SDL_SCANCODE_CURRENCYUNIT = 180,
|
||||
0x0, // SDL_SCANCODE_CURRENCYSUBUNIT = 181,
|
||||
0x0, // SDL_SCANCODE_KP_LEFTPAREN = 182,
|
||||
0x0, // SDL_SCANCODE_KP_RIGHTPAREN = 183,
|
||||
0x0, // SDL_SCANCODE_KP_LEFTBRACE = 184,
|
||||
0x0, // SDL_SCANCODE_KP_RIGHTBRACE = 185,
|
||||
0x0, // SDL_SCANCODE_KP_TAB = 186,
|
||||
0x0, // SDL_SCANCODE_KP_BACKSPACE = 187,
|
||||
0x0, // SDL_SCANCODE_KP_A = 188,
|
||||
0x0, // SDL_SCANCODE_KP_B = 189,
|
||||
0x0, // SDL_SCANCODE_KP_C = 190,
|
||||
0x0, // SDL_SCANCODE_KP_D = 191,
|
||||
0x0, // SDL_SCANCODE_KP_E = 192,
|
||||
0x0, // SDL_SCANCODE_KP_F = 193,
|
||||
0x0, // SDL_SCANCODE_KP_XOR = 194,
|
||||
0x0, // SDL_SCANCODE_KP_POWER = 195,
|
||||
0x0, // SDL_SCANCODE_KP_PERCENT = 196,
|
||||
0x0, // SDL_SCANCODE_KP_LESS = 197,
|
||||
0x0, // SDL_SCANCODE_KP_GREATER = 198,
|
||||
0x0, // SDL_SCANCODE_KP_AMPERSAND = 199,
|
||||
0x0, // SDL_SCANCODE_KP_DBLAMPERSAND = 200,
|
||||
0x0, // SDL_SCANCODE_KP_VERTICALBAR = 201,
|
||||
0x0, // SDL_SCANCODE_KP_DBLVERTICALBAR = 202,
|
||||
|
||||
0x92, // SDL_SCANCODE_KP_COLON = 203, - DIK_COLON
|
||||
|
||||
0x0, // SDL_SCANCODE_KP_HASH = 204,
|
||||
0x0, // SDL_SCANCODE_KP_SPACE = 205,
|
||||
|
||||
0x91, // SDL_SCANCODE_KP_AT = 206, - DIK_AT
|
||||
|
||||
0x0, // SDL_SCANCODE_KP_EXCLAM = 207,
|
||||
0x0, // SDL_SCANCODE_KP_MEMSTORE = 208,
|
||||
0x0, // SDL_SCANCODE_KP_MEMRECALL = 209,
|
||||
0x0, // SDL_SCANCODE_KP_MEMCLEAR = 210,
|
||||
0x0, // SDL_SCANCODE_KP_MEMADD = 211,
|
||||
0x0, // SDL_SCANCODE_KP_MEMSUBTRACT = 212,
|
||||
0x0, // SDL_SCANCODE_KP_MEMMULTIPLY = 213,
|
||||
0x0, // SDL_SCANCODE_KP_MEMDIVIDE = 214,
|
||||
0x0, // SDL_SCANCODE_KP_PLUSMINUS = 215,
|
||||
0x0, // SDL_SCANCODE_KP_CLEAR = 216,
|
||||
0x0, // SDL_SCANCODE_KP_CLEARENTRY = 217,
|
||||
0x0, // SDL_SCANCODE_KP_BINARY = 218,
|
||||
0x0, // SDL_SCANCODE_KP_OCTAL = 219,
|
||||
0x0, // SDL_SCANCODE_KP_DECIMAL = 220,
|
||||
0x0, // SDL_SCANCODE_KP_HEXADECIMAL = 221,
|
||||
|
||||
0x0, // 222 (unused)
|
||||
0x0, // 223 (unused)
|
||||
|
||||
0x1D, // SDL_SCANCODE_LCTRL = 224, - DIK_LCONTROL
|
||||
0x2A, // SDL_SCANCODE_LSHIFT = 225, - DIK_LSHIFT
|
||||
0x38, // SDL_SCANCODE_LALT = 226, // left Alt, option - DIK_LMENU
|
||||
0xDB, // SDL_SCANCODE_LGUI = 227, // left windows, command (apple), meta - DIK_LWIN
|
||||
0x9D, // SDL_SCANCODE_RCTRL = 228, - DIK_RCONTROL
|
||||
0x36, // SDL_SCANCODE_RSHIFT = 229, - DIK_RSHIFT
|
||||
0xB8, // SDL_SCANCODE_RALT = 230, // right Alt/AltGr, option - DIK_RMENU, also used for SDL_SCANCODE_MODE!
|
||||
0xDC, // SDL_SCANCODE_RGUI = 231, // left windows, command (apple), meta - DIK_RWIN
|
||||
|
||||
// 232 - 256 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, // 232 - 240 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 241-250 unused
|
||||
0, 0, 0, 0, 0, 0, // 251-256 unused
|
||||
|
||||
0xB8, // SDL_SCANCODE_MODE = 257, // this seems to be the AltGr Key? - DIK_RMENU (right alt)
|
||||
|
||||
// These values are mapped from usage page 0x0C (USB consumer page).
|
||||
0x99, // SDL_SCANCODE_AUDIONEXT = 258, - DIK_NEXTTRACK
|
||||
0x90, // SDL_SCANCODE_AUDIOPREV = 259, - DIK_PREVTRACK, which is DIK_CIRCUMFLEX on japanese keyboards
|
||||
0xA4, // SDL_SCANCODE_AUDIOSTOP = 260, - DIK_MEDIASTOP
|
||||
0xA2, // SDL_SCANCODE_AUDIOPLAY = 261, - DIK_PLAYPAUSE
|
||||
0xA0, // SDL_SCANCODE_AUDIOMUTE = 262, - DIK_MUTE
|
||||
0xED, // SDL_SCANCODE_MEDIASELECT = 263, - DIK_MEDIASELECT
|
||||
|
||||
0x0, // SDL_SCANCODE_WWW = 264,
|
||||
|
||||
0xEC, // SDL_SCANCODE_MAIL = 265, - DIK_MAIL
|
||||
0xA1, // SDL_SCANCODE_CALCULATOR = 266, - DIK_CALCULATOR
|
||||
0xEB, // SDL_SCANCODE_COMPUTER = 267, - DIK_MYCOMPUTER
|
||||
0xE5, // SDL_SCANCODE_AC_SEARCH = 268, - DIK_WEBSEARCH
|
||||
0xB2, // SDL_SCANCODE_AC_HOME = 269, - DIK_WEBHOME
|
||||
0xEA, // SDL_SCANCODE_AC_BACK = 270, - DIK_WEBBACK
|
||||
0xE9, // SDL_SCANCODE_AC_FORWARD = 271, - DIK_WEBFORWARD
|
||||
0xE8, // SDL_SCANCODE_AC_STOP = 272, - DIK_WEBSTOP
|
||||
0xE7, // SDL_SCANCODE_AC_REFRESH = 273, - DIK_WEBREFRESH
|
||||
0xE6, // SDL_SCANCODE_AC_BOOKMARKS = 274, - DIK_WEBFAVORITES
|
||||
|
||||
// These are values that Christian Walther added (for mac keyboard?).
|
||||
0x0, // SDL_SCANCODE_BRIGHTNESSDOWN = 275,
|
||||
0x0, // SDL_SCANCODE_BRIGHTNESSUP = 276,
|
||||
0x0, // SDL_SCANCODE_DISPLAYSWITCH = 277, // display mirroring/dual display switch, video mode switch
|
||||
0x0, // SDL_SCANCODE_KBDILLUMTOGGLE = 278,
|
||||
0x0, // SDL_SCANCODE_KBDILLUMDOWN = 279,
|
||||
0x0, // SDL_SCANCODE_KBDILLUMUP = 280,
|
||||
0x0, // SDL_SCANCODE_EJECT = 281,
|
||||
|
||||
0xDF, // SDL_SCANCODE_SLEEP = 282, - DIK_SLEEP
|
||||
|
||||
0x0, // SDL_SCANCODE_APP1 = 283,
|
||||
0x0, // SDL_SCANCODE_APP2 = 284,
|
||||
// end of Walther-keys
|
||||
|
||||
// the rest up to 511 are currently not named in SDL
|
||||
|
||||
0, 0, 0, 0, 0, 0, // 285-290 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 291-300 unused
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 301-320 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 321-340 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 341-360 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 361-380 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 381-400 unused
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 401-420 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 421-440 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 441-460 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 461-480 unused
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 481-500 unused
|
||||
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // 501-511 unused
|
||||
};
|
||||
|
||||
|
||||
#endif /* _SDL2_SCANCODE_TO_DINPUT_MAPPINGS_H_ */
|
|
@ -135,7 +135,35 @@ static idList<joystick_poll_t> joystick_polls;
|
|||
SDL_Joystick* joy = NULL;
|
||||
int SDL_joystick_has_hat = 0;
|
||||
|
||||
// RB begin
|
||||
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
|
||||
#include "sdl2_scancode_mappings.h"
|
||||
|
||||
static int SDLScanCodeToKeyNum(SDL_Scancode sc)
|
||||
{
|
||||
int idx = int(sc);
|
||||
assert(idx >= 0 && idx < SDL_NUM_SCANCODES);
|
||||
|
||||
return scanCodeToKeyNum[idx];
|
||||
}
|
||||
|
||||
static SDL_Scancode KeyNumToSDLScanCode(int keyNum)
|
||||
{
|
||||
if(keyNum < K_JOY1)
|
||||
{
|
||||
for(int i=0; i<SDL_NUM_SCANCODES; ++i)
|
||||
{
|
||||
if(scanCodeToKeyNum[i] == keyNum)
|
||||
{
|
||||
return SDL_Scancode(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return SDL_SCANCODE_UNKNOWN;
|
||||
}
|
||||
|
||||
#else // SDL1.2
|
||||
static int SDL_KeyToDoom3Key( SDL_Keycode key, bool& isChar )
|
||||
{
|
||||
isChar = false;
|
||||
|
@ -542,7 +570,7 @@ static int SDL_KeyToDoom3Key( SDL_Keycode key, bool& isChar )
|
|||
|
||||
return 0;
|
||||
}
|
||||
// RB end
|
||||
#endif // SDL2
|
||||
|
||||
static void PushConsoleEvent( const char* s )
|
||||
{
|
||||
|
@ -766,26 +794,27 @@ sysEvent_t Sys_GetEvent()
|
|||
SDL_Event ev;
|
||||
sysEvent_t res = { };
|
||||
int key;
|
||||
static const sysEvent_t res_none = { SE_NONE, 0, 0, 0, NULL };
|
||||
|
||||
// when this is returned, it's assumed that there are no more events!
|
||||
static const sysEvent_t no_more_events = { SE_NONE, 0, 0, 0, NULL };
|
||||
|
||||
// WM0110: previous state of joystick hat
|
||||
static int previous_hat_state = SDL_HAT_CENTERED;
|
||||
|
||||
static int previous_hat_state = SDL_HAT_CENTERED;
|
||||
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
static char* s = NULL;
|
||||
static size_t s_pos = 0;
|
||||
static char str[SDL_TEXTINPUTEVENT_TEXT_SIZE] = {0};
|
||||
static size_t str_pos = 0;
|
||||
|
||||
if( s )
|
||||
if( str_pos != 0 )
|
||||
{
|
||||
res.evType = SE_CHAR;
|
||||
res.evValue = s[s_pos];
|
||||
res.evValue = str[str_pos];
|
||||
|
||||
s_pos++;
|
||||
if( !s[s_pos] )
|
||||
++str_pos;
|
||||
if( !str[str_pos] )
|
||||
{
|
||||
free( s );
|
||||
s = NULL;
|
||||
s_pos = 0;
|
||||
memset( str, 0, sizeof( str ) );
|
||||
str_pos = 0;
|
||||
}
|
||||
|
||||
return res;
|
||||
|
@ -817,7 +846,8 @@ sysEvent_t Sys_GetEvent()
|
|||
return res;
|
||||
}
|
||||
|
||||
if( SDL_PollEvent( &ev ) )
|
||||
// loop until there is an event we care about (will return then) or no more events
|
||||
while( SDL_PollEvent( &ev ) )
|
||||
{
|
||||
switch( ev.type )
|
||||
{
|
||||
|
@ -873,7 +903,7 @@ sysEvent_t Sys_GetEvent()
|
|||
// DG end
|
||||
}
|
||||
|
||||
return res_none;
|
||||
continue; // handle next event
|
||||
#else
|
||||
case SDL_ACTIVEEVENT:
|
||||
{
|
||||
|
@ -898,10 +928,10 @@ sysEvent_t Sys_GetEvent()
|
|||
cvarSystem->SetCVarBool( "com_pause", pause );
|
||||
}
|
||||
|
||||
return res_none;
|
||||
continue; // handle next event
|
||||
|
||||
case SDL_VIDEOEXPOSE:
|
||||
return res_none;
|
||||
continue; // handle next event
|
||||
|
||||
// DG: handle resizing and moving of window
|
||||
case SDL_VIDEORESIZE:
|
||||
|
@ -915,7 +945,7 @@ sysEvent_t Sys_GetEvent()
|
|||
glConfig.nativeScreenHeight = h;
|
||||
// for some reason this needs a vid_restart in SDL1 but not SDL2 so GLimp_SetScreenParms() is called
|
||||
PushConsoleEvent( "vid_restart" );
|
||||
return res_none;
|
||||
continue; // handle next event
|
||||
}
|
||||
// DG end
|
||||
#endif
|
||||
|
@ -934,7 +964,7 @@ sysEvent_t Sys_GetEvent()
|
|||
cvarSystem->SetCVarInteger( "r_fullscreen", fullscreen );
|
||||
// DG end
|
||||
PushConsoleEvent( "vid_restart" );
|
||||
return res_none;
|
||||
continue; // handle next event
|
||||
}
|
||||
|
||||
// DG: ctrl-g to un-grab mouse - yeah, left ctrl shoots, then just use right ctrl :)
|
||||
|
@ -943,7 +973,7 @@ sysEvent_t Sys_GetEvent()
|
|||
bool grab = cvarSystem->GetCVarBool( "in_nograb" );
|
||||
grab = !grab;
|
||||
cvarSystem->SetCVarBool( "in_nograb", grab );
|
||||
return res_none;
|
||||
continue; // handle next event
|
||||
}
|
||||
// DG end
|
||||
|
||||
|
@ -952,6 +982,7 @@ sysEvent_t Sys_GetEvent()
|
|||
// if unicode is not 0 and is translatable to ASCII it should work..
|
||||
if( ev.key.state == SDL_PRESSED && ( ev.key.keysym.unicode & 0xff80 ) == 0 )
|
||||
{
|
||||
// FIXME: can we support utf32?
|
||||
c = ev.key.keysym.unicode & 0x7f;
|
||||
}
|
||||
// DG end
|
||||
|
@ -970,17 +1001,22 @@ sysEvent_t Sys_GetEvent()
|
|||
} // DG end, the original code is in the else case
|
||||
else
|
||||
{
|
||||
key = SDL_KeyToDoom3Key( ev.key.keysym.sym, isChar );
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
key = SDLScanCodeToKeyNum(ev.key.keysym.scancode);
|
||||
|
||||
if( key == 0 )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
// SDL2 has no ev.key.keysym.unicode anymore.. but the scancode should work well enough for console
|
||||
if( ev.type == SDL_KEYDOWN ) // FIXME: don't complain if this was an ASCII char and the console is open?
|
||||
common->Warning( "unmapped SDL key %d scancode %d", ev.key.keysym.sym, ev.key.keysym.scancode );
|
||||
|
||||
return res_none;
|
||||
continue; // just handle next event
|
||||
}
|
||||
#else
|
||||
key = SDL_KeyToDoom3Key( ev.key.keysym.sym, isChar );
|
||||
|
||||
if( key == 0 )
|
||||
{
|
||||
unsigned char uc = ev.key.keysym.unicode & 0xff;
|
||||
// check if its an unmapped console key
|
||||
if( uc == Sys_GetConsoleKey( false ) || uc == Sys_GetConsoleKey( true ) )
|
||||
|
@ -990,12 +1026,24 @@ sysEvent_t Sys_GetEvent()
|
|||
}
|
||||
else
|
||||
{
|
||||
if(c)
|
||||
{
|
||||
res.evType = SE_CHAR;
|
||||
res.evValue = c;
|
||||
|
||||
c = 0;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
if( ev.type == SDL_KEYDOWN ) // FIXME: don't complain if this was an ASCII char and the console is open?
|
||||
common->Warning( "unmapped SDL key %d (0x%x) scancode %d", ev.key.keysym.sym, ev.key.keysym.unicode, ev.key.keysym.scancode );
|
||||
return res_none;
|
||||
|
||||
|
||||
continue; // just handle next event
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
res.evType = SE_KEY;
|
||||
|
@ -1012,15 +1060,21 @@ sysEvent_t Sys_GetEvent()
|
|||
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
case SDL_TEXTINPUT:
|
||||
if( ev.text.text && *ev.text.text )
|
||||
if( ev.text.text[0] != '\0' )
|
||||
{
|
||||
if( !ev.text.text[1] )
|
||||
c = *ev.text.text;
|
||||
else
|
||||
s = strdup( ev.text.text );
|
||||
// FIXME: all this really only works for ascii.. convert to unicode etc
|
||||
if( ev.text.text[1] )
|
||||
{
|
||||
// more than 1 char => handle the next chars later
|
||||
idStr::Copynz( str, ev.text.text+1, sizeof( str ) );
|
||||
}
|
||||
// return an event with the first/only char
|
||||
res.evType = SE_CHAR;
|
||||
res.evValue = ev.text.text[0];
|
||||
return res;
|
||||
}
|
||||
|
||||
return res_none;
|
||||
continue; // just handle next event
|
||||
#endif
|
||||
|
||||
case SDL_MOUSEMOTION:
|
||||
|
@ -1049,7 +1103,7 @@ sysEvent_t Sys_GetEvent()
|
|||
case SDL_FINGERDOWN:
|
||||
case SDL_FINGERUP:
|
||||
case SDL_FINGERMOTION:
|
||||
return res_none; // Avoid 'unknown event' spam when testing with touchpad
|
||||
continue; // Avoid 'unknown event' spam when testing with touchpad by skipping this
|
||||
|
||||
case SDL_MOUSEWHEEL:
|
||||
res.evType = SE_KEY;
|
||||
|
@ -1106,6 +1160,7 @@ sysEvent_t Sys_GetEvent()
|
|||
break;
|
||||
#endif
|
||||
}
|
||||
|
||||
res.evValue2 = ev.button.state == SDL_PRESSED ? 1 : 0;
|
||||
|
||||
return res;
|
||||
|
@ -1238,7 +1293,7 @@ sysEvent_t Sys_GetEvent()
|
|||
|
||||
default:
|
||||
common->Warning( "Sys_GetEvent(): Unknown joystick button number %i\n", ev.jbutton.button );
|
||||
return res_none;
|
||||
continue; // just try next event
|
||||
}
|
||||
res.evValue2 = ev.jbutton.state == SDL_PRESSED ? 1 : 0;
|
||||
|
||||
|
@ -1247,7 +1302,7 @@ sysEvent_t Sys_GetEvent()
|
|||
case SDL_JOYHATMOTION:
|
||||
// If this is not the first hat, ignore this event.
|
||||
if( ev.jhat.which != 0 )
|
||||
return res_none;
|
||||
continue; // just try next event
|
||||
|
||||
res.evType = SE_KEY;
|
||||
if( ev.jhat.value & SDL_HAT_UP )
|
||||
|
@ -1309,12 +1364,12 @@ sysEvent_t Sys_GetEvent()
|
|||
else if( previous_hat_state == SDL_HAT_CENTERED )
|
||||
{
|
||||
common->Warning( "Sys_GetEvent(): SDL_JOYHATMOTION: previous state SDL_HAT_CENTERED repeated!\n" );
|
||||
return res_none;
|
||||
continue; // just try next event
|
||||
}
|
||||
else
|
||||
{
|
||||
common->Warning( "Sys_GetEvent(): SDL_JOYHATMOTION: unknown previous hat state %i\n", previous_hat_state );
|
||||
return res_none;
|
||||
continue; // just try next event
|
||||
}
|
||||
|
||||
previous_hat_state = SDL_HAT_CENTERED;
|
||||
|
@ -1322,7 +1377,7 @@ sysEvent_t Sys_GetEvent()
|
|||
else
|
||||
{
|
||||
common->Warning( "Sys_GetEvent(): Unknown SDL_JOYHATMOTION value %i\n", ev.jhat.value );
|
||||
return res_none;
|
||||
continue; // just try next event
|
||||
}
|
||||
|
||||
return res;
|
||||
|
@ -1378,7 +1433,7 @@ sysEvent_t Sys_GetEvent()
|
|||
|
||||
default:
|
||||
common->Warning( "Sys_GetEvent(): Unknown joystick axis number %i\n", ev.jaxis.axis );
|
||||
return res_none;
|
||||
continue; // just try next event
|
||||
}
|
||||
|
||||
return res;
|
||||
|
@ -1386,7 +1441,7 @@ sysEvent_t Sys_GetEvent()
|
|||
|
||||
case SDL_QUIT:
|
||||
PushConsoleEvent( "quit" );
|
||||
return res_none;
|
||||
return no_more_events; // don't handle next event, just quit.
|
||||
|
||||
case SDL_USEREVENT:
|
||||
switch( ev.user.code )
|
||||
|
@ -1396,19 +1451,17 @@ sysEvent_t Sys_GetEvent()
|
|||
res.evPtrLength = ( intptr_t )ev.user.data1;
|
||||
res.evPtr = ev.user.data2;
|
||||
return res;
|
||||
|
||||
default:
|
||||
common->Warning( "Sys_GetEvent: unknown SDL_USEREVENT %u", ev.user.code );
|
||||
return res_none;
|
||||
common->Warning( "unknown user event %u", ev.user.code );
|
||||
}
|
||||
|
||||
continue; // just handle next event
|
||||
default:
|
||||
common->Warning( "Sys_GetEvent: unknown SDL event %u", ev.type );
|
||||
return res_none;
|
||||
common->Warning( "unknown event %u", ev.type );
|
||||
continue; // just handle next event
|
||||
}
|
||||
}
|
||||
|
||||
return res_none;
|
||||
return no_more_events;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1504,6 +1557,24 @@ int Sys_PollMouseInputEvents( int mouseEvents[MAX_MOUSE_EVENTS][2] )
|
|||
return numEvents;
|
||||
}
|
||||
|
||||
const char* Sys_GetKeyName( keyNum_t keynum )
|
||||
{
|
||||
// unfortunately, in SDL1.2 there is no way to get the keycode for a scancode, so this doesn't work there.
|
||||
// so this is SDL2-only.
|
||||
#if SDL_VERSION_ATLEAST(2, 0, 0)
|
||||
|
||||
SDL_Scancode scancode = KeyNumToSDLScanCode( ( int )keynum );
|
||||
SDL_Keycode keycode = SDL_GetKeyFromScancode( scancode );
|
||||
|
||||
const char* ret = SDL_GetKeyName(keycode);
|
||||
if(ret != NULL && ret[0] != '\0')
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
//=====================================================================================
|
||||
// Joystick Input Handling
|
||||
|
|
|
@ -101,7 +101,7 @@ enum sysEventType_t
|
|||
{
|
||||
SE_NONE, // evTime is still valid
|
||||
SE_KEY, // evValue is a key code, evValue2 is the down flag
|
||||
SE_CHAR, // evValue is an ascii char
|
||||
SE_CHAR, // evValue is an ascii char FIXME: not really ascii, supports umlauts...
|
||||
SE_MOUSE, // evValue and evValue2 are reletive signed x / y moves
|
||||
SE_MOUSE_ABSOLUTE, // evValue and evValue2 are absolute coordinates in the window's client area.
|
||||
SE_MOUSE_LEAVE, // evValue and evValue2 are meaninless, this indicates the mouse has left the client area.
|
||||
|
@ -272,17 +272,20 @@ enum keyNum_t
|
|||
K_KP_3,
|
||||
K_KP_0,
|
||||
K_KP_DOT,
|
||||
K_OEM_102 = 0x56, // from dinput: < > | on UK/German keyboards
|
||||
K_F11 = 0x57,
|
||||
K_F12 = 0x58,
|
||||
K_F13 = 0x64,
|
||||
K_F14 = 0x65,
|
||||
K_F15 = 0x66,
|
||||
K_KANA = 0x70,
|
||||
K_ABNT_C1 = 0x7E, // from dinput: ? on Portugese (Brazilian) keyboards
|
||||
K_CONVERT = 0x79,
|
||||
K_NOCONVERT = 0x7B,
|
||||
K_YEN = 0x7D,
|
||||
K_KP_EQUALS = 0x8D,
|
||||
K_CIRCUMFLEX = 0x90,
|
||||
K_CIRCUMFLEX = 0x90, // this is circumflex on japanese keyboards, ..
|
||||
K_PREVTRACK = 0x90, // from dinput: .. but also "Previous Track"
|
||||
K_AT = 0x91,
|
||||
K_COLON = 0x92,
|
||||
K_UNDERLINE = 0x93,
|
||||
|
@ -290,11 +293,21 @@ enum keyNum_t
|
|||
K_STOP = 0x95,
|
||||
K_AX = 0x96,
|
||||
K_UNLABELED = 0x97,
|
||||
K_NEXTTRACK = 0x99, // from dinput
|
||||
K_KP_ENTER = 0x9C,
|
||||
K_RCTRL = 0x9D,
|
||||
// some more from dinput:
|
||||
K_MUTE = 0xA0,
|
||||
K_CALCULATOR = 0xA1,
|
||||
K_PLAYPAUSE = 0xA2,
|
||||
K_MEDIASTOP = 0xA4,
|
||||
K_VOLUMEDOWN = 0xAE,
|
||||
K_VOLUMEUP = 0xB0,
|
||||
K_WEBHOME = 0xB2,
|
||||
|
||||
K_KP_COMMA = 0xB3,
|
||||
K_KP_SLASH = 0xB5,
|
||||
K_PRINTSCREEN = 0xB7,
|
||||
K_PRINTSCREEN = 0xB7, // aka SysRq
|
||||
K_RALT = 0xB8,
|
||||
K_PAUSE = 0xC5,
|
||||
K_HOME = 0xC7,
|
||||
|
@ -313,6 +326,18 @@ enum keyNum_t
|
|||
K_POWER = 0xDE,
|
||||
K_SLEEP = 0xDF,
|
||||
|
||||
// DG: dinput has some more buttons, let's support them as well
|
||||
K_WAKE = 0xE3,
|
||||
K_WEBSEARCH = 0xE5,
|
||||
K_WEBFAVORITES = 0xE6,
|
||||
K_WEBREFRESH = 0xE7,
|
||||
K_WEBSTOP = 0xE8,
|
||||
K_WEBFORWARD = 0xE9,
|
||||
K_WEBBACK = 0xEA,
|
||||
K_MYCOMPUTER = 0xEB,
|
||||
K_MAIL = 0xEC,
|
||||
K_MEDIASELECT = 0xED,
|
||||
|
||||
//------------------------
|
||||
// K_JOY codes must be contiguous, too
|
||||
//------------------------
|
||||
|
@ -538,6 +563,13 @@ int Sys_PollKeyboardInputEvents();
|
|||
int Sys_ReturnKeyboardInputEvent( const int n, int& ch, bool& state );
|
||||
void Sys_EndKeyboardInputEvents();
|
||||
|
||||
// DG: currently this is only used by idKeyInput::LocalizedKeyName() for !windows
|
||||
#ifndef _WIN32
|
||||
// return a human readable name for the key in the current keyboard layout (keynum is a directinput scancode)
|
||||
const char* Sys_GetKeyName( keyNum_t keynum );
|
||||
#endif
|
||||
// DG end
|
||||
|
||||
// mouse input polling
|
||||
static const int MAX_MOUSE_EVENTS = 256;
|
||||
int Sys_PollMouseInputEvents( int mouseEvents[MAX_MOUSE_EVENTS][2] );
|
||||
|
|
Loading…
Reference in a new issue