SDL_keyboard_c.h File Reference
`#include "../SDL_internal.h"`
`#include "SDL_keycode.h"`
`#include "SDL_events.h"`
Include dependency graph for SDL_keyboard_c.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

## Functions

int | SDL_KeyboardInit (void)
void | SDL_ResetKeyboard (void)
void | SDL_GetDefaultKeymap (SDL_Keycode *keymap)
void | SDL_SetKeymap (int start, SDL_Keycode *keys, int length)
void | SDL_SetScancodeName (SDL_Scancode scancode, const char *name)
void | SDL_SetKeyboardFocus (SDL_Window *window)
int | SDL_SendKeyboardKey (Uint8 state, SDL_Scancode scancode)
int | SDL_SendKeyboardText (const char *text)
int | SDL_SendEditingText (const char *text, int start, int end)
void | SDL_KeyboardQuit (void)
char * | SDL_UCS4ToUTF8 (Uint32 ch, char *dst)
void | SDL_ToggleModState (const SDL_Keymod modstate, const SDL_bool toggle)

## Function Documentation

## SDL_GetDefaultKeymap()

void SDL_GetDefaultKeymap | ( | SDL_Keycode * | keymap | ) |

Definition at line 588 of file SDL_keyboard.c.

References SDL_default_keymap, and SDL_memcpy.

