#pragma once #include #include // Enums typedef enum { STATE_OK = 0, STATE_EXIT = -1, STATE_INVALID_WINDOW = -2, STATE_INVALID_BUFFER = -3, STATE_INTERNAL_ERROR = -4, } UpdateState; typedef enum { MOUSE_BTN_0, // No mouse button MOUSE_BTN_1, MOUSE_BTN_2, MOUSE_BTN_3, MOUSE_BTN_4, MOUSE_BTN_5, MOUSE_BTN_6, MOUSE_BTN_7, } MouseButton; #define MOUSE_LEFT MOUSE_BTN_1 #define MOUSE_RIGHT MOUSE_BTN_2 #define MOUSE_MIDDLE MOUSE_BTN_3 typedef enum { KB_KEY_UNKNOWN = -1, KB_KEY_SPACE = 32, KB_KEY_APOSTROPHE = 39, KB_KEY_COMMA = 44, KB_KEY_MINUS = 45, KB_KEY_PERIOD = 46, KB_KEY_SLASH = 47, KB_KEY_0 = 48, KB_KEY_1 = 49, KB_KEY_2 = 50, KB_KEY_3 = 51, KB_KEY_4 = 52, KB_KEY_5 = 53, KB_KEY_6 = 54, KB_KEY_7 = 55, KB_KEY_8 = 56, KB_KEY_9 = 57, KB_KEY_SEMICOLON = 59, KB_KEY_EQUAL = 61, KB_KEY_A = 65, KB_KEY_B = 66, KB_KEY_C = 67, KB_KEY_D = 68, KB_KEY_E = 69, KB_KEY_F = 70, KB_KEY_G = 71, KB_KEY_H = 72, KB_KEY_I = 73, KB_KEY_J = 74, KB_KEY_K = 75, KB_KEY_L = 76, KB_KEY_M = 77, KB_KEY_N = 78, KB_KEY_O = 79, KB_KEY_P = 80, KB_KEY_Q = 81, KB_KEY_R = 82, KB_KEY_S = 83, KB_KEY_T = 84, KB_KEY_U = 85, KB_KEY_V = 86, KB_KEY_W = 87, KB_KEY_X = 88, KB_KEY_Y = 89, KB_KEY_Z = 90, KB_KEY_LEFT_BRACKET = 91, KB_KEY_BACKSLASH = 92, KB_KEY_RIGHT_BRACKET = 93, KB_KEY_GRAVE_ACCENT = 96, KB_KEY_WORLD_1 = 161, KB_KEY_WORLD_2 = 162, KB_KEY_ESCAPE = 256, KB_KEY_ENTER = 257, KB_KEY_TAB = 258, KB_KEY_BACKSPACE = 259, KB_KEY_INSERT = 260, KB_KEY_DELETE = 261, KB_KEY_RIGHT = 262, KB_KEY_LEFT = 263, KB_KEY_DOWN = 264, KB_KEY_UP = 265, KB_KEY_PAGE_UP = 266, KB_KEY_PAGE_DOWN = 267, KB_KEY_HOME = 268, KB_KEY_END = 269, KB_KEY_CAPS_LOCK = 280, KB_KEY_SCROLL_LOCK = 281, KB_KEY_NUM_LOCK = 282, KB_KEY_PRINT_SCREEN = 283, KB_KEY_PAUSE = 284, KB_KEY_F1 = 290, KB_KEY_F2 = 291, KB_KEY_F3 = 292, KB_KEY_F4 = 293, KB_KEY_F5 = 294, KB_KEY_F6 = 295, KB_KEY_F7 = 296, KB_KEY_F8 = 297, KB_KEY_F9 = 298, KB_KEY_F10 = 299, KB_KEY_F11 = 300, KB_KEY_F12 = 301, KB_KEY_F13 = 302, KB_KEY_F14 = 303, KB_KEY_F15 = 304, KB_KEY_F16 = 305, KB_KEY_F17 = 306, KB_KEY_F18 = 307, KB_KEY_F19 = 308, KB_KEY_F20 = 309, KB_KEY_F21 = 310, KB_KEY_F22 = 311, KB_KEY_F23 = 312, KB_KEY_F24 = 313, KB_KEY_F25 = 314, KB_KEY_KP_0 = 320, KB_KEY_KP_1 = 321, KB_KEY_KP_2 = 322, KB_KEY_KP_3 = 323, KB_KEY_KP_4 = 324, KB_KEY_KP_5 = 325, KB_KEY_KP_6 = 326, KB_KEY_KP_7 = 327, KB_KEY_KP_8 = 328, KB_KEY_KP_9 = 329, KB_KEY_KP_DECIMAL = 330, KB_KEY_KP_DIVIDE = 331, KB_KEY_KP_MULTIPLY = 332, KB_KEY_KP_SUBTRACT = 333, KB_KEY_KP_ADD = 334, KB_KEY_KP_ENTER = 335, KB_KEY_KP_EQUAL = 336, KB_KEY_LEFT_SHIFT = 340, KB_KEY_LEFT_CONTROL = 341, KB_KEY_LEFT_ALT = 342, KB_KEY_LEFT_SUPER = 343, KB_KEY_RIGHT_SHIFT = 344, KB_KEY_RIGHT_CONTROL = 345, KB_KEY_RIGHT_ALT = 346, KB_KEY_RIGHT_SUPER = 347, KB_KEY_MENU = 348 } Key; #define KB_KEY_LAST KB_KEY_MENU typedef enum { KB_MOD_SHIFT = 0x0001, KB_MOD_CONTROL = 0x0002, KB_MOD_ALT = 0x0004, KB_MOD_SUPER = 0x0008, KB_MOD_CAPS_LOCK = 0x0010, KB_MOD_NUM_LOCK = 0x0020 } KeyMod; typedef enum { WF_RESIZABLE = 0x01, WF_FULLSCREEN = 0x02, WF_FULLSCREEN_DESKTOP = 0x04, WF_BORDERLESS = 0x08, WF_ALWAYS_ON_TOP = 0x10, } WindowFlags; // Opaque pointer struct Window; // Event callbacks typedef void(*mfb_active_func)(struct Window *window, bool isActive); typedef void(*mfb_resize_func)(struct Window *window, int width, int height); typedef void(*mfb_keyboard_func)(struct Window *window, Key key, KeyMod mod, bool isPressed); typedef void(*mfb_char_input_func)(struct Window *window, unsigned int code); typedef void(*mfb_mouse_button_func)(struct Window *window, MouseButton button, KeyMod mod, bool isPressed); typedef void(*mfb_mouse_move_func)(struct Window *window, int x, int y); typedef void(*mfb_mouse_scroll_func)(struct Window *window, KeyMod mod, float deltaX, float deltaY);