Changeset - r23911:1f0b84f2a430
[Not reviewed]
master
0 1 0
Jonathan G Rennison - 5 years ago 2019-11-04 17:59:04
j.g.rennison@gmail.com
Fix: [SDL2] Detection of backtick scancode

SDL_Keysym::scancode is a SDL_SCANCODE_* constant, not a raw scan code
1 file changed with 1 insertions and 12 deletions:
0 comments (0 inline, 0 general)
src/video/sdl2_v.cpp
Show inline comments
 
@@ -407,60 +407,49 @@ static const VkMapping _vk_mapping[] = {
 
	AS(SDLK_EQUALS,       WKC_EQUALS),
 
	AS(SDLK_LEFTBRACKET,  WKC_L_BRACKET),
 
	AS(SDLK_BACKSLASH,    WKC_BACKSLASH),
 
	AS(SDLK_RIGHTBRACKET, WKC_R_BRACKET),
 

	
 
	AS(SDLK_QUOTE,   WKC_SINGLEQUOTE),
 
	AS(SDLK_COMMA,   WKC_COMMA),
 
	AS(SDLK_MINUS,   WKC_MINUS),
 
	AS(SDLK_PERIOD,  WKC_PERIOD)
 
};
 

	
 
static uint ConvertSdlKeyIntoMy(SDL_Keysym *sym, WChar *character)
 
{
 
	const VkMapping *map;
 
	uint key = 0;
 

	
 
	for (map = _vk_mapping; map != endof(_vk_mapping); ++map) {
 
		if ((uint)(sym->sym - map->vk_from) <= map->vk_count) {
 
			key = sym->sym - map->vk_from + map->map_to;
 
			break;
 
		}
 
	}
 

	
 
	/* check scancode for BACKQUOTE key, because we want the key left of "1", not anything else (on non-US keyboards) */
 
#if defined(_WIN32) || defined(__OS2__)
 
	if (sym->scancode == 41) key = WKC_BACKQUOTE;
 
#elif defined(__APPLE__)
 
	if (sym->scancode == 10) key = WKC_BACKQUOTE;
 
#elif defined(__SVR4) && defined(__sun)
 
	if (sym->scancode == 60) key = WKC_BACKQUOTE;
 
	if (sym->scancode == 49) key = WKC_BACKSPACE;
 
#elif defined(__sgi__)
 
	if (sym->scancode == 22) key = WKC_BACKQUOTE;
 
#else
 
	if (sym->scancode == 49) key = WKC_BACKQUOTE;
 
#endif
 
	if (sym->scancode == SDL_SCANCODE_GRAVE) key = WKC_BACKQUOTE;
 

	
 
	/* META are the command keys on mac */
 
	if (sym->mod & KMOD_GUI)   key |= WKC_META;
 
	if (sym->mod & KMOD_SHIFT) key |= WKC_SHIFT;
 
	if (sym->mod & KMOD_CTRL)  key |= WKC_CTRL;
 
	if (sym->mod & KMOD_ALT)   key |= WKC_ALT;
 

	
 
	/* The mod keys have no character. Prevent '?' */
 
	if (sym->mod & KMOD_GUI ||
 
		sym->mod & KMOD_SHIFT ||
 
		sym->mod & KMOD_CTRL ||
 
		sym->mod & KMOD_ALT) {
 
		*character = WKC_NONE;
 
	} else {
 
		*character = sym->sym;
 
	}
 

	
 
	return key;
 
}
 

	
 
/**
 
 * Like ConvertSdlKeyIntoMy(), but takes an SDL_Keycode as input
 
 * instead of an SDL_Keysym.
 
 */
0 comments (0 inline, 0 general)