{
SDL_memcpy(keymap, SDL_default_keymap, sizeof(SDL_default_keymap));
}
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:387
SDL_default_keymap
static const SDL_Keycode SDL_default_keymap[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:49

## SDL_KeyboardInit()

int SDL_KeyboardInit | ( | void |  | ) |

Definition at line 562 of file SDL_keyboard.c.

References SDL_Keyboard::keymap, SDL_default_keymap, SDL_keyboard, and SDL_memcpy.

Referenced by SDL_VideoInit().

{
SDL_Keyboard *keyboard = &SDL_keyboard;
/* Set the default keymap */
SDL_memcpy(keyboard->keymap, SDL_default_keymap, sizeof(SDL_default_keymap));
return (0);
}
SDL_Keyboard::keymap
SDL_Keycode keymap[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:44
SDL_Keyboard
Definition: SDL_keyboard.c:38
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:387
SDL_default_keymap
static const SDL_Keycode SDL_default_keymap[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:49
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47

## SDL_KeyboardQuit()

void SDL_KeyboardQuit | ( | void |  | ) |

Definition at line 832 of file SDL_keyboard.c.

Referenced by SDL_VideoQuit().

{
}

## SDL_ResetKeyboard()

void SDL_ResetKeyboard | ( | void |  | ) |

Definition at line 572 of file SDL_keyboard.c.

References SDL_Keyboard::keystate, SDL_keyboard, SDL_NUM_SCANCODES, SDL_PRESSED, SDL_RELEASED, and SDL_SendKeyboardKey().

Referenced by SDL_SetKeyboardFocus(), and SDL_ShowMessageBox().

{
SDL_Keyboard *keyboard = &SDL_keyboard;
SDL_Scancode scancode;
#ifdef DEBUG_KEYBOARD
printf("Resetting keyboard\n");
#endif
for (scancode = (SDL_Scancode) 0; scancode < SDL_NUM_SCANCODES; ++scancode) {
if (keyboard->keystate[scancode] == SDL_PRESSED) {
SDL_SendKeyboardKey(SDL_RELEASED, scancode);
}
}
}
SDL_Keyboard
Definition: SDL_keyboard.c:38
SDL_SendKeyboardKey
int SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
Definition: SDL_keyboard.c:679
SDL_NUM_SCANCODES
Definition: SDL_scancode.h:407
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47
SDL_PRESSED
#define SDL_PRESSED
Definition: SDL_events.h:50
SDL_Keyboard::keystate
Uint8 keystate[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:43
SDL_RELEASED
#define SDL_RELEASED
Definition: SDL_events.h:49
SDL_Scancode
SDL_Scancode
The SDL keyboard scancode representation.
Definition: SDL_scancode.h:43

## SDL_SendEditingText()

int SDL_SendEditingText | ( | const char * | text,
|  | int | start,
|  | int | end
| ) |  |

Definition at line 812 of file SDL_keyboard.c.

References SDL_Event::edit, SDL_Keyboard::focus, SDL_Window::id, SDL_arraysize, SDL_ENABLE, SDL_GetEventState, SDL_keyboard, SDL_PushEvent, SDL_TEXTEDITING, SDL_utf8strlcpy, and SDL_TextEditingEvent::text.

{
SDL_Keyboard *keyboard = &SDL_keyboard;
int posted;
/* Post the event, if desired */
posted = 0;
if (SDL_GetEventState(SDL_TEXTEDITING) == SDL_ENABLE) {
SDL_Event event;
event.edit.type = SDL_TEXTEDITING;
event.edit.windowID = keyboard->focus ? keyboard->focus->id : 0;
event.edit.start = start;
event.edit.length = length;
SDL_utf8strlcpy(event.edit.text, text, SDL_arraysize(event.edit.text));
posted = (SDL_PushEvent(&event) > 0);
}
return (posted);
}
SDL_utf8strlcpy
#define SDL_utf8strlcpy
Definition: SDL_dynapi_overrides.h:395
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
start
GLuint start
Definition: SDL_opengl.h:1571
SDL_Keyboard
Definition: SDL_keyboard.c:38
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
SDL_TextEditingEvent::text
char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]
Definition: SDL_events.h:211
SDL_Event::edit
SDL_TextEditingEvent edit
Definition: SDL_events.h:531
text
static char text[MAX_TEXT_LENGTH]
Definition: testime.c:47
SDL_Keyboard::focus
SDL_Window * focus
Definition: SDL_keyboard.c:41
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:76
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
SDL_Event
General event structure.
Definition: SDL_events.h:525
length
GLuint GLsizei GLsizei * length
Definition: SDL_opengl_glext.h:669
SDL_TEXTEDITING
Definition: SDL_events.h:95

## SDL_SendKeyboardKey()

int SDL_SendKeyboardKey | ( | Uint8 | state,
|  | SDL_Scancode | scancode
| ) |  |

Definition at line 679 of file SDL_keyboard.c.

References SDL_Keyboard::focus, SDL_Window::id, SDL_Keyboard::keymap, SDL_Keyboard::keystate, KMOD_CAPS, KMOD_LALT, KMOD_LCTRL, KMOD_LGUI, KMOD_LSHIFT, KMOD_MODE, KMOD_NONE, KMOD_NUM, KMOD_RALT, KMOD_RCTRL, KMOD_RGUI, KMOD_RSHIFT, SDL_Keyboard::modstate, SDL_ENABLE, SDL_GetEventState, SDL_GetScancodeName(), SDL_keyboard, SDL_KEYDOWN, SDL_KEYUP, SDL_PRESSED, SDL_PushEvent, SDL_RELEASED, SDLK_CAPSLOCK, SDLK_LALT, SDLK_LCTRL, SDLK_LGUI, SDLK_LSHIFT, SDLK_MODE, SDLK_NUMLOCKCLEAR, SDLK_RALT, SDLK_RCTRL, SDLK_RGUI, SDLK_RSHIFT, and state.

Referenced by SDL_BApp::_HandleKey(), handleKeyboardEvent(), SDL_ResetKeyboard(), and WINRT_OnBackButtonPressed().

{
SDL_Keyboard *keyboard = &SDL_keyboard;
int posted;
SDL_Keymod modifier;
SDL_Keycode keycode;
Uint32 type;
Uint8 repeat;
if (!scancode) {
return 0;
}
#ifdef DEBUG_KEYBOARD
printf("The '%s' key has been %s\n", SDL_GetScancodeName(scancode),
state == SDL_PRESSED ? "pressed" : "released");
#endif
/* Figure out what type of event this is */
switch (state) {
case SDL_PRESSED:
type = SDL_KEYDOWN;
break;
case SDL_RELEASED:
type = SDL_KEYUP;
break;
default:
/* Invalid state -- bail */
return 0;
}
/* Drop events that don't change state */
repeat = (state && keyboard->keystate[scancode]);
if (keyboard->keystate[scancode] == state && !repeat) {
#if 0
printf("Keyboard event didn't change state - dropped!\n");
#endif
return 0;
}
/* Update internal keyboard state */
keyboard->keystate[scancode] = state;
keycode = keyboard->keymap[scancode];
/* Update modifiers state if applicable */
switch (keycode) {
case SDLK_LCTRL:
modifier = KMOD_LCTRL;
break;
case SDLK_RCTRL:
modifier = KMOD_RCTRL;
break;
case SDLK_LSHIFT:
modifier = KMOD_LSHIFT;
break;
case SDLK_RSHIFT:
modifier = KMOD_RSHIFT;
break;
case SDLK_LALT:
modifier = KMOD_LALT;
break;
case SDLK_RALT:
modifier = KMOD_RALT;
break;
case SDLK_LGUI:
modifier = KMOD_LGUI;
break;
case SDLK_RGUI:
modifier = KMOD_RGUI;
break;
case SDLK_MODE:
modifier = KMOD_MODE;
break;
default:
modifier = KMOD_NONE;
break;
}
if (SDL_KEYDOWN == type) {
switch (keycode) {
case SDLK_NUMLOCKCLEAR:
keyboard->modstate ^= KMOD_NUM;
break;
case SDLK_CAPSLOCK:
keyboard->modstate ^= KMOD_CAPS;
break;
default:
keyboard->modstate |= modifier;
break;
}
} else {
keyboard->modstate &= ~modifier;
}
/* Post the event, if desired */
posted = 0;
if (SDL_GetEventState(type) == SDL_ENABLE) {
SDL_Event event;
event.key.type = type;
event.key.state = state;
event.key.repeat = repeat;
event.key.keysym.scancode = scancode;
event.key.keysym.sym = keycode;
event.key.keysym.mod = keyboard->modstate;
event.key.windowID = keyboard->focus ? keyboard->focus->id : 0;
posted = (SDL_PushEvent(&event) > 0);
}
return (posted);
}
SDLK_RGUI
Definition: SDL_keycode.h:283
SDL_KEYDOWN
Definition: SDL_events.h:93
KMOD_LCTRL
Definition: SDL_keycode.h:330
SDLK_RSHIFT
Definition: SDL_keycode.h:281
KMOD_RCTRL
Definition: SDL_keycode.h:331
KMOD_LSHIFT
Definition: SDL_keycode.h:328
state
struct xkb_state * state
Definition: SDL_waylandsym.h:113
SDLK_MODE
Definition: SDL_keycode.h:285
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDLK_LALT
Definition: SDL_keycode.h:278
SDL_Keyboard::keymap
SDL_Keycode keymap[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:44
SDL_Keyboard
Definition: SDL_keyboard.c:38
Uint32
uint32_t Uint32
Definition: SDL_stdinc.h:181
SDLK_CAPSLOCK
Definition: SDL_keycode.h:127
SDL_Keycode
Sint32 SDL_Keycode
The SDL virtual key representation.
Definition: SDL_keycode.h:45
KMOD_NONE
Definition: SDL_keycode.h:327
SDLK_RCTRL
Definition: SDL_keycode.h:280
KMOD_RGUI
Definition: SDL_keycode.h:335
SDL_Keyboard::modstate
Uint16 modstate
Definition: SDL_keyboard.c:42
SDLK_RALT
Definition: SDL_keycode.h:282
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
Uint8
uint8_t Uint8
Definition: SDL_stdinc.h:157
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
KMOD_CAPS
Definition: SDL_keycode.h:337
KMOD_MODE
Definition: SDL_keycode.h:338
SDL_KEYUP
Definition: SDL_events.h:94
KMOD_NUM
Definition: SDL_keycode.h:336
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
SDL_GetScancodeName
const char * SDL_GetScancodeName(SDL_Scancode scancode)
Get a human-readable name for a scancode.
Definition: SDL_keyboard.c:905
SDLK_LCTRL
Definition: SDL_keycode.h:276
SDL_Keymod
SDL_Keymod
Enumeration of valid key mods (possibly OR&#39;d together).
Definition: SDL_keycode.h:325
SDL_Keyboard::focus
SDL_Window * focus
Definition: SDL_keyboard.c:41
KMOD_LGUI
Definition: SDL_keycode.h:334
KMOD_LALT
Definition: SDL_keycode.h:332
SDLK_LSHIFT
Definition: SDL_keycode.h:277
SDLK_NUMLOCKCLEAR
Definition: SDL_keycode.h:156
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:76
KMOD_RALT
Definition: SDL_keycode.h:333
type
GLuint GLuint GLsizei GLenum type
Definition: SDL_opengl.h:1571
SDL_Event
General event structure.
Definition: SDL_events.h:525
SDL_PRESSED
#define SDL_PRESSED
Definition: SDL_events.h:50
SDL_Keyboard::keystate
Uint8 keystate[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:43
SDL_RELEASED
#define SDL_RELEASED
Definition: SDL_events.h:49
SDLK_LGUI
Definition: SDL_keycode.h:279
KMOD_RSHIFT
Definition: SDL_keycode.h:329

## SDL_SendKeyboardText()

int SDL_SendKeyboardText | ( | const char * | text | ) |

Definition at line 789 of file SDL_keyboard.c.

References SDL_Keyboard::focus, SDL_Window::id, SDL_arraysize, SDL_ENABLE, SDL_GetEventState, SDL_keyboard, SDL_PushEvent, SDL_TEXTINPUT, SDL_utf8strlcpy, SDL_TextInputEvent::text, and SDL_Event::text.

Referenced by SDL_BApp::_HandleKey().

{
SDL_Keyboard *keyboard = &SDL_keyboard;
int posted;
/* Don't post text events for unprintable characters */
if ((unsigned char)*text < ' ' || *text == 127) {
return 0;
}
/* Post the event, if desired */
posted = 0;
if (SDL_GetEventState(SDL_TEXTINPUT) == SDL_ENABLE) {
SDL_Event event;
event.text.type = SDL_TEXTINPUT;
event.text.windowID = keyboard->focus ? keyboard->focus->id : 0;
SDL_utf8strlcpy(event.text.text, text, SDL_arraysize(event.text.text));
posted = (SDL_PushEvent(&event) > 0);
}
return (posted);
}
SDL_utf8strlcpy
#define SDL_utf8strlcpy
Definition: SDL_dynapi_overrides.h:395
SDL_ENABLE
#define SDL_ENABLE
Definition: SDL_events.h:722
SDL_Keyboard
Definition: SDL_keyboard.c:38
SDL_Event::text
SDL_TextInputEvent text
Definition: SDL_events.h:532
SDL_TextInputEvent::text
char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]
Definition: SDL_events.h:226
SDL_GetEventState
#define SDL_GetEventState(type)
Definition: SDL_events.h:735
event
struct _cl_event * event
Definition: SDL_opengl_glext.h:2649
SDL_PushEvent
#define SDL_PushEvent
Definition: SDL_dynapi_overrides.h:125
text
static char text[MAX_TEXT_LENGTH]
Definition: testime.c:47
SDL_Keyboard::focus
SDL_Window * focus
Definition: SDL_keyboard.c:41
SDL_TEXTINPUT
Definition: SDL_events.h:96
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47
SDL_Window::id
Uint32 id
Definition: SDL_sysvideo.h:76
SDL_arraysize
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:93
SDL_Event
General event structure.
Definition: SDL_events.h:525

## SDL_SetKeyboardFocus()

void SDL_SetKeyboardFocus | ( | SDL_Window * | window | ) |

Definition at line 630 of file SDL_keyboard.c.

References SDL_Window::flags, SDL_Keyboard::focus, SDL_assert, SDL_CaptureMouse, SDL_EventState, SDL_FALSE, SDL_GetVideoDevice(), SDL_keyboard, SDL_QUERY, SDL_ResetKeyboard(), SDL_SendWindowEvent(), SDL_TEXTINPUT, SDL_WINDOW_MOUSE_CAPTURE, SDL_WINDOWEVENT_FOCUS_GAINED, SDL_WINDOWEVENT_FOCUS_LOST, SDL_VideoDevice::StartTextInput, and SDL_VideoDevice::StopTextInput.

Referenced by SDL_BApp::_HandleKeyboardFocus(), IsSDLWindowEventPending(), and SDL_DestroyWindow().

{
SDL_Keyboard *keyboard = &SDL_keyboard;
if (keyboard->focus && !window) {
/* We won't get anymore keyboard messages, so reset keyboard state */
SDL_ResetKeyboard();
}
/* See if the current window has lost focus */
if (keyboard->focus && keyboard->focus != window) {
/* new window shouldn't think it has mouse captured. */
SDL_assert(!window || !(window->flags & SDL_WINDOW_MOUSE_CAPTURE));
/* old window must lose an existing mouse capture. */
if (keyboard->focus->flags & SDL_WINDOW_MOUSE_CAPTURE) {
SDL_CaptureMouse(SDL_FALSE); /* drop the capture. */
SDL_assert(!(keyboard->focus->flags & SDL_WINDOW_MOUSE_CAPTURE));
}
SDL_SendWindowEvent(keyboard->focus, SDL_WINDOWEVENT_FOCUS_LOST,
0, 0);
/* Ensures IME compositions are committed */
if (SDL_EventState(SDL_TEXTINPUT, SDL_QUERY)) {
SDL_VideoDevice *video = SDL_GetVideoDevice();
if (video && video->StopTextInput) {
video->StopTextInput(video);
}
}
}
keyboard->focus = window;
if (keyboard->focus) {
SDL_SendWindowEvent(keyboard->focus, SDL_WINDOWEVENT_FOCUS_GAINED,
0, 0);
if (SDL_EventState(SDL_TEXTINPUT, SDL_QUERY)) {
SDL_VideoDevice *video = SDL_GetVideoDevice();
if (video && video->StartTextInput) {
video->StartTextInput(video);
}
}
}
}
SDL_FALSE
Definition: SDL_stdinc.h:141
SDL_VideoDevice::StartTextInput
void(* StartTextInput)(_THIS)
Definition: SDL_sysvideo.h:286
SDL_SendWindowEvent
int SDL_SendWindowEvent(SDL_Window *window, Uint8 windowevent, int data1, int data2)
Definition: SDL_windowevents.c:88
SDL_Keyboard
Definition: SDL_keyboard.c:38
SDL_WINDOWEVENT_FOCUS_GAINED
Definition: SDL_video.h:165
SDL_WINDOW_MOUSE_CAPTURE
Definition: SDL_video.h:116
SDL_WINDOWEVENT_FOCUS_LOST
Definition: SDL_video.h:166
SDL_VideoDevice::StopTextInput
void(* StopTextInput)(_THIS)
Definition: SDL_sysvideo.h:287
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:169
SDL_Keyboard::focus
SDL_Window * focus
Definition: SDL_keyboard.c:41
SDL_TEXTINPUT
Definition: SDL_events.h:96
window
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
SDL_EventState
#define SDL_EventState
Definition: SDL_dynapi_overrides.h:131
SDL_ResetKeyboard
void SDL_ResetKeyboard(void)
Definition: SDL_keyboard.c:572
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47
SDL_CaptureMouse
#define SDL_CaptureMouse
Definition: SDL_dynapi_overrides.h:584
SDL_VideoDevice
Definition: SDL_sysvideo.h:147
SDL_GetVideoDevice
SDL_VideoDevice * SDL_GetVideoDevice(void)
Definition: SDL_video.c:586
SDL_QUERY
#define SDL_QUERY
Definition: SDL_events.h:719
SDL_Window::flags
Uint32 flags
Definition: SDL_sysvideo.h:83

## SDL_SetKeymap()

void SDL_SetKeymap | ( | int | start,
|  | SDL_Keycode * | keys,
|  | int | length
| ) |  |

Definition at line 594 of file SDL_keyboard.c.

References SDL_Keyboard::keymap, SDL_keyboard, SDL_memcpy, SDL_NUM_SCANCODES, SDL_SCANCODE_0, SDL_SCANCODE_1, SDL_SCANCODE_9, SDLK_0, and SDLK_1.

{
SDL_Keyboard *keyboard = &SDL_keyboard;
SDL_Scancode scancode;
if (start < 0 || start + length > SDL_NUM_SCANCODES) {
return;
}
SDL_memcpy(&keyboard->keymap[start], keys, sizeof(*keys) * length);
/* The number key scancodes always map to the number key keycodes.
* On AZERTY layouts these technically are symbols, but users (and games)
* always think of them and view them in UI as number keys.
*/
keyboard->keymap[SDL_SCANCODE_0] = SDLK_0;
for (scancode = SDL_SCANCODE_1; scancode <= SDL_SCANCODE_9; ++scancode) {
keyboard->keymap[scancode] = SDLK_1 + (scancode - SDL_SCANCODE_1);
}
}
SDLK_0
Definition: SDL_keycode.h:74
start
GLuint start
Definition: SDL_opengl.h:1571
SDL_Keyboard::keymap
SDL_Keycode keymap[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:44
SDL_Keyboard
Definition: SDL_keyboard.c:38
SDL_SCANCODE_9
Definition: SDL_scancode.h:89
SDLK_1
Definition: SDL_keycode.h:75
SDL_memcpy
#define SDL_memcpy
Definition: SDL_dynapi_overrides.h:387
SDL_SCANCODE_0
Definition: SDL_scancode.h:90
SDL_NUM_SCANCODES
Definition: SDL_scancode.h:407
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47
SDL_SCANCODE_1
Definition: SDL_scancode.h:81
length
GLuint GLsizei GLsizei * length
Definition: SDL_opengl_glext.h:669
SDL_Scancode
SDL_Scancode
The SDL keyboard scancode representation.
Definition: SDL_scancode.h:43

## SDL_SetScancodeName()

void SDL_SetScancodeName | ( | SDL_Scancode | scancode,
|  | const char * | name
| ) |  |

Definition at line 616 of file SDL_keyboard.c.

References SDL_scancode_names.

{
SDL_scancode_names[scancode] = name;
}
name
GLuint const GLchar * name
Definition: SDL_opengl_glext.h:660
SDL_scancode_names
static const char * SDL_scancode_names[SDL_NUM_SCANCODES]
Definition: SDL_keyboard.c:282

## SDL_ToggleModState()

void SDL_ToggleModState | ( | const SDL_Keymod | modstate,
|  | const SDL_bool | toggle
| ) |  |

Definition at line 865 of file SDL_keyboard.c.

References SDL_Keyboard::modstate, and SDL_keyboard.

{
SDL_Keyboard *keyboard = &SDL_keyboard;
if (toggle) {
keyboard->modstate |= modstate;
} else {
keyboard->modstate &= ~modstate;
}
}
SDL_Keyboard
Definition: SDL_keyboard.c:38
SDL_Keyboard::modstate
Uint16 modstate
Definition: SDL_keyboard.c:42
SDL_keyboard
static SDL_Keyboard SDL_keyboard
Definition: SDL_keyboard.c:47

## SDL_UCS4ToUTF8()

char* SDL_UCS4ToUTF8 | ( | Uint32 | ch,
|  | char * | dst
| ) |  |

Definition at line 520 of file SDL_keyboard.c.

Referenced by SDL_GetKeyName().

{
Uint8 *p = (Uint8 *) dst;
if (ch <= 0x7F) {
*p = (Uint8) ch;
++dst;
} else if (ch <= 0x7FF) {
p[0] = 0xC0 | (Uint8) ((ch >> 6) & 0x1F);
p[1] = 0x80 | (Uint8) (ch & 0x3F);
dst += 2;
} else if (ch <= 0xFFFF) {
p[0] = 0xE0 | (Uint8) ((ch >> 12) & 0x0F);
p[1] = 0x80 | (Uint8) ((ch >> 6) & 0x3F);
p[2] = 0x80 | (Uint8) (ch & 0x3F);
dst += 3;
} else if (ch <= 0x1FFFFF) {
p[0] = 0xF0 | (Uint8) ((ch >> 18) & 0x07);
p[1] = 0x80 | (Uint8) ((ch >> 12) & 0x3F);
p[2] = 0x80 | (Uint8) ((ch >> 6) & 0x3F);
p[3] = 0x80 | (Uint8) (ch & 0x3F);
dst += 4;
} else if (ch <= 0x3FFFFFF) {
p[0] = 0xF8 | (Uint8) ((ch >> 24) & 0x03);
p[1] = 0x80 | (Uint8) ((ch >> 18) & 0x3F);
p[2] = 0x80 | (Uint8) ((ch >> 12) & 0x3F);
p[3] = 0x80 | (Uint8) ((ch >> 6) & 0x3F);
p[4] = 0x80 | (Uint8) (ch & 0x3F);
dst += 5;
} else {
p[0] = 0xFC | (Uint8) ((ch >> 30) & 0x01);
p[1] = 0x80 | (Uint8) ((ch >> 24) & 0x3F);
p[2] = 0x80 | (Uint8) ((ch >> 18) & 0x3F);
p[3] = 0x80 | (Uint8) ((ch >> 12) & 0x3F);
p[4] = 0x80 | (Uint8) ((ch >> 6) & 0x3F);
p[5] = 0x80 | (Uint8) (ch & 0x3F);
dst += 6;
}
return dst;
}
dst
GLenum GLenum dst
Definition: SDL_opengl_glext.h:1737
p
GLfloat GLfloat p
Definition: SDL_opengl_glext.h:11090
Uint8
uint8_t Uint8
Definition: SDL_stdinc.h:157