mirror of
https://github.com/libretro/ppsspp.git
synced 2025-02-09 10:32:51 +00:00
Update Windows' keyboard input in preparation for eventual key remapping. Might need a bit more work, but for now, all keyboard functionality should be restored.
This commit is contained in:
parent
8b27f4ebd4
commit
72b33a5f5c
@ -1,4 +1,6 @@
|
||||
#include "input/input_state.h"
|
||||
#include "util/const_map.h"
|
||||
#include "KeyMap.h"
|
||||
#include "ControlMapping.h"
|
||||
#include "Windows/WndMainWindow.h"
|
||||
#include "KeyboardDevice.h"
|
||||
@ -32,11 +34,96 @@ unsigned short analog_ctrl_map[] = {
|
||||
'J', CTRL_LEFT,
|
||||
'L', CTRL_RIGHT,
|
||||
};
|
||||
|
||||
// TODO: More keys need to be added, but this is more than
|
||||
// a fair start.
|
||||
std::map<int, int> windowsTransTable = InitConstMap<int, int>
|
||||
('A', KEYCODE_A)
|
||||
('B', KEYCODE_B)
|
||||
('C', KEYCODE_C)
|
||||
('D', KEYCODE_D)
|
||||
('E', KEYCODE_E)
|
||||
('F', KEYCODE_F)
|
||||
('G', KEYCODE_G)
|
||||
('H', KEYCODE_H)
|
||||
('I', KEYCODE_I)
|
||||
('J', KEYCODE_J)
|
||||
('K', KEYCODE_K)
|
||||
('L', KEYCODE_L)
|
||||
('M', KEYCODE_M)
|
||||
('N', KEYCODE_N)
|
||||
('O', KEYCODE_O)
|
||||
('P', KEYCODE_P)
|
||||
('Q', KEYCODE_Q)
|
||||
('R', KEYCODE_R)
|
||||
('S', KEYCODE_S)
|
||||
('T', KEYCODE_T)
|
||||
('U', KEYCODE_U)
|
||||
('V', KEYCODE_V)
|
||||
('W', KEYCODE_W)
|
||||
('X', KEYCODE_X)
|
||||
('Y', KEYCODE_Y)
|
||||
('Z', KEYCODE_Z)
|
||||
('0', KEYCODE_0)
|
||||
('1', KEYCODE_1)
|
||||
('2', KEYCODE_2)
|
||||
('3', KEYCODE_3)
|
||||
('4', KEYCODE_4)
|
||||
('5', KEYCODE_5)
|
||||
('6', KEYCODE_6)
|
||||
('7', KEYCODE_7)
|
||||
('8', KEYCODE_8)
|
||||
('9', KEYCODE_9)
|
||||
(VK_NUMPAD0, KEYCODE_NUMPAD_0)
|
||||
(VK_NUMPAD1, KEYCODE_NUMPAD_1)
|
||||
(VK_NUMPAD2, KEYCODE_NUMPAD_2)
|
||||
(VK_NUMPAD3, KEYCODE_NUMPAD_3)
|
||||
(VK_NUMPAD4, KEYCODE_NUMPAD_4)
|
||||
(VK_NUMPAD5, KEYCODE_NUMPAD_5)
|
||||
(VK_NUMPAD6, KEYCODE_NUMPAD_6)
|
||||
(VK_NUMPAD7, KEYCODE_NUMPAD_7)
|
||||
(VK_NUMPAD8, KEYCODE_NUMPAD_8)
|
||||
(VK_NUMPAD9, KEYCODE_NUMPAD_9)
|
||||
(VK_DIVIDE, KEYCODE_NUMPAD_DIVIDE)
|
||||
(VK_MULTIPLY, KEYCODE_NUMPAD_MULTIPLY)
|
||||
(VK_SUBTRACT, KEYCODE_NUMPAD_SUBTRACT)
|
||||
(VK_ADD, KEYCODE_NUMPAD_ADD)
|
||||
(VK_SEPARATOR, KEYCODE_NUMPAD_COMMA)
|
||||
(VK_OEM_MINUS, KEYCODE_MINUS)
|
||||
(VK_OEM_PLUS, KEYCODE_PLUS)
|
||||
(VK_LCONTROL, KEYCODE_CTRL_LEFT)
|
||||
(VK_RCONTROL, KEYCODE_CTRL_RIGHT)
|
||||
(VK_BACK, KEYCODE_BACK)
|
||||
(VK_SPACE, KEYCODE_SPACE)
|
||||
(VK_ESCAPE, KEYCODE_ESCAPE)
|
||||
(VK_UP, KEYCODE_DPAD_UP)
|
||||
(VK_INSERT, KEYCODE_INSERT)
|
||||
(VK_HOME, KEYCODE_HOME)
|
||||
(VK_PRIOR, KEYCODE_PAGE_UP)
|
||||
(VK_NEXT, KEYCODE_PAGE_DOWN)
|
||||
(VK_DELETE, KEYCODE_DEL)
|
||||
(VK_END, KEYCODE_MOVE_END)
|
||||
(VK_TAB, KEYCODE_TAB)
|
||||
(VK_DOWN, KEYCODE_DPAD_DOWN)
|
||||
(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)
|
||||
(VK_OEM_1, KEYCODE_SEMICOLON)
|
||||
(VK_OEM_2, KEYCODE_SLASH)
|
||||
(VK_OEM_4, KEYCODE_LEFT_BRACKET)
|
||||
(VK_OEM_6, KEYCODE_RIGHT_BRACKET)
|
||||
(VK_MENU, KEYCODE_MENU);
|
||||
|
||||
const unsigned int analog_ctrl_map_size = sizeof(analog_ctrl_map);
|
||||
|
||||
int KeyboardDevice::UpdateState(InputState &input_state) {
|
||||
if (MainWindow::GetHWND() != GetForegroundWindow()) return -1;
|
||||
bool alternate = GetAsyncKeyState(VK_SHIFT) != 0;
|
||||
KeyQueueBlank(input_state.key_queue);
|
||||
static u32 alternator = 0;
|
||||
bool doAlternate = alternate && (alternator++ % 10) < 5;
|
||||
|
||||
@ -49,8 +136,13 @@ int KeyboardDevice::UpdateState(InputState &input_state) {
|
||||
if (!GetAsyncKeyState(key_pad_map[i])) {
|
||||
continue;
|
||||
}
|
||||
// TODO: Escape should eventually work with KeyQueueAttemptTranslatedAdd, but it doesn't
|
||||
// right now.
|
||||
if (!doAlternate || key_pad_map[i + 1] > PAD_BUTTON_SELECT) {
|
||||
input_state.pad_buttons |= key_pad_map[i+1];
|
||||
if(key_pad_map[i] == VK_ESCAPE)
|
||||
input_state.pad_buttons |= key_pad_map[i + 1];
|
||||
|
||||
KeyQueueAttemptTranslatedAdd(input_state.key_queue, windowsTransTable, key_pad_map[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -200,4 +292,3 @@ const char * getVirtualKeyName(unsigned char key)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user