SDL_x11keyboard.c
Go to the documentation of this file.
/*
Simple DirectMedia Layer
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_X11
#include "SDL_x11video.h"
#include "../../events/SDL_keyboard_c.h"
#include "../../events/scancodes_darwin.h"
#include "../../events/scancodes_xfree86.h"
#include <X11/keysym.h>
#include <X11/XKBlib.h>
#include "imKStoUCS.h"
/* *INDENT-OFF* */
static const struct {
KeySym keysym;
SDL_Scancode scancode;
} KeySymToSDLScancode[] = {
{ XK_Return, SDL_SCANCODE_RETURN },
{ XK_Escape, SDL_SCANCODE_ESCAPE },
{ XK_BackSpace, SDL_SCANCODE_BACKSPACE },
{ XK_Tab, SDL_SCANCODE_TAB },
{ XK_Caps_Lock, SDL_SCANCODE_CAPSLOCK },
{ XK_F1, SDL_SCANCODE_F1 },
{ XK_F2, SDL_SCANCODE_F2 },
{ XK_F3, SDL_SCANCODE_F3 },
{ XK_F4, SDL_SCANCODE_F4 },
{ XK_F5, SDL_SCANCODE_F5 },
{ XK_F6, SDL_SCANCODE_F6 },
{ XK_F7, SDL_SCANCODE_F7 },
{ XK_F8, SDL_SCANCODE_F8 },
{ XK_F9, SDL_SCANCODE_F9 },
{ XK_F10, SDL_SCANCODE_F10 },
{ XK_F11, SDL_SCANCODE_F11 },
{ XK_F12, SDL_SCANCODE_F12 },
{ XK_Print, SDL_SCANCODE_PRINTSCREEN },
{ XK_Scroll_Lock, SDL_SCANCODE_SCROLLLOCK },
{ XK_Pause, SDL_SCANCODE_PAUSE },
{ XK_Insert, SDL_SCANCODE_INSERT },
{ XK_Home, SDL_SCANCODE_HOME },
{ XK_Prior, SDL_SCANCODE_PAGEUP },
{ XK_Delete, SDL_SCANCODE_DELETE },
{ XK_End, SDL_SCANCODE_END },
{ XK_Next, SDL_SCANCODE_PAGEDOWN },
{ XK_Right, SDL_SCANCODE_RIGHT },
{ XK_Left, SDL_SCANCODE_LEFT },
{ XK_Down, SDL_SCANCODE_DOWN },
{ XK_Up, SDL_SCANCODE_UP },
{ XK_Num_Lock, SDL_SCANCODE_NUMLOCKCLEAR },
{ XK_KP_Divide, SDL_SCANCODE_KP_DIVIDE },
{ XK_KP_Multiply, SDL_SCANCODE_KP_MULTIPLY },
{ XK_KP_Subtract, SDL_SCANCODE_KP_MINUS },
{ XK_KP_Add, SDL_SCANCODE_KP_PLUS },
{ XK_KP_Enter, SDL_SCANCODE_KP_ENTER },
{ XK_KP_Delete, SDL_SCANCODE_KP_PERIOD },
{ XK_KP_End, SDL_SCANCODE_KP_1 },
{ XK_KP_Down, SDL_SCANCODE_KP_2 },
{ XK_KP_Next, SDL_SCANCODE_KP_3 },
{ XK_KP_Left, SDL_SCANCODE_KP_4 },
{ XK_KP_Begin, SDL_SCANCODE_KP_5 },
{ XK_KP_Right, SDL_SCANCODE_KP_6 },
{ XK_KP_Home, SDL_SCANCODE_KP_7 },
{ XK_KP_Up, SDL_SCANCODE_KP_8 },
{ XK_KP_Prior, SDL_SCANCODE_KP_9 },
{ XK_KP_Insert, SDL_SCANCODE_KP_0 },
{ XK_KP_Decimal, SDL_SCANCODE_KP_PERIOD },
{ XK_KP_1, SDL_SCANCODE_KP_1 },
{ XK_KP_2, SDL_SCANCODE_KP_2 },
{ XK_KP_3, SDL_SCANCODE_KP_3 },
{ XK_KP_4, SDL_SCANCODE_KP_4 },
{ XK_KP_5, SDL_SCANCODE_KP_5 },
{ XK_KP_6, SDL_SCANCODE_KP_6 },
{ XK_KP_7, SDL_SCANCODE_KP_7 },
{ XK_KP_8, SDL_SCANCODE_KP_8 },
{ XK_KP_9, SDL_SCANCODE_KP_9 },
{ XK_KP_0, SDL_SCANCODE_KP_0 },
{ XK_KP_Decimal, SDL_SCANCODE_KP_PERIOD },
{ XK_Hyper_R, SDL_SCANCODE_APPLICATION },
{ XK_KP_Equal, SDL_SCANCODE_KP_EQUALS },
{ XK_F13, SDL_SCANCODE_F13 },
{ XK_F14, SDL_SCANCODE_F14 },
{ XK_F15, SDL_SCANCODE_F15 },
{ XK_F16, SDL_SCANCODE_F16 },
{ XK_F17, SDL_SCANCODE_F17 },
{ XK_F18, SDL_SCANCODE_F18 },
{ XK_F19, SDL_SCANCODE_F19 },
{ XK_F20, SDL_SCANCODE_F20 },
{ XK_F21, SDL_SCANCODE_F21 },
{ XK_F22, SDL_SCANCODE_F22 },
{ XK_F23, SDL_SCANCODE_F23 },
{ XK_F24, SDL_SCANCODE_F24 },
{ XK_Execute, SDL_SCANCODE_EXECUTE },
{ XK_Help, SDL_SCANCODE_HELP },
{ XK_Menu, SDL_SCANCODE_MENU },
{ XK_Select, SDL_SCANCODE_SELECT },
{ XK_Cancel, SDL_SCANCODE_STOP },
{ XK_Redo, SDL_SCANCODE_AGAIN },
{ XK_Undo, SDL_SCANCODE_UNDO },
{ XK_Find, SDL_SCANCODE_FIND },
{ XK_KP_Separator, SDL_SCANCODE_KP_COMMA },
{ XK_Sys_Req, SDL_SCANCODE_SYSREQ },
{ XK_Control_L, SDL_SCANCODE_LCTRL },
{ XK_Shift_L, SDL_SCANCODE_LSHIFT },
{ XK_Alt_L, SDL_SCANCODE_LALT },
{ XK_Meta_L, SDL_SCANCODE_LGUI },
{ XK_Super_L, SDL_SCANCODE_LGUI },
{ XK_Control_R, SDL_SCANCODE_RCTRL },
{ XK_Shift_R, SDL_SCANCODE_RSHIFT },
{ XK_Alt_R, SDL_SCANCODE_RALT },
{ XK_Meta_R, SDL_SCANCODE_RGUI },
{ XK_Super_R, SDL_SCANCODE_RGUI },
{ XK_Mode_switch, SDL_SCANCODE_MODE },
};
static const struct
{
SDL_Scancode const *table;
int table_size;
} scancode_set[] = {
{ darwin_scancode_table, SDL_arraysize(darwin_scancode_table) },
{ xfree86_scancode_table, SDL_arraysize(xfree86_scancode_table) },
{ xfree86_scancode_table2, SDL_arraysize(xfree86_scancode_table2) },
};
/* *INDENT-OFF* */
/* This function only works for keyboards in US QWERTY layout */
static SDL_Scancode
X11_KeyCodeToSDLScancode(Display *display, KeyCode keycode)
{
KeySym keysym;
int i;
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
keysym = X11_XkbKeycodeToKeysym(display, keycode, 0, 0);
#else
keysym = X11_XKeycodeToKeysym(display, keycode, 0);
#endif
if (keysym == NoSymbol) {
return SDL_SCANCODE_UNKNOWN;
}
if (keysym >= XK_A && keysym <= XK_Z) {
return SDL_SCANCODE_A + (keysym - XK_A);
}
if (keysym >= XK_0 && keysym <= XK_9) {
return SDL_SCANCODE_0 + (keysym - XK_0);
}
for (i = 0; i < SDL_arraysize(KeySymToSDLScancode); ++i) {
if (keysym == KeySymToSDLScancode[i].keysym) {
return KeySymToSDLScancode[i].scancode;
}
}
return SDL_SCANCODE_UNKNOWN;
}
static Uint32
X11_KeyCodeToUcs4(Display *display, KeyCode keycode, unsigned char group)
{
KeySym keysym;
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
keysym = X11_XkbKeycodeToKeysym(display, keycode, group, 0);
#else
keysym = X11_XKeycodeToKeysym(display, keycode, 0);
#endif
if (keysym == NoSymbol) {
return 0;
}
return X11_KeySymToUcs4(keysym);
}
int
X11_InitKeyboard(_THIS)
{
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
int i = 0;
int j = 0;
int min_keycode, max_keycode;
struct {
SDL_Scancode scancode;
KeySym keysym;
int value;
} fingerprint[] = {
{ SDL_SCANCODE_HOME, XK_Home, 0 },
{ SDL_SCANCODE_PAGEUP, XK_Prior, 0 },
{ SDL_SCANCODE_UP, XK_Up, 0 },
{ SDL_SCANCODE_LEFT, XK_Left, 0 },
{ SDL_SCANCODE_DELETE, XK_Delete, 0 },
{ SDL_SCANCODE_KP_ENTER, XK_KP_Enter, 0 },
};
int best_distance;
int best_index;
int distance;
X11_XAutoRepeatOn(data->display);
/* Try to determine which scancodes are being used based on fingerprint */
best_distance = SDL_arraysize(fingerprint) + 1;
best_index = -1;
X11_XDisplayKeycodes(data->display, &min_keycode, &max_keycode);
for (i = 0; i < SDL_arraysize(fingerprint); ++i) {
fingerprint[i].value =
X11_XKeysymToKeycode(data->display, fingerprint[i].keysym) -
min_keycode;
}
for (i = 0; i < SDL_arraysize(scancode_set); ++i) {
/* Make sure the scancode set isn't too big */
if ((max_keycode - min_keycode + 1) <= scancode_set[i].table_size) {
continue;
}
distance = 0;
for (j = 0; j < SDL_arraysize(fingerprint); ++j) {
if (fingerprint[j].value < 0
|| fingerprint[j].value >= scancode_set[i].table_size) {
distance += 1;
} else if (scancode_set[i].table[fingerprint[j].value] != fingerprint[j].scancode) {
distance += 1;
}
}
if (distance < best_distance) {
best_distance = distance;
best_index = i;
}
}
if (best_index >= 0 && best_distance <= 2) {
#ifdef DEBUG_KEYBOARD
printf("Using scancode set %d, min_keycode = %d, max_keycode = %d, table_size = %d\n", best_index, min_keycode, max_keycode, scancode_set[best_index].table_size);
#endif
SDL_memcpy(&data->key_layout[min_keycode], scancode_set[best_index].table,
sizeof(SDL_Scancode) * scancode_set[best_index].table_size);
} else {
SDL_Keycode keymap[SDL_NUM_SCANCODES];
printf
("Keyboard layout unknown, please send the following to the SDL mailing list (sdl@libsdl.org):\n");
/* Determine key_layout - only works on US QWERTY layout */
SDL_GetDefaultKeymap(keymap);
for (i = min_keycode; i <= max_keycode; ++i) {
KeySym sym;
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
sym = X11_XkbKeycodeToKeysym(data->display, i, 0, 0);
#else
sym = X11_XKeycodeToKeysym(data->display, i, 0);
#endif
if (sym != NoSymbol) {
SDL_Scancode scancode;
printf("code = %d, sym = 0x%X (%s) ", i - min_keycode,
(unsigned int) sym, X11_XKeysymToString(sym));
scancode = X11_KeyCodeToSDLScancode(data->display, i);
data->key_layout[i] = scancode;
if (scancode == SDL_SCANCODE_UNKNOWN) {
printf("scancode not found\n");
} else {
printf("scancode = %d (%s)\n", scancode, SDL_GetScancodeName(scancode));
}
}
}
}
X11_UpdateKeymap(_this);
SDL_SetScancodeName(SDL_SCANCODE_APPLICATION, "Menu");
#ifdef SDL_USE_IBUS
SDL_IBus_Init();
#endif
return 0;
}
void
X11_UpdateKeymap(_THIS)
{
SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
int i;
SDL_Scancode scancode;
SDL_Keycode keymap[SDL_NUM_SCANCODES];
unsigned char group = 0;
SDL_GetDefaultKeymap(keymap);
#if SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM
{
XkbStateRec state;
if (X11_XkbGetState(data->display, XkbUseCoreKbd, &state) == Success) {
group = state.group;
}
}
#endif
for (i = 0; i < SDL_arraysize(data->key_layout); i++) {
Uint32 key;
/* Make sure this is a valid scancode */
scancode = data->key_layout[i];
if (scancode == SDL_SCANCODE_UNKNOWN) {
continue;
}
/* See if there is a UCS keycode for this scancode */
key = X11_KeyCodeToUcs4(data->display, (KeyCode)i, group);
if (key) {
keymap[scancode] = key;
} else {
SDL_Scancode keyScancode = X11_KeyCodeToSDLScancode(data->display, (KeyCode)i);
switch (keyScancode) {
case SDL_SCANCODE_RETURN:
keymap[scancode] = SDLK_RETURN;
break;
case SDL_SCANCODE_ESCAPE:
keymap[scancode] = SDLK_ESCAPE;
break;
case SDL_SCANCODE_BACKSPACE:
keymap[scancode] = SDLK_BACKSPACE;
break;
case SDL_SCANCODE_TAB:
keymap[scancode] = SDLK_TAB;
break;
case SDL_SCANCODE_DELETE:
keymap[scancode] = SDLK_DELETE;
break;
default:
keymap[scancode] = SDL_SCANCODE_TO_KEYCODE(keyScancode);
break;
}
}
}
SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
}
void
X11_QuitKeyboard(_THIS)
{
#ifdef SDL_USE_IBUS
SDL_IBus_Quit();
#endif
}
void
X11_StartTextInput(_THIS)
{
}
void
X11_StopTextInput(_THIS)
{
#ifdef SDL_USE_IBUS
SDL_IBus_Reset();
#endif
}
void
X11_SetTextInputRect(_THIS, SDL_Rect *rect)
{
if (!rect) {
SDL_InvalidParamError("rect");
return;
}
#ifdef SDL_USE_IBUS
SDL_IBus_UpdateTextRect(rect);
#endif
}
#endif /* SDL_VIDEO_DRIVER_X11 */
/* vi: set ts=4 sw=4 expandtab: */
SDL_GetDefaultKeymap
void SDL_GetDefaultKeymap(SDL_Keycode *keymap)
Definition: SDL_keyboard.c:580
SDL_SCANCODE_F17
Definition: SDL_scancode.h:219
group
GLboolean GLuint group
Definition: SDL_opengl_glext.h:4996
SDL_SCANCODE_RETURN
Definition: SDL_scancode.h:92
SDLK_DELETE
Definition: SDL_keycode.h:145
SDL_SCANCODE_F13
Definition: SDL_scancode.h:215
SDL_SCANCODE_F10
Definition: SDL_scancode.h:162
SDL_SCANCODE_KP_ENTER
Definition: SDL_scancode.h:187
SDL_SCANCODE_KP_PERIOD
Definition: SDL_scancode.h:198
SDLK_BACKSPACE
Definition: SDL_keycode.h:53
SDL_SCANCODE_UNDO
Definition: SDL_scancode.h:233
table
GLenum GLsizei GLenum GLenum const void * table
Definition: SDL_opengl_glext.h:3118
SDL_SCANCODE_HELP
Definition: SDL_scancode.h:228
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:155
SDL_SCANCODE_LEFT
Definition: SDL_scancode.h:177
SDL_SCANCODE_SELECT
Definition: SDL_scancode.h:230
X11_QuitKeyboard
void X11_QuitKeyboard(_THIS)
X11_SetTextInputRect
void X11_SetTextInputRect(_THIS, SDL_Rect *rect)
xfree86_scancode_table
static const SDL_Scancode xfree86_scancode_table[]
Definition: scancodes_xfree86.h:28
SDL_SCANCODE_AGAIN
Definition: SDL_scancode.h:232
SDL_SCANCODE_F7
Definition: SDL_scancode.h:159
rect
SDL_Rect rect
Definition: testrelative.c:27
SDL_SCANCODE_F15
Definition: SDL_scancode.h:217
SDL_VideoData::display
struct wl_display * display
Definition: SDL_waylandvideo.h:40
SDL_SCANCODE_KP_8
Definition: SDL_scancode.h:195
SDL_SCANCODE_UP
Definition: SDL_scancode.h:179
SDL_SCANCODE_SCROLLLOCK
Definition: SDL_scancode.h:167
state
struct xkb_state * state
Definition: SDL_waylandsym.h:94
SDL_VideoDevice::driverdata
void * driverdata
Definition: SDL_sysvideo.h:332
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: SDL_opengl.h:1967
SDL_SCANCODE_RIGHT
Definition: SDL_scancode.h:176
SDLK_TAB
Definition: SDL_keycode.h:54
X11_StartTextInput
void X11_StartTextInput(_THIS)
SDL_SCANCODE_PAGEDOWN
Definition: SDL_scancode.h:175
SDL_SCANCODE_F3
Definition: SDL_scancode.h:155
xfree86_scancode_table2
static const SDL_Scancode xfree86_scancode_table2[]
Definition: scancodes_xfree86.h:179
SDL_SCANCODE_FIND
Definition: SDL_scancode.h:237
SDL_SCANCODE_KP_5
Definition: SDL_scancode.h:192
SDL_InvalidParamError
#define SDL_InvalidParamError(param)
Definition: SDL_error.h:54
SDL_SCANCODE_KP_EQUALS
Definition: SDL_scancode.h:214
SDL_Keycode
Sint32 SDL_Keycode
The SDL virtual key representation.
Definition: SDL_keycode.h:42
SDL_SCANCODE_TAB
Definition: SDL_scancode.h:95
SDLK_RETURN
Definition: SDL_keycode.h:51
SDL_SCANCODE_F9
Definition: SDL_scancode.h:161
SDL_SCANCODE_CAPSLOCK
Definition: SDL_scancode.h:151
SDL_SCANCODE_EXECUTE
Definition: SDL_scancode.h:227
SDL_SCANCODE_F18
Definition: SDL_scancode.h:220
SDL_SCANCODE_F16
Definition: SDL_scancode.h:218
SDL_SCANCODE_KP_6
Definition: SDL_scancode.h:193
distance
GLsizei GLsizei GLfloat distance
Definition: SDL_opengl_glext.h:9200
SDL_SCANCODE_F5
Definition: SDL_scancode.h:157
SDL_SCANCODE_LALT
Definition: SDL_scancode.h:330
_this
static SDL_VideoDevice * _this
Definition: SDL_video.c:114
SDL_SetKeymap
void SDL_SetKeymap(int start, SDL_Keycode *keys, int length)
Definition: SDL_keyboard.c:586
SDL_SCANCODE_STOP
Definition: SDL_scancode.h:231
SDL_SCANCODE_KP_1
Definition: SDL_scancode.h:188
darwin_scancode_table
static const SDL_Scancode darwin_scancode_table[]
Definition: scancodes_darwin.h:29
SDL_SCANCODE_F21
Definition: SDL_scancode.h:223
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:393
SDL_SCANCODE_F24
Definition: SDL_scancode.h:226
SDL_SCANCODE_A
Definition: SDL_scancode.h:54
SDL_SCANCODE_F14
Definition: SDL_scancode.h:216
SDL_SCANCODE_ESCAPE
Definition: SDL_scancode.h:93
SDL_SCANCODE_PAUSE
Definition: SDL_scancode.h:168
SDL_SCANCODE_KP_MULTIPLY
Definition: SDL_scancode.h:184
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
SDL_SCANCODE_0
Definition: SDL_scancode.h:90
SDL_SCANCODE_KP_9
Definition: SDL_scancode.h:196
_THIS
#define _THIS
Definition: SDL_alsa_audio.h:31
SDL_SCANCODE_F20
Definition: SDL_scancode.h:222
X11_KeySymToUcs4
unsigned int X11_KeySymToUcs4(KeySym keysym)
SDL_SCANCODE_KP_7
Definition: SDL_scancode.h:194
SDL_SCANCODE_SYSREQ
Definition: SDL_scancode.h:269
SDL_SCANCODE_TO_KEYCODE
#define SDL_SCANCODE_TO_KEYCODE(X)
Definition: SDL_keycode.h:45
SDL_VideoData::key_layout
void * key_layout
Definition: SDL_cocoavideo.h:51
SDL_SCANCODE_KP_PLUS
Definition: SDL_scancode.h:186
SDL_SCANCODE_KP_4
Definition: SDL_scancode.h:191
SDL_SCANCODE_KP_0
Definition: SDL_scancode.h:197
SDL_SCANCODE_F11
Definition: SDL_scancode.h:163
SDL_SCANCODE_LCTRL
Definition: SDL_scancode.h:328
X11_UpdateKeymap
void X11_UpdateKeymap(_THIS)
SDL_SCANCODE_KP_DIVIDE
Definition: SDL_scancode.h:183
SDL_SetScancodeName
void SDL_SetScancodeName(SDL_Scancode scancode, const char *name)
Definition: SDL_keyboard.c:598
SDL_SCANCODE_LSHIFT
Definition: SDL_scancode.h:329
SDL_SCANCODE_BACKSPACE
Definition: SDL_scancode.h:94
imKStoUCS.h
i
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:42
SDL_SCANCODE_UNKNOWN
Definition: SDL_scancode.h:45
X11_StopTextInput
void X11_StopTextInput(_THIS)
SDL_SCANCODE_KP_COMMA
Definition: SDL_scancode.h:245
SDL_SCANCODE_NUMLOCKCLEAR
Definition: SDL_scancode.h:181
SDL_GetScancodeName
#define SDL_GetScancodeName
Definition: SDL_dynapi_overrides.h:228
X11_InitKeyboard
int X11_InitKeyboard(_THIS)
SDL_SCANCODE_DELETE
Definition: SDL_scancode.h:173
SDL_SCANCODE_F8
Definition: SDL_scancode.h:160
SDL_SCANCODE_LGUI
Definition: SDL_scancode.h:331
SDL_SCANCODE_F23
Definition: SDL_scancode.h:225
SDL_NUM_SCANCODES
Definition: SDL_scancode.h:395
SDL_SCANCODE_RGUI
Definition: SDL_scancode.h:335
SDL_SCANCODE_APPLICATION
Definition: SDL_scancode.h:210
SDL_SCANCODE_F2
Definition: SDL_scancode.h:154
SDL_x11video.h
SDL_VideoData
Definition: SDL_androidvideo.h:35
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
SDL_SCANCODE_PAGEUP
Definition: SDL_scancode.h:172
SDL_SCANCODE_INSERT
Definition: SDL_scancode.h:169
SDL_SCANCODE_DOWN
Definition: SDL_scancode.h:178
SDL_SCANCODE_F1
Definition: SDL_scancode.h:153
SDL_SCANCODE_F6
Definition: SDL_scancode.h:158
SDL_SCANCODE_END
Definition: SDL_scancode.h:174
SDL_SCANCODE_MODE
Definition: SDL_scancode.h:337
SDL_SCANCODE_F12
Definition: SDL_scancode.h:164
SDLK_ESCAPE
Definition: SDL_keycode.h:52
SDL_SCANCODE_F19
Definition: SDL_scancode.h:221
SDL_SCANCODE_KP_3
Definition: SDL_scancode.h:190
SDL_SCANCODE_F4
Definition: SDL_scancode.h:156
SDL_SCANCODE_KP_2
Definition: SDL_scancode.h:189
SDL_SCANCODE_F22
Definition: SDL_scancode.h:224
SDL_Scancode
SDL_Scancode
The SDL keyboard scancode representation.
Definition: SDL_scancode.h:43
SDL_SCANCODE_RALT
Definition: SDL_scancode.h:334
SDL_SCANCODE_PRINTSCREEN
Definition: SDL_scancode.h:166
SDL_Rect
A rectangle, with the origin at the upper left.
Definition: SDL_rect.h:64
SDL_SCANCODE_RSHIFT
Definition: SDL_scancode.h:333
SDL_SCANCODE_RCTRL
Definition: SDL_scancode.h:332
SDL_SCANCODE_KP_MINUS
Definition: SDL_scancode.h:185
j
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int int in j)
Definition: SDL_x11sym.h:42
SDL_SCANCODE_MENU
Definition: SDL_scancode.h:229
SDL_SCANCODE_HOME
Definition: SDL_scancode.h:171