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_LCONTROL, KEYCODE_CTRL_LEFT)
|
||||
(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_SPACE, KEYCODE_SPACE)
|
||||
(VK_ESCAPE, KEYCODE_ESCAPE)
|
||||
|
@ -105,7 +109,6 @@ std::map<int, int> windowsTransTable = InitConstMap<int, int>
|
|||
(VK_LEFT, KEYCODE_DPAD_LEFT)
|
||||
(VK_RIGHT, KEYCODE_DPAD_RIGHT)
|
||||
(VK_CAPITAL, KEYCODE_CAPS_LOCK)
|
||||
(VK_TAB, KEYCODE_TAB)
|
||||
(VK_CLEAR, KEYCODE_CLEAR)
|
||||
(VK_PRINT, KEYCODE_SYSRQ)
|
||||
(VK_SCROLL, KEYCODE_SCROLL_LOCK)
|
||||
|
|
|
@ -85,18 +85,23 @@ namespace MainWindow
|
|||
LRESULT CALLBACK DisplayProc(HWND, UINT, WPARAM, LPARAM);
|
||||
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
|
||||
|
||||
HWND GetHWND()
|
||||
{
|
||||
HWND GetHWND() {
|
||||
return hwndMain;
|
||||
}
|
||||
|
||||
HWND GetDisplayHWND()
|
||||
{
|
||||
HWND GetDisplayHWND() {
|
||||
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
|
||||
WTL::CTheme::IsThemingSupported();
|
||||
#endif
|
||||
|
@ -785,7 +790,7 @@ namespace MainWindow
|
|||
ShellExecute(NULL, "open", "http://forums.ppsspp.org/", NULL, NULL, SW_SHOWNORMAL);
|
||||
break;
|
||||
|
||||
case ID_HELP_ABOUT:
|
||||
case ID_HELP_ABOUT:
|
||||
DialogManager::EnableAll(FALSE);
|
||||
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
|
||||
DialogManager::EnableAll(TRUE);
|
||||
|
@ -806,9 +811,25 @@ namespace MainWindow
|
|||
KeyInput key;
|
||||
key.deviceId = DEVICE_ID_KEYBOARD;
|
||||
key.flags = KEY_DOWN;
|
||||
key.keyCode = windowsTransTable[(int)wParam];
|
||||
if (key.keyCode)
|
||||
NativeKey(key);
|
||||
switch ((int)wParam) {
|
||||
case VK_SHIFT:
|
||||
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;
|
||||
|
||||
|
@ -817,9 +838,26 @@ namespace MainWindow
|
|||
KeyInput key;
|
||||
key.deviceId = DEVICE_ID_KEYBOARD;
|
||||
key.flags = KEY_UP;
|
||||
key.keyCode = windowsTransTable[(int)wParam];
|
||||
if (key.keyCode)
|
||||
NativeKey(key);
|
||||
switch ((int)wParam) {
|
||||
case VK_SHIFT:
|
||||
// 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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue