mirror of
https://github.com/love2d/megasource.git
synced 2026-08-19 20:20:11 +02:00
Updated SDL2 to the latest Mercurial revision.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
Simple DirectMedia Layer
|
||||
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
|
||||
Copyright (C) 1997-2015 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
|
||||
@@ -662,6 +662,8 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
|
||||
{
|
||||
SDL_Keyboard *keyboard = &SDL_keyboard;
|
||||
int posted;
|
||||
SDL_Keymod modifier;
|
||||
SDL_Keycode keycode;
|
||||
Uint16 modstate;
|
||||
Uint32 type;
|
||||
Uint8 repeat;
|
||||
@@ -673,82 +675,6 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
|
||||
printf("The '%s' key has been %s\n", SDL_GetScancodeName(scancode),
|
||||
state == SDL_PRESSED ? "pressed" : "released");
|
||||
#endif
|
||||
if (state == SDL_PRESSED) {
|
||||
modstate = keyboard->modstate;
|
||||
switch (scancode) {
|
||||
case SDL_SCANCODE_NUMLOCKCLEAR:
|
||||
keyboard->modstate ^= KMOD_NUM;
|
||||
break;
|
||||
case SDL_SCANCODE_CAPSLOCK:
|
||||
keyboard->modstate ^= KMOD_CAPS;
|
||||
break;
|
||||
case SDL_SCANCODE_LCTRL:
|
||||
keyboard->modstate |= KMOD_LCTRL;
|
||||
break;
|
||||
case SDL_SCANCODE_RCTRL:
|
||||
keyboard->modstate |= KMOD_RCTRL;
|
||||
break;
|
||||
case SDL_SCANCODE_LSHIFT:
|
||||
keyboard->modstate |= KMOD_LSHIFT;
|
||||
break;
|
||||
case SDL_SCANCODE_RSHIFT:
|
||||
keyboard->modstate |= KMOD_RSHIFT;
|
||||
break;
|
||||
case SDL_SCANCODE_LALT:
|
||||
keyboard->modstate |= KMOD_LALT;
|
||||
break;
|
||||
case SDL_SCANCODE_RALT:
|
||||
keyboard->modstate |= KMOD_RALT;
|
||||
break;
|
||||
case SDL_SCANCODE_LGUI:
|
||||
keyboard->modstate |= KMOD_LGUI;
|
||||
break;
|
||||
case SDL_SCANCODE_RGUI:
|
||||
keyboard->modstate |= KMOD_RGUI;
|
||||
break;
|
||||
case SDL_SCANCODE_MODE:
|
||||
keyboard->modstate |= KMOD_MODE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
switch (scancode) {
|
||||
case SDL_SCANCODE_NUMLOCKCLEAR:
|
||||
case SDL_SCANCODE_CAPSLOCK:
|
||||
break;
|
||||
case SDL_SCANCODE_LCTRL:
|
||||
keyboard->modstate &= ~KMOD_LCTRL;
|
||||
break;
|
||||
case SDL_SCANCODE_RCTRL:
|
||||
keyboard->modstate &= ~KMOD_RCTRL;
|
||||
break;
|
||||
case SDL_SCANCODE_LSHIFT:
|
||||
keyboard->modstate &= ~KMOD_LSHIFT;
|
||||
break;
|
||||
case SDL_SCANCODE_RSHIFT:
|
||||
keyboard->modstate &= ~KMOD_RSHIFT;
|
||||
break;
|
||||
case SDL_SCANCODE_LALT:
|
||||
keyboard->modstate &= ~KMOD_LALT;
|
||||
break;
|
||||
case SDL_SCANCODE_RALT:
|
||||
keyboard->modstate &= ~KMOD_RALT;
|
||||
break;
|
||||
case SDL_SCANCODE_LGUI:
|
||||
keyboard->modstate &= ~KMOD_LGUI;
|
||||
break;
|
||||
case SDL_SCANCODE_RGUI:
|
||||
keyboard->modstate &= ~KMOD_RGUI;
|
||||
break;
|
||||
case SDL_SCANCODE_MODE:
|
||||
keyboard->modstate &= ~KMOD_MODE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
modstate = keyboard->modstate;
|
||||
}
|
||||
|
||||
/* Figure out what type of event this is */
|
||||
switch (state) {
|
||||
@@ -775,6 +701,59 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
|
||||
/* 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) {
|
||||
modstate = keyboard->modstate;
|
||||
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;
|
||||
modstate = keyboard->modstate;
|
||||
}
|
||||
|
||||
/* Post the event, if desired */
|
||||
posted = 0;
|
||||
if (SDL_GetEventState(type) == SDL_ENABLE) {
|
||||
@@ -783,7 +762,7 @@ SDL_SendKeyboardKey(Uint8 state, SDL_Scancode scancode)
|
||||
event.key.state = state;
|
||||
event.key.repeat = repeat;
|
||||
event.key.keysym.scancode = scancode;
|
||||
event.key.keysym.sym = keyboard->keymap[scancode];
|
||||
event.key.keysym.sym = keycode;
|
||||
event.key.keysym.mod = modstate;
|
||||
event.key.windowID = keyboard->focus ? keyboard->focus->id : 0;
|
||||
posted = (SDL_PushEvent(&event) > 0);
|
||||
|
||||
Reference in New Issue
Block a user