mirror of https://github.com/OpenTTD/OpenTTD
Change: [SDL2] Add an "unprintable" flag to struct VkMapping
SDL_Keysym::sym is not suitable for checking whether the character is printable or notpull/7827/head
parent
d41378c00a
commit
46f7c6a641
|
@ -358,40 +358,43 @@ struct VkMapping {
|
||||||
SDL_Keycode vk_from;
|
SDL_Keycode vk_from;
|
||||||
byte vk_count;
|
byte vk_count;
|
||||||
byte map_to;
|
byte map_to;
|
||||||
|
bool unprintable;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define AS(x, z) {x, 0, z}
|
#define AS(x, z) {x, 0, z, false}
|
||||||
#define AM(x, y, z, w) {x, (byte)(y - x), z}
|
#define AM(x, y, z, w) {x, (byte)(y - x), z, false}
|
||||||
|
#define AS_UP(x, z) {x, 0, z, true}
|
||||||
|
#define AM_UP(x, y, z, w) {x, (byte)(y - x), z, true}
|
||||||
|
|
||||||
static const VkMapping _vk_mapping[] = {
|
static const VkMapping _vk_mapping[] = {
|
||||||
/* Pageup stuff + up/down */
|
/* Pageup stuff + up/down */
|
||||||
AS(SDLK_PAGEUP, WKC_PAGEUP),
|
AS_UP(SDLK_PAGEUP, WKC_PAGEUP),
|
||||||
AS(SDLK_PAGEDOWN, WKC_PAGEDOWN),
|
AS_UP(SDLK_PAGEDOWN, WKC_PAGEDOWN),
|
||||||
AS(SDLK_UP, WKC_UP),
|
AS_UP(SDLK_UP, WKC_UP),
|
||||||
AS(SDLK_DOWN, WKC_DOWN),
|
AS_UP(SDLK_DOWN, WKC_DOWN),
|
||||||
AS(SDLK_LEFT, WKC_LEFT),
|
AS_UP(SDLK_LEFT, WKC_LEFT),
|
||||||
AS(SDLK_RIGHT, WKC_RIGHT),
|
AS_UP(SDLK_RIGHT, WKC_RIGHT),
|
||||||
|
|
||||||
AS(SDLK_HOME, WKC_HOME),
|
AS_UP(SDLK_HOME, WKC_HOME),
|
||||||
AS(SDLK_END, WKC_END),
|
AS_UP(SDLK_END, WKC_END),
|
||||||
|
|
||||||
AS(SDLK_INSERT, WKC_INSERT),
|
AS_UP(SDLK_INSERT, WKC_INSERT),
|
||||||
AS(SDLK_DELETE, WKC_DELETE),
|
AS_UP(SDLK_DELETE, WKC_DELETE),
|
||||||
|
|
||||||
/* Map letters & digits */
|
/* Map letters & digits */
|
||||||
AM(SDLK_a, SDLK_z, 'A', 'Z'),
|
AM(SDLK_a, SDLK_z, 'A', 'Z'),
|
||||||
AM(SDLK_0, SDLK_9, '0', '9'),
|
AM(SDLK_0, SDLK_9, '0', '9'),
|
||||||
|
|
||||||
AS(SDLK_ESCAPE, WKC_ESC),
|
AS_UP(SDLK_ESCAPE, WKC_ESC),
|
||||||
AS(SDLK_PAUSE, WKC_PAUSE),
|
AS_UP(SDLK_PAUSE, WKC_PAUSE),
|
||||||
AS(SDLK_BACKSPACE, WKC_BACKSPACE),
|
AS_UP(SDLK_BACKSPACE, WKC_BACKSPACE),
|
||||||
|
|
||||||
AS(SDLK_SPACE, WKC_SPACE),
|
AS(SDLK_SPACE, WKC_SPACE),
|
||||||
AS(SDLK_RETURN, WKC_RETURN),
|
AS(SDLK_RETURN, WKC_RETURN),
|
||||||
AS(SDLK_TAB, WKC_TAB),
|
AS(SDLK_TAB, WKC_TAB),
|
||||||
|
|
||||||
/* Function keys */
|
/* Function keys */
|
||||||
AM(SDLK_F1, SDLK_F12, WKC_F1, WKC_F12),
|
AM_UP(SDLK_F1, SDLK_F12, WKC_F1, WKC_F12),
|
||||||
|
|
||||||
/* Numeric part. */
|
/* Numeric part. */
|
||||||
AM(SDLK_KP_0, SDLK_KP_9, '0', '9'),
|
AM(SDLK_KP_0, SDLK_KP_9, '0', '9'),
|
||||||
|
@ -420,10 +423,12 @@ static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, WChar *character)
|
||||||
{
|
{
|
||||||
const VkMapping *map;
|
const VkMapping *map;
|
||||||
uint key = 0;
|
uint key = 0;
|
||||||
|
bool unprintable = false;
|
||||||
|
|
||||||
for (map = _vk_mapping; map != endof(_vk_mapping); ++map) {
|
for (map = _vk_mapping; map != endof(_vk_mapping); ++map) {
|
||||||
if ((uint)(sym->sym - map->vk_from) <= map->vk_count) {
|
if ((uint)(sym->sym - map->vk_from) <= map->vk_count) {
|
||||||
key = sym->sym - map->vk_from + map->map_to;
|
key = sym->sym - map->vk_from + map->map_to;
|
||||||
|
unprintable = map->unprintable;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -441,7 +446,8 @@ static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, WChar *character)
|
||||||
if (sym->mod & KMOD_GUI ||
|
if (sym->mod & KMOD_GUI ||
|
||||||
sym->mod & KMOD_SHIFT ||
|
sym->mod & KMOD_SHIFT ||
|
||||||
sym->mod & KMOD_CTRL ||
|
sym->mod & KMOD_CTRL ||
|
||||||
sym->mod & KMOD_ALT) {
|
sym->mod & KMOD_ALT ||
|
||||||
|
unprintable) {
|
||||||
*character = WKC_NONE;
|
*character = WKC_NONE;
|
||||||
} else {
|
} else {
|
||||||
*character = sym->sym;
|
*character = sym->sym;
|
||||||
|
|
Loading…
Reference in New Issue