prefer virtual keycodes over scancodes for extended keys

This commit is contained in:
ouned 2017-06-03 09:13:08 +02:00
parent 195b8bd8ee
commit 34769abd46

View File

@ -82,15 +82,9 @@
#endif
static SDL_Scancode
WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam)
VKeytoScancode(WPARAM vkey)
{
SDL_Scancode code;
char bIsExtended;
int nScanCode = (lParam >> 16) & 0xFF;
/* 0x45 here to work around both pause and numlock sharing the same scancode, so use the VK key to tell them apart */
if (nScanCode == 0 || nScanCode == 0x45) {
switch(wParam) {
switch (vkey) {
case VK_CLEAR: return SDL_SCANCODE_CLEAR;
case VK_MODECHANGE: return SDL_SCANCODE_MODE;
case VK_SELECT: return SDL_SCANCODE_SELECT;
@ -145,6 +139,18 @@ WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam)
}
}
static SDL_Scancode
WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam)
{
SDL_Scancode code;
char bIsExtended;
int nScanCode = (lParam >> 16) & 0xFF;
/* 0x45 here to work around both pause and numlock sharing the same scancode, so use the VK key to tell them apart */
if (nScanCode == 0 || nScanCode == 0x45) {
return VKeytoScancode(wParam);
}
if (nScanCode > 127)
return SDL_SCANCODE_UNKNOWN;
@ -178,6 +184,11 @@ WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam)
default:
break;
}
/* prefer virtual keycodes over scancodes for extended keys */
} else {
SDL_Scancode vc = VKeytoScancode(wParam);
if (vc != SDL_SCANCODE_UNKNOWN) {
code = vc;
} else {
switch (code) {
case SDL_SCANCODE_RETURN:
@ -194,6 +205,7 @@ WindowsScanCodeToSDLScanCode(LPARAM lParam, WPARAM wParam)
break;
}
}
}
return code;
}