* Handling native keystrokes * Borrowed from SDL2 OS/2 code **/
| 58 | * Borrowed from SDL2 OS/2 code |
| 59 | **/ |
| 60 | static void MapKeys(MPARAM mp1, MPARAM mp2) { |
| 61 | ULONG ulFlags = SHORT1FROMMP(mp1); /* WM_CHAR flags */ |
| 62 | ULONG ulVirtualKey = SHORT2FROMMP(mp2); /* Virtual key code VK_* */ |
| 63 | ULONG ulCharCode = SHORT1FROMMP(mp2); /* Character code */ |
| 64 | ULONG ulScanCode = CHAR4FROMMP(mp1); /* Scan code */ |
| 65 | static const int aScancode[] = { |
| 66 | INPUT_NONE, CCKEY_ESCAPE, CCKEY_1, CCKEY_2, CCKEY_3, CCKEY_4, CCKEY_5, CCKEY_6, |
| 67 | CCKEY_7, CCKEY_8, CCKEY_9, CCKEY_0, CCKEY_MINUS, CCKEY_EQUALS, CCKEY_BACKSPACE, CCKEY_TAB, |
| 68 | CCKEY_Q, CCKEY_W, CCKEY_E, CCKEY_R, CCKEY_T, CCKEY_Y, CCKEY_U, CCKEY_I, |
| 69 | CCKEY_O, CCKEY_P, CCKEY_LBRACKET, CCKEY_RBRACKET, CCKEY_ENTER, CCKEY_LCTRL, CCKEY_A, CCKEY_S, |
| 70 | CCKEY_D, CCKEY_F, CCKEY_G, CCKEY_H, CCKEY_J, CCKEY_K, CCKEY_L, CCKEY_SEMICOLON, |
| 71 | INPUT_NONE, INPUT_NONE, CCKEY_LSHIFT, CCKEY_BACKSLASH, CCKEY_Z, CCKEY_X, CCKEY_C, CCKEY_V, |
| 72 | CCKEY_B, CCKEY_N, CCKEY_M, CCKEY_COMMA, CCKEY_PERIOD, CCKEY_SLASH, CCKEY_RSHIFT, CCKEY_KP_MULTIPLY, |
| 73 | CCKEY_LALT, CCKEY_SPACE, CCKEY_CAPSLOCK, CCKEY_F1, CCKEY_F2, CCKEY_F3, CCKEY_F4, CCKEY_F5, |
| 74 | CCKEY_F6, CCKEY_F7, CCKEY_F8, CCKEY_F9, CCKEY_F10, CCKEY_NUMLOCK, CCKEY_SCROLLLOCK, CCKEY_KP7, |
| 75 | CCKEY_KP8, CCKEY_KP9, CCKEY_KP_MINUS, CCKEY_KP4, CCKEY_KP5, CCKEY_KP6, CCKEY_KP_PLUS, CCKEY_KP1, |
| 76 | CCKEY_KP2, CCKEY_KP3, CCKEY_KP0, CCKEY_KP_DECIMAL, INPUT_NONE, INPUT_NONE, CCKEY_BACKSLASH,CCKEY_F11, |
| 77 | CCKEY_F12, CCKEY_PAUSE, CCKEY_KP_ENTER, CCKEY_RCTRL, CCKEY_KP_DIVIDE, INPUT_NONE, CCKEY_RALT, INPUT_NONE, |
| 78 | CCKEY_HOME, CCKEY_UP, CCKEY_PAGEUP, CCKEY_LEFT, CCKEY_RIGHT, CCKEY_END, CCKEY_DOWN, CCKEY_PAGEDOWN, |
| 79 | CCKEY_F17, CCKEY_DELETE, CCKEY_F19, INPUT_NONE, INPUT_NONE, INPUT_NONE, INPUT_NONE, INPUT_NONE, |
| 80 | INPUT_NONE, INPUT_NONE, INPUT_NONE, INPUT_NONE,INPUT_NONE, INPUT_NONE, INPUT_NONE, INPUT_NONE, |
| 81 | INPUT_NONE, INPUT_NONE, INPUT_NONE, INPUT_NONE,INPUT_NONE,INPUT_NONE,CCKEY_LWIN, CCKEY_RWIN |
| 82 | }; |
| 83 | |
| 84 | if ((ulFlags & KC_CHAR) != 0 && (ulFlags & KC_KEYUP) == 0) { |
| 85 | if (WinQueryCapture(HWND_DESKTOP) != hwndClient) { // Mouse isn't captured |
| 86 | char c; |
| 87 | if (Convert_TryCodepointToCP437(ulCharCode, &c)) { |
| 88 | Event_RaiseInt(&InputEvents.Press, c); |
| 89 | return; |
| 90 | } |
| 91 | } |
| 92 | else { |
| 93 | Input_Set(ulCharCode, 0); |
| 94 | } |
| 95 | } |
| 96 | if ((ulFlags & KC_SCANCODE) != 0 && ulScanCode < sizeof(aScancode)/sizeof(int)) { |
| 97 | Input_Set(aScancode[ulScanCode], (ulFlags & KC_KEYUP) == 0); |
| 98 | } |
| 99 | } |
| 100 | |
| 101 | static void RefreshWindowBounds() { |
| 102 | RECTL rect; |
no test coverage detected