diff options
author | Danny Holman <dholman@gymli.org> | 2025-03-20 14:21:46 -0500 |
---|---|---|
committer | Danny Holman <dholman@gymli.org> | 2025-03-20 14:21:46 -0500 |
commit | b15010e8a67555e69014612b3563a5f80e894fa9 (patch) | |
tree | 105c3de99eff0a50c640a7ac696afa455d599b4f /ui/input.c | |
parent | d59b27b7b2cde425ab96f31eec98d279779cd2b6 (diff) |
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 <dholman@gymli.org>
Diffstat (limited to 'ui/input.c')
-rw-r--r-- | ui/input.c | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -3,21 +3,27 @@ #include <rune/core/callbacks.h> #include <rune/core/logging.h> #include <rune/core/alloc.h> +#include <string.h> + +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) { |