MCPcopy Create free account
hub / github.com/ClassiCube/ClassiCube / MapKeys

Function MapKeys

src/Window_OS2.c:60–99  ·  view source on GitHub ↗

* Handling native keystrokes * Borrowed from SDL2 OS/2 code **/

Source from the content-addressed store, hash-verified

58 * Borrowed from SDL2 OS/2 code
59 **/
60static 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
101static void RefreshWindowBounds() {
102 RECTL rect;

Callers 1

ClientWndProcFunction · 0.85

Calls 3

Event_RaiseIntFunction · 0.85
Input_SetFunction · 0.85

Tested by

no test coverage detected