summaryrefslogtreecommitdiff
path: root/ui/input.c
blob: 728e5407efff320ca77fbbb2fb73b3f3b2ca8b40 (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
#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) {
        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(int key, void (*func)(void)) {
        key_hooks[key] = func;
}

void rune_input_tick(void) {
        glfwPollEvents();
}