summaryrefslogtreecommitdiff
path: root/src/input/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/input/input.c')
-rw-r--r--src/input/input.c437
1 files changed, 437 insertions, 0 deletions
diff --git a/src/input/input.c b/src/input/input.c
new file mode 100644
index 0000000..31375cc
--- /dev/null
+++ b/src/input/input.c
@@ -0,0 +1,437 @@
+#include "input.h"
+
+void honey_setup_keyboard()
+{
+ memset(honey_key_states, 0, sizeof(honey_key_states));
+ memset(honey_key_callbacks, 0, sizeof(honey_key_callbacks));
+ memset(honey_key_callbacks_data, 0, sizeof(honey_key_callbacks_data));
+
+ honey_keyboard_callback = &default_honey_keyboard_callback;
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+void honey_setup_input(lua_State* L)
+{
+ lua_createtable(L, 0, 121);
+
+ lua_pushinteger(L, HONEY_KEY_UNKNOWN);
+ lua_setfield(L, -2, "honey_key_unknown");
+
+ lua_pushinteger(L, HONEY_KEY_SPACE);
+ lua_setfield(L, -2, "honey_key_space");
+
+ lua_pushinteger(L, HONEY_KEY_APOSTROPHE);
+ lua_setfield(L, -2, "honey_key_apostrophe");
+
+ lua_pushinteger(L, HONEY_KEY_COMMA);
+ lua_setfield(L, -2, "honey_key_comma");
+
+ lua_pushinteger(L, HONEY_KEY_MINUS);
+ lua_setfield(L, -2, "honey_key_minus");
+
+ lua_pushinteger(L, HONEY_KEY_PERIOD);
+ lua_setfield(L, -2, "honey_key_period");
+
+ lua_pushinteger(L, HONEY_KEY_SLASH);
+ lua_setfield(L, -2, "honey_key_slash");
+
+ lua_pushinteger(L, HONEY_KEY_0);
+ lua_setfield(L, -2, "honey_key_0");
+
+ lua_pushinteger(L, HONEY_KEY_1);
+ lua_setfield(L, -2, "honey_key_1");
+
+ lua_pushinteger(L, HONEY_KEY_2);
+ lua_setfield(L, -2, "honey_key_2");
+
+ lua_pushinteger(L, HONEY_KEY_3);
+ lua_setfield(L, -2, "honey_key_3");
+
+ lua_pushinteger(L, HONEY_KEY_4);
+ lua_setfield(L, -2, "honey_key_4");
+
+ lua_pushinteger(L, HONEY_KEY_5);
+ lua_setfield(L, -2, "honey_key_5");
+
+ lua_pushinteger(L, HONEY_KEY_6);
+ lua_setfield(L, -2, "honey_key_6");
+
+ lua_pushinteger(L, HONEY_KEY_7);
+ lua_setfield(L, -2, "honey_key_7");
+
+ lua_pushinteger(L, HONEY_KEY_8);
+ lua_setfield(L, -2, "honey_key_8");
+
+ lua_pushinteger(L, HONEY_KEY_9);
+ lua_setfield(L, -2, "honey_key_9");
+
+ lua_pushinteger(L, HONEY_KEY_SEMICOLON);
+ lua_setfield(L, -2, "honey_key_semicolon");
+
+ lua_pushinteger(L, HONEY_KEY_EQUAL);
+ lua_setfield(L, -2, "honey_key_equal");
+
+ lua_pushinteger(L, HONEY_KEY_A);
+ lua_setfield(L, -2, "honey_key_a");
+
+ lua_pushinteger(L, HONEY_KEY_B);
+ lua_setfield(L, -2, "honey_key_b");
+
+ lua_pushinteger(L, HONEY_KEY_C);
+ lua_setfield(L, -2, "honey_key_c");
+
+ lua_pushinteger(L, HONEY_KEY_D);
+ lua_setfield(L, -2, "honey_key_d");
+
+ lua_pushinteger(L, HONEY_KEY_E);
+ lua_setfield(L, -2, "honey_key_e");
+
+ lua_pushinteger(L, HONEY_KEY_F);
+ lua_setfield(L, -2, "honey_key_f");
+
+ lua_pushinteger(L, HONEY_KEY_G);
+ lua_setfield(L, -2, "honey_key_g");
+
+ lua_pushinteger(L, HONEY_KEY_H);
+ lua_setfield(L, -2, "honey_key_h");
+
+ lua_pushinteger(L, HONEY_KEY_I);
+ lua_setfield(L, -2, "honey_key_i");
+
+ lua_pushinteger(L, HONEY_KEY_J);
+ lua_setfield(L, -2, "honey_key_j");
+
+ lua_pushinteger(L, HONEY_KEY_K);
+ lua_setfield(L, -2, "honey_key_k");
+
+ lua_pushinteger(L, HONEY_KEY_L);
+ lua_setfield(L, -2, "honey_key_l");
+
+ lua_pushinteger(L, HONEY_KEY_M);
+ lua_setfield(L, -2, "honey_key_m");
+
+ lua_pushinteger(L, HONEY_KEY_N);
+ lua_setfield(L, -2, "honey_key_n");
+
+ lua_pushinteger(L, HONEY_KEY_O);
+ lua_setfield(L, -2, "honey_key_o");
+
+ lua_pushinteger(L, HONEY_KEY_P);
+ lua_setfield(L, -2, "honey_key_p");
+
+ lua_pushinteger(L, HONEY_KEY_Q);
+ lua_setfield(L, -2, "honey_key_q");
+
+ lua_pushinteger(L, HONEY_KEY_R);
+ lua_setfield(L, -2, "honey_key_r");
+
+ lua_pushinteger(L, HONEY_KEY_S);
+ lua_setfield(L, -2, "honey_key_s");
+
+ lua_pushinteger(L, HONEY_KEY_T);
+ lua_setfield(L, -2, "honey_key_t");
+
+ lua_pushinteger(L, HONEY_KEY_U);
+ lua_setfield(L, -2, "honey_key_u");
+
+ lua_pushinteger(L, HONEY_KEY_V);
+ lua_setfield(L, -2, "honey_key_v");
+
+ lua_pushinteger(L, HONEY_KEY_W);
+ lua_setfield(L, -2, "honey_key_w");
+
+ lua_pushinteger(L, HONEY_KEY_X);
+ lua_setfield(L, -2, "honey_key_x");
+
+ lua_pushinteger(L, HONEY_KEY_Y);
+ lua_setfield(L, -2, "honey_key_y");
+
+ lua_pushinteger(L, HONEY_KEY_Z);
+ lua_setfield(L, -2, "honey_key_z");
+
+ lua_pushinteger(L, HONEY_KEY_LEFT_BRACKET);
+ lua_setfield(L, -2, "honey_key_left_bracket");
+
+ lua_pushinteger(L, HONEY_KEY_BACKSLASH);
+ lua_setfield(L, -2, "honey_key_backslash");
+
+ lua_pushinteger(L, HONEY_KEY_RIGHT_BRACKET);
+ lua_setfield(L, -2, "honey_key_right_bracket");
+
+ lua_pushinteger(L, HONEY_KEY_GRAVE_ACCENT);
+ lua_setfield(L, -2, "honey_key_grave_accent");
+
+ lua_pushinteger(L, HONEY_KEY_WORLD_1);
+ lua_setfield(L, -2, "honey_key_world_1");
+
+ lua_pushinteger(L, HONEY_KEY_WORLD_2);
+ lua_setfield(L, -2, "honey_key_world_2");
+
+ lua_pushinteger(L, HONEY_KEY_ESCAPE);
+ lua_setfield(L, -2, "honey_key_escape");
+
+ lua_pushinteger(L, HONEY_KEY_ENTER);
+ lua_setfield(L, -2, "honey_key_enter");
+
+ lua_pushinteger(L, HONEY_KEY_TAB);
+ lua_setfield(L, -2, "honey_key_tab");
+
+ lua_pushinteger(L, HONEY_KEY_BACKSPACE);
+ lua_setfield(L, -2, "honey_key_backspace");
+
+ lua_pushinteger(L, HONEY_KEY_INSERT);
+ lua_setfield(L, -2, "honey_key_insert");
+
+ lua_pushinteger(L, HONEY_KEY_DELETE);
+ lua_setfield(L, -2, "honey_key_delete");
+
+ lua_pushinteger(L, HONEY_KEY_RIGHT);
+ lua_setfield(L, -2, "honey_key_right");
+
+ lua_pushinteger(L, HONEY_KEY_LEFT);
+ lua_setfield(L, -2, "honey_key_left");
+
+ lua_pushinteger(L, HONEY_KEY_DOWN);
+ lua_setfield(L, -2, "honey_key_down");
+
+ lua_pushinteger(L, HONEY_KEY_UP);
+ lua_setfield(L, -2, "honey_key_up");
+
+ lua_pushinteger(L, HONEY_KEY_PAGE_UP);
+ lua_setfield(L, -2, "honey_key_page_up");
+
+ lua_pushinteger(L, HONEY_KEY_PAGE_DOWN);
+ lua_setfield(L, -2, "honey_key_page_down");
+
+ lua_pushinteger(L, HONEY_KEY_HOME);
+ lua_setfield(L, -2, "honey_key_home");
+
+ lua_pushinteger(L, HONEY_KEY_END);
+ lua_setfield(L, -2, "honey_key_end");
+
+ lua_pushinteger(L, HONEY_KEY_CAPS_LOCK);
+ lua_setfield(L, -2, "honey_key_caps_lock");
+
+ lua_pushinteger(L, HONEY_KEY_SCROLL_LOCK);
+ lua_setfield(L, -2, "honey_key_scroll_lock");
+
+ lua_pushinteger(L, HONEY_KEY_NUM_LOCK);
+ lua_setfield(L, -2, "honey_key_num_lock");
+
+ lua_pushinteger(L, HONEY_KEY_PRINT_SCREEN);
+ lua_setfield(L, -2, "honey_key_print_screen");
+
+ lua_pushinteger(L, HONEY_KEY_PAUSE);
+ lua_setfield(L, -2, "honey_key_pause");
+
+ lua_pushinteger(L, HONEY_KEY_F1);
+ lua_setfield(L, -2, "honey_key_f1");
+
+ lua_pushinteger(L, HONEY_KEY_F2);
+ lua_setfield(L, -2, "honey_key_f2");
+
+ lua_pushinteger(L, HONEY_KEY_F3);
+ lua_setfield(L, -2, "honey_key_f3");
+
+ lua_pushinteger(L, HONEY_KEY_F4);
+ lua_setfield(L, -2, "honey_key_f4");
+
+ lua_pushinteger(L, HONEY_KEY_F5);
+ lua_setfield(L, -2, "honey_key_f5");
+
+ lua_pushinteger(L, HONEY_KEY_F6);
+ lua_setfield(L, -2, "honey_key_f6");
+
+ lua_pushinteger(L, HONEY_KEY_F7);
+ lua_setfield(L, -2, "honey_key_f7");
+
+ lua_pushinteger(L, HONEY_KEY_F8);
+ lua_setfield(L, -2, "honey_key_f8");
+
+ lua_pushinteger(L, HONEY_KEY_F9);
+ lua_setfield(L, -2, "honey_key_f9");
+
+ lua_pushinteger(L, HONEY_KEY_F10);
+ lua_setfield(L, -2, "honey_key_f10");
+
+ lua_pushinteger(L, HONEY_KEY_F11);
+ lua_setfield(L, -2, "honey_key_f11");
+
+ lua_pushinteger(L, HONEY_KEY_F12);
+ lua_setfield(L, -2, "honey_key_f12");
+
+ lua_pushinteger(L, HONEY_KEY_F13);
+ lua_setfield(L, -2, "honey_key_f13");
+
+ lua_pushinteger(L, HONEY_KEY_F14);
+ lua_setfield(L, -2, "honey_key_f14");
+
+ lua_pushinteger(L, HONEY_KEY_F15);
+ lua_setfield(L, -2, "honey_key_f15");
+
+ lua_pushinteger(L, HONEY_KEY_F16);
+ lua_setfield(L, -2, "honey_key_f16");
+
+ lua_pushinteger(L, HONEY_KEY_F17);
+ lua_setfield(L, -2, "honey_key_f17");
+
+ lua_pushinteger(L, HONEY_KEY_F18);
+ lua_setfield(L, -2, "honey_key_f18");
+
+ lua_pushinteger(L, HONEY_KEY_F19);
+ lua_setfield(L, -2, "honey_key_f19");
+
+ lua_pushinteger(L, HONEY_KEY_F20);
+ lua_setfield(L, -2, "honey_key_f20");
+
+ lua_pushinteger(L, HONEY_KEY_F21);
+ lua_setfield(L, -2, "honey_key_f21");
+
+ lua_pushinteger(L, HONEY_KEY_F22);
+ lua_setfield(L, -2, "honey_key_f22");
+
+ lua_pushinteger(L, HONEY_KEY_F23);
+ lua_setfield(L, -2, "honey_key_f23");
+
+ lua_pushinteger(L, HONEY_KEY_F24);
+ lua_setfield(L, -2, "honey_key_f24");
+
+ lua_pushinteger(L, HONEY_KEY_F25);
+ lua_setfield(L, -2, "honey_key_f25");
+
+ lua_pushinteger(L, HONEY_KEY_KP_0);
+ lua_setfield(L, -2, "honey_key_kp_0");
+
+ lua_pushinteger(L, HONEY_KEY_KP_1);
+ lua_setfield(L, -2, "honey_key_kp_1");
+
+ lua_pushinteger(L, HONEY_KEY_KP_2);
+ lua_setfield(L, -2, "honey_key_kp_2");
+
+ lua_pushinteger(L, HONEY_KEY_KP_3);
+ lua_setfield(L, -2, "honey_key_kp_3");
+
+ lua_pushinteger(L, HONEY_KEY_KP_4);
+ lua_setfield(L, -2, "honey_key_kp_4");
+
+ lua_pushinteger(L, HONEY_KEY_KP_5);
+ lua_setfield(L, -2, "honey_key_kp_5");
+
+ lua_pushinteger(L, HONEY_KEY_KP_6);
+ lua_setfield(L, -2, "honey_key_kp_6");
+
+ lua_pushinteger(L, HONEY_KEY_KP_7);
+ lua_setfield(L, -2, "honey_key_kp_7");
+
+ lua_pushinteger(L, HONEY_KEY_KP_8);
+ lua_setfield(L, -2, "honey_key_kp_8");
+
+ lua_pushinteger(L, HONEY_KEY_KP_9);
+ lua_setfield(L, -2, "honey_key_kp_9");
+
+ lua_pushinteger(L, HONEY_KEY_KP_DECIMAL);
+ lua_setfield(L, -2, "honey_key_kp_decimal");
+
+ lua_pushinteger(L, HONEY_KEY_KP_DIVIDE);
+ lua_setfield(L, -2, "honey_key_kp_divide");
+
+ lua_pushinteger(L, HONEY_KEY_KP_MULTIPLY);
+ lua_setfield(L, -2, "honey_key_kp_multiply");
+
+ lua_pushinteger(L, HONEY_KEY_KP_SUBTRACT);
+ lua_setfield(L, -2, "honey_key_kp_subtract");
+
+ lua_pushinteger(L, HONEY_KEY_KP_ADD);
+ lua_setfield(L, -2, "honey_key_kp_add");
+
+ lua_pushinteger(L, HONEY_KEY_KP_ENTER);
+ lua_setfield(L, -2, "honey_key_kp_enter");
+
+ lua_pushinteger(L, HONEY_KEY_KP_EQUAL);
+ lua_setfield(L, -2, "honey_key_kp_equal");
+
+ lua_pushinteger(L, HONEY_KEY_LEFT_SHIFT);
+ lua_setfield(L, -2, "honey_key_left_shift");
+
+ lua_pushinteger(L, HONEY_KEY_LEFT_CONTROL);
+ lua_setfield(L, -2, "honey_key_left_control");
+
+ lua_pushinteger(L, HONEY_KEY_LEFT_ALT);
+ lua_setfield(L, -2, "honey_key_left_alt");
+
+ lua_pushinteger(L, HONEY_KEY_LEFT_SUPER);
+ lua_setfield(L, -2, "honey_key_left_super");
+
+ lua_pushinteger(L, HONEY_KEY_RIGHT_SHIFT);
+ lua_setfield(L, -2, "honey_key_right_shift");
+
+ lua_pushinteger(L, HONEY_KEY_RIGHT_CONTROL);
+ lua_setfield(L, -2, "honey_key_right_control");
+
+ lua_pushinteger(L, HONEY_KEY_RIGHT_ALT);
+ lua_setfield(L, -2, "honey_key_right_alt");
+
+ lua_pushinteger(L, HONEY_KEY_RIGHT_SUPER);
+ lua_setfield(L, -2, "honey_key_right_super");
+
+ lua_pushinteger(L, HONEY_KEY_MENU);
+ lua_setfield(L, -2, "honey_key_menu");
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+bool honey_key_down(int key)
+{
+ if (key < 0 || key >= HONEY_N_KEYS) {
+ return false;
+ }
+ return (bool) honey_key_states[key];
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+void honey_key_bind(int key,
+ void (*callback)(void*, int),
+ void* data)
+{
+ if (key >= 0 && key < HONEY_N_KEYS) {
+ honey_key_callbacks[key] = callback;
+ honey_key_callbacks_data[key] = data;
+ }
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+void honey_key_unbind(int key)
+{
+ if (key >=0 && key < HONEY_N_KEYS) {
+ honey_key_callbacks[key] = NULL;
+ honey_key_callbacks_data[key] = NULL;
+ }
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+void honey_key_unbind_all()
+{
+ for (int i=0; i<HONEY_N_KEYS; i++) {
+ honey_key_callbacks[i] = NULL;
+ honey_key_callbacks_data[i] = NULL;
+ }
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
+
+void default_honey_keyboard_callback(honey_window window, int key, int scancode, int action, int mods)
+{
+ if (key >= 0 && key < HONEY_N_KEYS) {
+ if (action == HONEY_KEY_PRESS) { honey_key_states[key] = 1; }
+ if (action == HONEY_KEY_RELEASE) { honey_key_states[key] = 0; }
+ if (honey_key_callbacks[key] != NULL) {
+ honey_key_callbacks[key](honey_key_callbacks_data[key], action);
+ }
+ }
+}
+
+/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */