diff --git a/src/Backends/GLFW3/Misc.cpp b/src/Backends/GLFW3/Misc.cpp index 42b7650e..50945b37 100644 --- a/src/Backends/GLFW3/Misc.cpp +++ b/src/Backends/GLFW3/Misc.cpp @@ -20,12 +20,12 @@ #define DO_KEY(GLFW_KEY, BACKEND_KEY) \ case GLFW_KEY: \ - backend_keyboard_state[BACKEND_KEY] = action == GLFW_PRESS; \ + keyboard_state[BACKEND_KEY] = action == GLFW_PRESS; \ break; BOOL bActive = TRUE; -BOOL backend_keyboard_state[BACKEND_KEYBOARD_TOTAL]; -BOOL backend_previous_keyboard_state[BACKEND_KEYBOARD_TOTAL]; + +static BOOL keyboard_state[BACKEND_KEYBOARD_TOTAL]; static GLFWcursor* cursor; @@ -272,6 +272,11 @@ BOOL Backend_SystemTask(void) return TRUE; } +void Backend_GetKeyboardState(BOOL *out_keyboard_state) +{ + memcpy(out_keyboard_state, keyboard_state, sizeof(keyboard_state)); +} + void Backend_ShowMessageBox(const char *title, const char *message) { // GLFW3 doesn't have a message box diff --git a/src/Backends/Misc.h b/src/Backends/Misc.h index d69f33d8..7cdf3d2f 100644 --- a/src/Backends/Misc.h +++ b/src/Backends/Misc.h @@ -84,7 +84,6 @@ enum }; extern BOOL bActive; -extern BOOL backend_keyboard_state[BACKEND_KEYBOARD_TOTAL]; void Backend_Init(void); void Backend_Deinit(void); @@ -95,6 +94,7 @@ void Backend_SetWindowIcon(const unsigned char *rgb_pixels, unsigned int width, void Backend_SetCursor(const unsigned char *rgb_pixels, unsigned int width, unsigned int height); void PlaybackBackend_EnableDragAndDrop(void); BOOL Backend_SystemTask(void); +void Backend_GetKeyboardState(BOOL *keyboard_state); void Backend_ShowMessageBox(const char *title, const char *message); unsigned long Backend_GetTicks(void); void Backend_Delay(unsigned int ticks); diff --git a/src/Backends/SDL2/Misc.cpp b/src/Backends/SDL2/Misc.cpp index 8b1ad40a..0beec4b9 100644 --- a/src/Backends/SDL2/Misc.cpp +++ b/src/Backends/SDL2/Misc.cpp @@ -18,12 +18,12 @@ #define DO_KEY(SDL_KEY, BACKEND_KEY) \ case SDL_KEY: \ - backend_keyboard_state[BACKEND_KEY] = event.key.type == SDL_KEYDOWN; \ + keyboard_state[BACKEND_KEY] = event.key.type == SDL_KEYDOWN; \ break; BOOL bActive = TRUE; -BOOL backend_keyboard_state[BACKEND_KEYBOARD_TOTAL]; -BOOL backend_previous_keyboard_state[BACKEND_KEYBOARD_TOTAL]; + +static BOOL keyboard_state[BACKEND_KEYBOARD_TOTAL]; static SDL_Surface *cursor_surface; static SDL_Cursor *cursor; @@ -238,6 +238,11 @@ BOOL Backend_SystemTask(void) return TRUE; } +void Backend_GetKeyboardState(BOOL *out_keyboard_state) +{ + memcpy(out_keyboard_state, keyboard_state, sizeof(keyboard_state)); +} + void Backend_ShowMessageBox(const char *title, const char *message) { SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, title, message, window); diff --git a/src/Main.cpp b/src/Main.cpp index 2261f68f..4979237e 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -390,9 +390,12 @@ BOOL SystemTask(void) if (!Backend_SystemTask()) return FALSE; + BOOL keyboard_state[BACKEND_KEYBOARD_TOTAL]; + Backend_GetKeyboardState(keyboard_state); + for (unsigned int i = 0; i < BACKEND_KEYBOARD_TOTAL; ++i) { - if (backend_keyboard_state[i] && !previous_keyboard_state[i]) + if (keyboard_state[i] && !previous_keyboard_state[i]) { switch (i) { @@ -478,7 +481,7 @@ BOOL SystemTask(void) break; } } - else if (!backend_keyboard_state[i] && previous_keyboard_state[i]) + else if (!keyboard_state[i] && previous_keyboard_state[i]) { switch (i) { @@ -562,7 +565,7 @@ BOOL SystemTask(void) } } - memcpy(previous_keyboard_state, backend_keyboard_state, sizeof(backend_keyboard_state)); + memcpy(previous_keyboard_state, keyboard_state, sizeof(keyboard_state)); // Run joystick code if (gbUseJoystick)