blob: e434d46f3a499e2e9db0be72a5c67300cb8beab6 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include <rune/ui/input.h>
#include <rune/ui/scancode.h>
#include <rune/core/callbacks.h>
#include <rune/core/logging.h>
#include <rune/core/alloc.h>
static int keyboard_mode;
static void (*key_hooks[256])(void);
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])();
}
int rune_input_init(struct rune_window *window) {
keyboard_mode = KB_MODE_RAW;
glfwSetKeyCallback(window->window, _key_callback);
for (int i = 0; i < 256; i++)
key_hooks[i] = NULL;
}
void set_keyboard_mode(int mode) {
if (mode != KB_MODE_RAW || mode != KB_MODE_TEXT) {
log_output(LOG_ERROR, "Attempted to set keyboard to invalid mode");
return;
}
keyboard_mode = mode;
}
int get_keyboard_mode(void) {
return keyboard_mode;
}
void register_key_hook(uint8_t scancode, void (*func)(void)) {
key_hooks[scancode] = func;
}
void rune_input_tick(void) {
glfwPollEvents();
}
|