#pragma once #include #ifdef __cplusplus extern "C" { #endif // Key codes of the IBM PC (American) keyboard typedef enum { input_Key_Unknown = -1, // Unhandled key input_Key_A = 0, // The A key input_Key_B, // The B key input_Key_C, // The C key input_Key_D, // The D key input_Key_E, // The E key input_Key_F, // The F key input_Key_G, // The G key input_Key_H, // The H key input_Key_I, // The I key input_Key_J, // The J key input_Key_K, // The K key input_Key_L, // The L key input_Key_M, // The M key input_Key_N, // The N key input_Key_O, // The O key input_Key_P, // The P key input_Key_Q, // The Q key input_Key_R, // The R key input_Key_S, // The S key input_Key_T, // The T key input_Key_U, // The U key input_Key_V, // The V key input_Key_W, // The W key input_Key_X, // The X key input_Key_Y, // The Y key input_Key_Z, // The Z key input_Key_Num0, // The 0 key input_Key_Num1, // The 1 key input_Key_Num2, // The 2 key input_Key_Num3, // The 3 key input_Key_Num4, // The 4 key input_Key_Num5, // The 5 key input_Key_Num6, // The 6 key input_Key_Num7, // The 7 key input_Key_Num8, // The 8 key input_Key_Num9, // The 9 key input_Key_Escape, // The Escape key input_Key_LControl, // The left Control key input_Key_LShift, // The left Shift key input_Key_LAlt, // The left Alt key input_Key_LSuper, // The left Super (Windows) key input_Key_RControl, // The right Control key input_Key_RShift, // The right Shift key input_Key_RAlt, // The right Alt key input_Key_RSuper, // The right Super (Windows) key input_Key_Menu, // The Menu key input_Key_LBracket, // The [ key input_Key_RBracket, // The ] key input_Key_Semicolon, // The ; key input_Key_Comma, // The , key input_Key_Period, // The . key input_Key_Quote, // The ' key input_Key_Slash, // The / key input_Key_Backslash, // The \ key input_Key_Tilde, // The ~ key input_Key_Equal, // The = key input_Key_Hyphen, // The - key (hyphen) input_Key_Space, // The Space key input_Key_Enter, // The Enter/Return keys input_Key_Backspace, // The Backspace key input_Key_Tab, // The Tabulation key input_Key_PageUp, // The Page up key input_Key_PageDown, // The Page down key input_Key_End, // The End key input_Key_Home, // The Home key input_Key_Insert, // The Insert key input_Key_Delete, // The Delete key input_Key_Add, // The + key input_Key_Subtract, // The - key (minus, usually from numpad) input_Key_Multiply, // The * key input_Key_Divide, // The / key input_Key_Left, // Left arrow input_Key_Right, // Right arrow input_Key_Up, // Up arrow input_Key_Down, // Down arrow input_Key_Numpad0, // The numpad 0 key input_Key_Numpad1, // The numpad 1 key input_Key_Numpad2, // The numpad 2 key input_Key_Numpad3, // The numpad 3 key input_Key_Numpad4, // The numpad 4 key input_Key_Numpad5, // The numpad 5 key input_Key_Numpad6, // The numpad 6 key input_Key_Numpad7, // The numpad 7 key input_Key_Numpad8, // The numpad 8 key input_Key_Numpad9, // The numpad 9 key input_Key_F1, // The F1 key input_Key_F2, // The F2 key input_Key_F3, // The F3 key input_Key_F4, // The F4 key input_Key_F5, // The F5 key input_Key_F6, // The F6 key input_Key_F7, // The F7 key input_Key_F8, // The F8 key input_Key_F9, // The F9 key input_Key_F10, // The F10 key input_Key_F11, // The F11 key input_Key_F12, // The F12 key input_Key_F13, // The F13 key input_Key_F14, // The F14 key input_Key_F15, // The F15 key input_Key_Pause, // The Pause key input_Key_Count, // Keep last - the total number of keyboard keys } input_Key; typedef enum { input_MouseButton_Left, // Left mouse button input_MouseButton_Right, // Right mouse button input_MouseButton_Middle, // Middle (scrollwheel) button input_MouseButton_4, // 4th mouse button input_MouseButton_5, // 5th mouse button input_MouseButton_Count // Keep last - the number of mouse buttons } input_MouseButton; typedef enum { input_EventType_MouseMoved, // Mouse has been moved (data event.MouseMove) input_EventType_MouseButtonPressed, // Mouse button has been pressed (data event.MouseButton) input_EventType_MouseButtonReleased, // Mouse button has been released (data event.MouseButton) input_EventType_KeyPressed, // Keyboard key has been pressed (data event.Key) input_EventType_KeyReleased, // Keyboard key has been released (data event.Key) input_EventType_Count // Number of the event types } input_EventType; typedef struct { input_EventType Type; union { struct { int X, Y; // New position of the mouse } MouseMove; struct { input_MouseButton Button; // Button int X, Y; // Position of the mouse } MouseButton; struct { input_Key Key; // Key code bool Control, Shift, Alt, Super; // Is the modifier keys pressed? } Key; }; } input_Event; #ifdef __cplusplus } #endif