mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Add keymap support for alt/shift/ctrl on Windows.
WM_KEYDOWN only gets VK_SHIFT, not L or R. We could detect which on press, but not on release. It's simpler to just resend both.
This commit is contained in:
parent
cb249c469b
commit
39fc7931bb
2 changed files with 55 additions and 14 deletions
|
@ -90,6 +90,10 @@ std::map<int, int> windowsTransTable = InitConstMap<int, int>
|
||||||
(VK_OEM_PLUS, KEYCODE_PLUS)
|
(VK_OEM_PLUS, KEYCODE_PLUS)
|
||||||
(VK_LCONTROL, KEYCODE_CTRL_LEFT)
|
(VK_LCONTROL, KEYCODE_CTRL_LEFT)
|
||||||
(VK_RCONTROL, KEYCODE_CTRL_RIGHT)
|
(VK_RCONTROL, KEYCODE_CTRL_RIGHT)
|
||||||
|
(VK_LSHIFT, KEYCODE_SHIFT_LEFT)
|
||||||
|
(VK_RSHIFT, KEYCODE_SHIFT_RIGHT)
|
||||||
|
(VK_LMENU, KEYCODE_ALT_LEFT)
|
||||||
|
(VK_RMENU, KEYCODE_ALT_RIGHT)
|
||||||
(VK_BACK, KEYCODE_BACK)
|
(VK_BACK, KEYCODE_BACK)
|
||||||
(VK_SPACE, KEYCODE_SPACE)
|
(VK_SPACE, KEYCODE_SPACE)
|
||||||
(VK_ESCAPE, KEYCODE_ESCAPE)
|
(VK_ESCAPE, KEYCODE_ESCAPE)
|
||||||
|
@ -105,7 +109,6 @@ std::map<int, int> windowsTransTable = InitConstMap<int, int>
|
||||||
(VK_LEFT, KEYCODE_DPAD_LEFT)
|
(VK_LEFT, KEYCODE_DPAD_LEFT)
|
||||||
(VK_RIGHT, KEYCODE_DPAD_RIGHT)
|
(VK_RIGHT, KEYCODE_DPAD_RIGHT)
|
||||||
(VK_CAPITAL, KEYCODE_CAPS_LOCK)
|
(VK_CAPITAL, KEYCODE_CAPS_LOCK)
|
||||||
(VK_TAB, KEYCODE_TAB)
|
|
||||||
(VK_CLEAR, KEYCODE_CLEAR)
|
(VK_CLEAR, KEYCODE_CLEAR)
|
||||||
(VK_PRINT, KEYCODE_SYSRQ)
|
(VK_PRINT, KEYCODE_SYSRQ)
|
||||||
(VK_SCROLL, KEYCODE_SCROLL_LOCK)
|
(VK_SCROLL, KEYCODE_SCROLL_LOCK)
|
||||||
|
|
|
@ -85,18 +85,23 @@ namespace MainWindow
|
||||||
LRESULT CALLBACK DisplayProc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK DisplayProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
|
||||||
|
|
||||||
HWND GetHWND()
|
HWND GetHWND() {
|
||||||
{
|
|
||||||
return hwndMain;
|
return hwndMain;
|
||||||
}
|
}
|
||||||
|
|
||||||
HWND GetDisplayHWND()
|
HWND GetDisplayHWND() {
|
||||||
{
|
|
||||||
return hwndDisplay;
|
return hwndDisplay;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Init(HINSTANCE hInstance)
|
void SendCheckedNativeKey(KeyInput &key, int vKey) {
|
||||||
{
|
key.keyCode = windowsTransTable[(int)vKey];
|
||||||
|
if (key.keyCode) {
|
||||||
|
key.flags = GetAsyncKeyState(vKey) ? KEY_DOWN : KEY_UP;
|
||||||
|
NativeKey(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Init(HINSTANCE hInstance) {
|
||||||
#ifdef THEMES
|
#ifdef THEMES
|
||||||
WTL::CTheme::IsThemingSupported();
|
WTL::CTheme::IsThemingSupported();
|
||||||
#endif
|
#endif
|
||||||
|
@ -785,7 +790,7 @@ namespace MainWindow
|
||||||
ShellExecute(NULL, "open", "http://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
|
ShellExecute(NULL, "open", "http://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ID_HELP_ABOUT:
|
case ID_HELP_ABOUT:
|
||||||
DialogManager::EnableAll(FALSE);
|
DialogManager::EnableAll(FALSE);
|
||||||
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
|
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
|
||||||
DialogManager::EnableAll(TRUE);
|
DialogManager::EnableAll(TRUE);
|
||||||
|
@ -806,9 +811,25 @@ namespace MainWindow
|
||||||
KeyInput key;
|
KeyInput key;
|
||||||
key.deviceId = DEVICE_ID_KEYBOARD;
|
key.deviceId = DEVICE_ID_KEYBOARD;
|
||||||
key.flags = KEY_DOWN;
|
key.flags = KEY_DOWN;
|
||||||
key.keyCode = windowsTransTable[(int)wParam];
|
switch ((int)wParam) {
|
||||||
if (key.keyCode)
|
case VK_SHIFT:
|
||||||
NativeKey(key);
|
SendCheckedNativeKey(key, VK_LSHIFT);
|
||||||
|
SendCheckedNativeKey(key, VK_RSHIFT);
|
||||||
|
break;
|
||||||
|
case VK_CONTROL:
|
||||||
|
SendCheckedNativeKey(key, VK_LCONTROL);
|
||||||
|
SendCheckedNativeKey(key, VK_RCONTROL);
|
||||||
|
break;
|
||||||
|
case VK_MENU:
|
||||||
|
SendCheckedNativeKey(key, VK_LMENU);
|
||||||
|
SendCheckedNativeKey(key, VK_RMENU);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
key.keyCode = windowsTransTable[(int)wParam];
|
||||||
|
if (key.keyCode)
|
||||||
|
NativeKey(key);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -817,9 +838,26 @@ namespace MainWindow
|
||||||
KeyInput key;
|
KeyInput key;
|
||||||
key.deviceId = DEVICE_ID_KEYBOARD;
|
key.deviceId = DEVICE_ID_KEYBOARD;
|
||||||
key.flags = KEY_UP;
|
key.flags = KEY_UP;
|
||||||
key.keyCode = windowsTransTable[(int)wParam];
|
switch ((int)wParam) {
|
||||||
if (key.keyCode)
|
case VK_SHIFT:
|
||||||
NativeKey(key);
|
// We have no idea which was released, so just resend both.
|
||||||
|
SendCheckedNativeKey(key, VK_LSHIFT);
|
||||||
|
SendCheckedNativeKey(key, VK_RSHIFT);
|
||||||
|
break;
|
||||||
|
case VK_CONTROL:
|
||||||
|
SendCheckedNativeKey(key, VK_LCONTROL);
|
||||||
|
SendCheckedNativeKey(key, VK_RCONTROL);
|
||||||
|
break;
|
||||||
|
case VK_MENU:
|
||||||
|
SendCheckedNativeKey(key, VK_LMENU);
|
||||||
|
SendCheckedNativeKey(key, VK_RMENU);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
key.keyCode = windowsTransTable[(int)wParam];
|
||||||
|
if (key.keyCode)
|
||||||
|
NativeKey(key);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue