Fix wrong initialization of keycode lookup table
Up until now, several keys were assigned the same key value because the `keycode_lookup_table` array wasn't properly initialized. The values at the end of the array were all set to `KeyCode_Ex0 + 1` which is 112. This would cause several key to be treated as the same key. In my case the key next to the left shift key ( `<` and `>` on AZERTY) was getting the same value as the `Right Windows key`. But I suppose that the left and right windows key would get the same value too (I can't check this as I have only 1 windows key on my keyboard). This fix just properly initialize the array. I also fixed a typo in a function name: `keycode_physical_translaion_is_wrong` => `keycode_physical_translation_is_wrong`.
This commit is contained in:
parent
f3dc516704
commit
dfce9bf369
|
@ -781,12 +781,12 @@ win32_keycode_init(void){
|
||||||
keycode_lookup_table[VK_NUMPAD9] = KeyCode_NumPad9;
|
keycode_lookup_table[VK_NUMPAD9] = KeyCode_NumPad9;
|
||||||
|
|
||||||
for (i32 i = 0xDF; i < 0xFF; i += 1){
|
for (i32 i = 0xDF; i < 0xFF; i += 1){
|
||||||
keycode_lookup_table[i] = KeyCode_Ex0 + 1;
|
keycode_lookup_table[i] = KeyCode_Ex0 + i - 0xDF;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal b32
|
internal b32
|
||||||
keycode_physical_translaion_is_wrong(u64 vk){
|
keycode_physical_translation_is_wrong(u64 vk){
|
||||||
b32 result = false;
|
b32 result = false;
|
||||||
switch (vk){
|
switch (vk){
|
||||||
case VK_UP: case VK_DOWN: case VK_LEFT: case VK_RIGHT:
|
case VK_UP: case VK_DOWN: case VK_LEFT: case VK_RIGHT:
|
||||||
|
@ -1225,7 +1225,7 @@ win32_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
|
||||||
u64 vk = wParam;
|
u64 vk = wParam;
|
||||||
|
|
||||||
if (win32vars.key_mode == KeyMode_Physical &&
|
if (win32vars.key_mode == KeyMode_Physical &&
|
||||||
!keycode_physical_translaion_is_wrong(vk)){
|
!keycode_physical_translation_is_wrong(vk)){
|
||||||
UINT scan_code = ((lParam >> 16) & bitmask_8);
|
UINT scan_code = ((lParam >> 16) & bitmask_8);
|
||||||
vk = MapVirtualKeyEx(scan_code, MAPVK_VSC_TO_VK_EX, win32vars.kl_universal);
|
vk = MapVirtualKeyEx(scan_code, MAPVK_VSC_TO_VK_EX, win32vars.kl_universal);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue