Files
Server_Monitor/code/lib/event.h

221 lines
3.1 KiB
C
Raw Normal View History

2023-09-26 19:40:16 +02:00
#ifndef _PIUMA_LIB_EVENT_H_
#define _PIUMA_LIB_EVENT_H_
#include "types.h"
#include "math.h"
// Mouse events
// Keyboard events
// Window events (resize, hide, focus)
// Quit
// Other OS events (signals?)
enum Event_Type
{
EVENT_NONE,
EVENT_QUIT,
EVENT_MOUSE_MOVE,
EVENT_KEY,
EVENT_RESIZE,
EVENT_FOCUS,
EVENT_UNFOCUS,
EVENT_TEXT,
EVENT_COUNT
};
// @Performance: a lot of this codes are sequential in Linux. Check with other OSs if that's the case. If it is, we can have faster mapping by subtracting and adding an offset.
enum Key_Code
{
KEY_UNKNOWN = 0,
// @Correctness: check all ascii characters that are on a keyboard
KEY_ENTER = '\r',
KEY_ESCAPE = '\e',
KEY_BACKSPACE = '\b',
KEY_TAB = '\t',
KEY_SPACE = ' ',
KEY_EXCLAMATION = '!',
KEY_DOUBLE_QUOTE = '"',
KEY_HASH = '#',
KEY_PERCENT = '%',
KEY_DOLLAR = '$',
KEY_AMPERSAND = '&',
KEY_SINGLE_QUOTE = '\'',
KEY_LEFT_PARENTHESIS = '(',
KEY_RIGHT_PARENTHESIS = ')',
KEY_ASTERISK = '*',
KEY_PLUS = '+',
KEY_COMMA = ',',
KEY_MINUS = '-',
KEY_PERIOD = '.',
KEY_SLASH = '/',
KEY_0 = '0',
KEY_1 = '1',
KEY_2 = '2',
KEY_3 = '3',
KEY_4 = '4',
KEY_5 = '5',
KEY_6 = '6',
KEY_7 = '7',
KEY_8 = '8',
KEY_9 = '9',
KEY_COLON = ':',
KEY_SEMICOLON = ';',
KEY_LESS = '<',
KEY_EQUALS = '=',
KEY_GREATER = '>',
KEY_QUESTION = '?',
KEY_AT = '@',
KEY_LEFT_BRACKET = '[',
KEY_RIGHT_BRACKET = ']',
KEY_BACKSLASH = '\\',
KEY_CARET = '^',
KEY_UNDERSCORE = '_',
KEY_BACKQUOTE = '`',
KEY_A = 'A',
KEY_B = 'B',
KEY_C = 'C',
KEY_D = 'D',
KEY_E = 'E',
KEY_F = 'F',
KEY_G = 'G',
KEY_H = 'H',
KEY_I = 'I',
KEY_J = 'J',
KEY_K = 'K',
KEY_L = 'L',
KEY_M = 'M',
KEY_N = 'N',
KEY_O = 'O',
KEY_P = 'P',
KEY_Q = 'Q',
KEY_R = 'R',
KEY_S = 'S',
KEY_T = 'T',
KEY_U = 'U',
KEY_V = 'V',
KEY_W = 'W',
KEY_X = 'X',
KEY_Y = 'Y',
KEY_Z = 'Z',
KEY_CAPSLOCK = 1000,
KEY_F1,
KEY_F2,
KEY_F3,
KEY_F4,
KEY_F5,
KEY_F6,
KEY_F7,
KEY_F8,
KEY_F9,
KEY_F10,
KEY_F11,
KEY_F12,
KEY_PRINTSCREEN,
KEY_SCROLLLOCK,
KEY_PAUSE,
KEY_INSERT,
KEY_DELETE,
KEY_HOME,
KEY_END,
KEY_PAGEUP,
KEY_PAGEDOWN,
KEY_ARROW_UP,
KEY_ARROW_DOWN,
KEY_ARROW_LEFT,
KEY_ARROW_RIGHT,
KEY_NUMLOCK,
KEY_PAD_DIVIDE,
KEY_PAD_MULTIPLY,
KEY_PAD_MINUS,
KEY_PAD_PLUS,
KEY_PAD_ENTER,
KEY_PAD_1,
KEY_PAD_2,
KEY_PAD_3,
KEY_PAD_4,
KEY_PAD_5,
KEY_PAD_6,
KEY_PAD_7,
KEY_PAD_8,
KEY_PAD_9,
KEY_PAD_0,
KEY_PAD_PERIOD,
KEY_LEFT_CTRL,
KEY_RIGHT_CTRL,
KEY_LEFT_SHIFT,
KEY_RIGHT_SHIFT,
KEY_LEFT_ALT,
KEY_RIGHT_ALT,
KEY_MOUSE_LEFT,
KEY_MOUSE_MIDDLE,
KEY_MOUSE_RIGHT,
KEY_MOUSE_WHEEL_UP,
KEY_MOUSE_WHEEL_DOWN,
KEY_MOUSE_4,
KEY_MOUSE_5,
// @Correctness: check for more keys in: USB spec, linux libinput/x11/wayland/whatever, windows win32
};
struct Event_Key
{
bool pressed;
Key_Code key_code;
};
struct Event_Mouse_Move
{
bool relative;
union
{
v2 position;
v2 delta;
};
};
struct Event_Resize
{
s32 width, height;
};
struct Event_Text
{
char data[16]; // @Correctness: We have a bug if the os sends text that is longer
};
struct Event
{
Event_Type type;
union
{
Event_Key key;
Event_Mouse_Move mouse_move;
Event_Resize resize;
Event_Text text;
};
};
#endif