summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2025-03-20 14:21:46 -0500
committerDanny Holman <dholman@gymli.org>2025-03-20 14:21:46 -0500
commitb15010e8a67555e69014612b3563a5f80e894fa9 (patch)
tree105c3de99eff0a50c640a7ac696afa455d599b4f
parentd59b27b7b2cde425ab96f31eec98d279779cd2b6 (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>
-rw-r--r--include/rune/ui/input.h6
-rw-r--r--ui/input.c24
2 files changed, 19 insertions, 11 deletions
diff --git a/include/rune/ui/input.h b/include/rune/ui/input.h
index 3d8ca9a..f18cd19 100644
--- a/include/rune/ui/input.h
+++ b/include/rune/ui/input.h
@@ -23,17 +23,17 @@
#define RUNE_UI_INPUT_H
#include <rune/util/types.h>
-#include <rune/ui/app_window.h>
+#include <rune/ui/window.h>
#define KB_MODE_RAW 0
#define KB_MODE_TEXT 1
-RAPI int rune_input_init(struct rune_window *window);
+RAPI int rune_input_init(window_t *window);
RAPI void set_keyboard_mode(int mode);
RAPI int get_keyboard_mode(void);
-RAPI void register_key_hook(uint8_t scancode, void (*func)(void));
+RAPI void register_input_callback(uint8_t scancode, void (*func)(void*), void *data);
RAPI void rune_input_tick(void);
#endif
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 <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) {