From ad50ee243d9d7ac30ef507acd01bbc4ccb02f862 Mon Sep 17 00:00:00 2001 From: sanine-a Date: Fri, 22 May 2020 22:30:07 -0500 Subject: add keyboard input --- include/common.h | 2 + include/honey.h | 3 +- include/input.h | 180 +++++++++++++++++++++++++++++++++++++++++++++++++++ include/keycodes.txt | 121 ++++++++++++++++++++++++++++++++++ 4 files changed, 304 insertions(+), 2 deletions(-) create mode 100644 include/input.h create mode 100644 include/keycodes.txt (limited to 'include') diff --git a/include/common.h b/include/common.h index 8c1f976..e76d53c 100644 --- a/include/common.h +++ b/include/common.h @@ -14,4 +14,6 @@ #include "stb_image.h" +typedef GLFWwindow* honey_window; + #endif diff --git a/include/honey.h b/include/honey.h index 3dbc5ab..ccbaf8f 100644 --- a/include/honey.h +++ b/include/honey.h @@ -8,13 +8,12 @@ #include "camera.h" #include "common.h" +#include "input.h" #include "mesh.h" #include "primitives.h" #include "shader.h" #include "texture.h" -typedef GLFWwindow* honey_window; - /** @brief Initialize Honey. * * @param[in] screen_width The desired width of the screen in pixels diff --git a/include/input.h b/include/input.h new file mode 100644 index 0000000..6482f1f --- /dev/null +++ b/include/input.h @@ -0,0 +1,180 @@ +#ifndef HONEY_INPUT_H +#define HONEY_INPUT_H + +/** @file input.h + * + * @brief Wrap GLFW input functions for honey. + */ + +#include "common.h" + +#define HONEY_KEY_UNKNOWN 0 +#define HONEY_KEY_SPACE 1 +#define HONEY_KEY_APOSTROPHE 2 +#define HONEY_KEY_COMMA 3 +#define HONEY_KEY_MINUS 4 +#define HONEY_KEY_PERIOD 5 +#define HONEY_KEY_SLASH 6 +#define HONEY_KEY_0 7 +#define HONEY_KEY_1 8 +#define HONEY_KEY_2 9 +#define HONEY_KEY_3 10 +#define HONEY_KEY_4 11 +#define HONEY_KEY_5 12 +#define HONEY_KEY_6 13 +#define HONEY_KEY_7 14 +#define HONEY_KEY_8 15 +#define HONEY_KEY_9 16 +#define HONEY_KEY_SEMICOLON 17 +#define HONEY_KEY_EQUAL 18 +#define HONEY_KEY_A 19 +#define HONEY_KEY_B 20 +#define HONEY_KEY_C 21 +#define HONEY_KEY_D 22 +#define HONEY_KEY_E 23 +#define HONEY_KEY_F 24 +#define HONEY_KEY_G 25 +#define HONEY_KEY_H 26 +#define HONEY_KEY_I 27 +#define HONEY_KEY_J 28 +#define HONEY_KEY_K 29 +#define HONEY_KEY_L 30 +#define HONEY_KEY_M 31 +#define HONEY_KEY_N 32 +#define HONEY_KEY_O 33 +#define HONEY_KEY_P 34 +#define HONEY_KEY_Q 35 +#define HONEY_KEY_R 36 +#define HONEY_KEY_S 37 +#define HONEY_KEY_T 38 +#define HONEY_KEY_U 39 +#define HONEY_KEY_V 40 +#define HONEY_KEY_W 41 +#define HONEY_KEY_X 42 +#define HONEY_KEY_Y 43 +#define HONEY_KEY_Z 44 +#define HONEY_KEY_LEFT_BRACKET 45 +#define HONEY_KEY_BACKSLASH 46 +#define HONEY_KEY_RIGHT_BRACKET 47 +#define HONEY_KEY_GRAVE_ACCENT 48 +#define HONEY_KEY_WORLD_1 49 +#define HONEY_KEY_WORLD_2 50 +#define HONEY_KEY_ESCAPE 51 +#define HONEY_KEY_ENTER 52 +#define HONEY_KEY_TAB 53 +#define HONEY_KEY_BACKSPACE 54 +#define HONEY_KEY_INSERT 55 +#define HONEY_KEY_DELETE 56 +#define HONEY_KEY_RIGHT 57 +#define HONEY_KEY_LEFT 58 +#define HONEY_KEY_DOWN 59 +#define HONEY_KEY_UP 60 +#define HONEY_KEY_PAGE_UP 61 +#define HONEY_KEY_PAGE_DOWN 62 +#define HONEY_KEY_HOME 63 +#define HONEY_KEY_END 64 +#define HONEY_KEY_CAPS_LOCK 65 +#define HONEY_KEY_SCROLL_LOCK 66 +#define HONEY_KEY_NUM_LOCK 67 +#define HONEY_KEY_PRINT_SCREEN 68 +#define HONEY_KEY_PAUSE 69 +#define HONEY_KEY_F1 70 +#define HONEY_KEY_F2 71 +#define HONEY_KEY_F3 72 +#define HONEY_KEY_F4 73 +#define HONEY_KEY_F5 74 +#define HONEY_KEY_F6 75 +#define HONEY_KEY_F7 76 +#define HONEY_KEY_F8 77 +#define HONEY_KEY_F9 78 +#define HONEY_KEY_F10 79 +#define HONEY_KEY_F11 80 +#define HONEY_KEY_F12 81 +#define HONEY_KEY_F13 82 +#define HONEY_KEY_F14 83 +#define HONEY_KEY_F15 84 +#define HONEY_KEY_F16 85 +#define HONEY_KEY_F17 86 +#define HONEY_KEY_F18 87 +#define HONEY_KEY_F19 88 +#define HONEY_KEY_F20 89 +#define HONEY_KEY_F21 90 +#define HONEY_KEY_F22 91 +#define HONEY_KEY_F23 92 +#define HONEY_KEY_F24 93 +#define HONEY_KEY_F25 94 +#define HONEY_KEY_KP_0 95 +#define HONEY_KEY_KP_1 96 +#define HONEY_KEY_KP_2 97 +#define HONEY_KEY_KP_3 98 +#define HONEY_KEY_KP_4 99 +#define HONEY_KEY_KP_5 100 +#define HONEY_KEY_KP_6 101 +#define HONEY_KEY_KP_7 102 +#define HONEY_KEY_KP_8 103 +#define HONEY_KEY_KP_9 104 +#define HONEY_KEY_KP_DECIMAL 105 +#define HONEY_KEY_KP_DIVIDE 106 +#define HONEY_KEY_KP_MULTIPLY 107 +#define HONEY_KEY_KP_SUBTRACT 108 +#define HONEY_KEY_KP_ADD 109 +#define HONEY_KEY_KP_ENTER 110 +#define HONEY_KEY_KP_EQUAL 111 +#define HONEY_KEY_LEFT_SHIFT 112 +#define HONEY_KEY_LEFT_CONTROL 113 +#define HONEY_KEY_LEFT_ALT 114 +#define HONEY_KEY_LEFT_SUPER 115 +#define HONEY_KEY_RIGHT_SHIFT 116 +#define HONEY_KEY_RIGHT_CONTROL 117 +#define HONEY_KEY_RIGHT_ALT 118 +#define HONEY_KEY_RIGHT_SUPER 119 +#define HONEY_KEY_MENU 120 + +#define HONEY_N_KEYS 121 + +#define HONEY_PRESS_KEY GLFW_PRESS +#define HONEY_RELEASE_KEY GLFW_RELEASE + +unsigned int honey_key_states[HONEY_N_KEYS]; +static void (*honey_key_callbacks[HONEY_N_KEYS])(void*, int); +static void* honey_key_callbacks_data[HONEY_N_KEYS]; +static void (*honey_keyboard_callback)(honey_window window, int key, int scancode, int action, int mods); + +/** @brief Initializes Honey's internal keyboard states. + * + * This function is called by honey_setup, so you shouldn't need + * to manually call it in most cases. + */ +void honey_setup_keyboard(); + +/** @brief Check if a key is down. + * + * @param[in] key The key to query. + * + * @return TRUE if the key is presently held down; FALSE if it is not, or if the keycode was out of bounds. + */ +bool honey_key_down(int key); + +/** @brief Bind a callback to a key. + * + * The callback must have signature (void*, int), where the first argument is supplied by the + * void* supplied with this function, and the int is one of HONEY_KEY_PRESS or HONEY_KEY_RELEASE, + * depending on the action that triggered the callback. + * + * @param[in] key The key to bind the callback to. + * @param[in] callback The callback function to bind. + * @param[in] data Data to pass to the callback function upon triggering. + */ +void honey_key_bind(int key, void (*callback)(void*, int), void* data); + +/** @brief Unbind a key callback. + * + * THIS FUNCTION DOES NOT FREE MEMORY! If you allocated any, be sure to free it yourself! + * + * @param[in] key The key to unbind a callback from. + */ +void honey_key_unbind(int key); + +void default_honey_keyboard_callback(honey_window window, int key, int scancode, int action, int mods); + +#endif diff --git a/include/keycodes.txt b/include/keycodes.txt new file mode 100644 index 0000000..12f35b3 --- /dev/null +++ b/include/keycodes.txt @@ -0,0 +1,121 @@ +GLFW_KEY_UNKNOWN +GLFW_KEY_SPACE +GLFW_KEY_APOSTROPHE +GLFW_KEY_COMMA +GLFW_KEY_MINUS +GLFW_KEY_PERIOD +GLFW_KEY_SLASH +GLFW_KEY_0 +GLFW_KEY_1 +GLFW_KEY_2 +GLFW_KEY_3 +GLFW_KEY_4 +GLFW_KEY_5 +GLFW_KEY_6 +GLFW_KEY_7 +GLFW_KEY_8 +GLFW_KEY_9 +GLFW_KEY_SEMICOLON +GLFW_KEY_EQUAL +GLFW_KEY_A +GLFW_KEY_B +GLFW_KEY_C +GLFW_KEY_D +GLFW_KEY_E +GLFW_KEY_F +GLFW_KEY_G +GLFW_KEY_H +GLFW_KEY_I +GLFW_KEY_J +GLFW_KEY_K +GLFW_KEY_L +GLFW_KEY_M +GLFW_KEY_N +GLFW_KEY_O +GLFW_KEY_P +GLFW_KEY_Q +GLFW_KEY_R +GLFW_KEY_S +GLFW_KEY_T +GLFW_KEY_U +GLFW_KEY_V +GLFW_KEY_W +GLFW_KEY_X +GLFW_KEY_Y +GLFW_KEY_Z +GLFW_KEY_LEFT_BRACKET +GLFW_KEY_BACKSLASH +GLFW_KEY_RIGHT_BRACKET +GLFW_KEY_GRAVE_ACCENT +GLFW_KEY_WORLD_1 +GLFW_KEY_WORLD_2 +GLFW_KEY_ESCAPE +GLFW_KEY_ENTER +GLFW_KEY_TAB +GLFW_KEY_BACKSPACE +GLFW_KEY_INSERT +GLFW_KEY_DELETE +GLFW_KEY_RIGHT +GLFW_KEY_LEFT +GLFW_KEY_DOWN +GLFW_KEY_UP +GLFW_KEY_PAGE_UP +GLFW_KEY_PAGE_DOWN +GLFW_KEY_HOME +GLFW_KEY_END +GLFW_KEY_CAPS_LOCK +GLFW_KEY_SCROLL_LOCK +GLFW_KEY_NUM_LOCK +GLFW_KEY_PRINT_SCREEN +GLFW_KEY_PAUSE +GLFW_KEY_F1 +GLFW_KEY_F2 +GLFW_KEY_F3 +GLFW_KEY_F4 +GLFW_KEY_F5 +GLFW_KEY_F6 +GLFW_KEY_F7 +GLFW_KEY_F8 +GLFW_KEY_F9 +GLFW_KEY_F10 +GLFW_KEY_F11 +GLFW_KEY_F12 +GLFW_KEY_F13 +GLFW_KEY_F14 +GLFW_KEY_F15 +GLFW_KEY_F16 +GLFW_KEY_F17 +GLFW_KEY_F18 +GLFW_KEY_F19 +GLFW_KEY_F20 +GLFW_KEY_F21 +GLFW_KEY_F22 +GLFW_KEY_F23 +GLFW_KEY_F24 +GLFW_KEY_F25 +GLFW_KEY_KP_0 +GLFW_KEY_KP_1 +GLFW_KEY_KP_2 +GLFW_KEY_KP_3 +GLFW_KEY_KP_4 +GLFW_KEY_KP_5 +GLFW_KEY_KP_6 +GLFW_KEY_KP_7 +GLFW_KEY_KP_8 +GLFW_KEY_KP_9 +GLFW_KEY_KP_DECIMAL +GLFW_KEY_KP_DIVIDE +GLFW_KEY_KP_MULTIPLY +GLFW_KEY_KP_SUBTRACT +GLFW_KEY_KP_ADD +GLFW_KEY_KP_ENTER +GLFW_KEY_KP_EQUAL +GLFW_KEY_LEFT_SHIFT +GLFW_KEY_LEFT_CONTROL +GLFW_KEY_LEFT_ALT +GLFW_KEY_LEFT_SUPER +GLFW_KEY_RIGHT_SHIFT +GLFW_KEY_RIGHT_CONTROL +GLFW_KEY_RIGHT_ALT +GLFW_KEY_RIGHT_SUPER +GLFW_KEY_MENU -- cgit v1.2.1