From b15010e8a67555e69014612b3563a5f80e894fa9 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Thu, 20 Mar 2025 14:21:46 -0500 Subject: core: input: fix coding style issue Fix a coding style issue in the input system. All API-level types should be fully opaque. Signed-off-by: Danny Holman --- ui/input.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'ui/input.c') diff --git a/ui/input.c b/ui/input.c index e434d46..de4df9c 100644 --- a/ui/input.c +++ b/ui/input.c @@ -3,21 +3,27 @@ #include #include #include +#include + +typedef struct callback { + void *data; + void (*callback_ptr)(void*); +} callback_t; static int keyboard_mode; -static void (*key_hooks[256])(void); +static callback_t callbacks[256]; void _key_callback(GLFWwindow *window, int key, int scancode, int action, int mods) { - scancode -= 8; - if (action == GLFW_PRESS && key_hooks[scancode] != NULL) - (*key_hooks[scancode])(); + if ((action == GLFW_PRESS) && (callbacks[scancode].callback_ptr != NULL)) + (*callbacks[scancode].callback_ptr)(callbacks[scancode].data); } -int rune_input_init(struct rune_window *window) { +int rune_input_init(window_t *window) { keyboard_mode = KB_MODE_RAW; glfwSetKeyCallback(window->window, _key_callback); for (int i = 0; i < 256; i++) - key_hooks[i] = NULL; + memset(&callbacks[i], 0, sizeof(callback_t)); + log_output(LOG_DEBUG, "Initialized keyboard input"); } void set_keyboard_mode(int mode) { @@ -32,8 +38,10 @@ int get_keyboard_mode(void) { return keyboard_mode; } -void register_key_hook(uint8_t scancode, void (*func)(void)) { - key_hooks[scancode] = func; +void register_input_callback(uint8_t scancode, void (*func)(void*), void *data) { + callbacks[scancode].data = data; + callbacks[scancode].callback_ptr = func; + log_output(LOG_DEBUG, "Registered scancode %d with callback function address %x", scancode, func); } void rune_input_tick(void) { -- cgit v1.2.3