summaryrefslogtreecommitdiff
path: root/project-base/src/input.h
diff options
context:
space:
mode:
Diffstat (limited to 'project-base/src/input.h')
-rw-r--r--project-base/src/input.h236
1 files changed, 236 insertions, 0 deletions
diff --git a/project-base/src/input.h b/project-base/src/input.h
new file mode 100644
index 0000000..961c03d
--- /dev/null
+++ b/project-base/src/input.h
@@ -0,0 +1,236 @@
+/*
+* BSD 2-Clause “Simplified” License
+* Copyright (c) 2019, Aldrik Ramaekers, aldrik.ramaekers@protonmail.com
+* All rights reserved.
+*/
+
+#ifndef INCLUDE_INPUT
+#define INCLUDE_INPUT
+
+/* The unknown key */
+#define KEY_UNKNOWN -1
+
+#define MOUSE_OFFSCREEN 32767
+
+/* Printable keys */
+#define KEY_SPACE 32
+#define KEY_APOSTROPHE 39 /* ' */
+#define KEY_COMMA 44 /* , */
+#define KEY_MINUS 45 /* - */
+#define KEY_PERIOD 46 /* . */
+#define KEY_SLASH 47 /* / */
+#define KEY_0 48
+#define KEY_1 49
+#define KEY_2 50
+#define KEY_3 51
+#define KEY_4 52
+#define KEY_5 53
+#define KEY_6 54
+#define KEY_7 55
+#define KEY_8 56
+#define KEY_9 57
+#define KEY_SEMICOLON 59 /* ; */
+#define KEY_EQUAL 61 /* = */
+#define KEY_A 65
+#define KEY_B 66
+#define KEY_C 67
+#define KEY_D 68
+#define KEY_E 69
+#define KEY_F 70
+#define KEY_G 71
+#define KEY_H 72
+#define KEY_I 73
+#define KEY_J 74
+#define KEY_K 75
+#define KEY_L 76
+#define KEY_M 77
+#define KEY_N 78
+#define KEY_O 79
+#define KEY_P 80
+#define KEY_Q 81
+#define KEY_R 82
+#define KEY_S 83
+#define KEY_T 84
+#define KEY_U 85
+#define KEY_V 86
+#define KEY_W 87
+#define KEY_X 88
+#define KEY_Y 89
+#define KEY_Z 90
+#define KEY_LEFT_BRACKET 91 /* [ */
+#define KEY_BACKSLASH 92 /* \ */
+#define KEY_RIGHT_BRACKET 93 /* ] */
+#define KEY_GRAVE_ACCENT 96 /* ` */
+#define KEY_WORLD_1 161 /* non-US #1 */
+#define KEY_WORLD_2 162 /* non-US #2 */
+
+/* Function keys */
+#define KEY_ESCAPE 256
+#define KEY_ENTER 257
+#define KEY_TAB 258
+#define KEY_BACKSPACE 259
+#define KEY_INSERT 260
+#define KEY_DELETE 261
+#define KEY_RIGHT 262
+#define KEY_LEFT 263
+#define KEY_DOWN 264
+#define KEY_UP 265
+#define KEY_PAGE_UP 266
+#define KEY_PAGE_DOWN 267
+#define KEY_HOME 268
+#define KEY_END 269
+#define KEY_CAPS_LOCK 280
+#define KEY_SCROLL_LOCK 281
+#define KEY_NUM_LOCK 282
+#define KEY_PRINT_SCREEN 283
+#define KEY_PAUSE 284
+#define KEY_F1 290
+#define KEY_F2 291
+#define KEY_F3 292
+#define KEY_F4 293
+#define KEY_F5 294
+#define KEY_F6 295
+#define KEY_F7 296
+#define KEY_F8 297
+#define KEY_F9 298
+#define KEY_F10 299
+#define KEY_F11 300
+#define KEY_F12 301
+#define KEY_F13 302
+#define KEY_F14 303
+#define KEY_F15 304
+#define KEY_F16 305
+#define KEY_F17 306
+#define KEY_F18 307
+#define KEY_F19 308
+#define KEY_F20 309
+#define KEY_F21 310
+#define KEY_F22 311
+#define KEY_F23 312
+#define KEY_F24 313
+#define KEY_F25 314
+#define KEY_KP_0 320
+#define KEY_KP_1 321
+#define KEY_KP_2 322
+#define KEY_KP_3 323
+#define KEY_KP_4 324
+#define KEY_KP_5 325
+#define KEY_KP_6 326
+#define KEY_KP_7 327
+#define KEY_KP_8 328
+#define KEY_KP_9 329
+#define KEY_KP_DECIMAL 330
+#define KEY_KP_DIVIDE 331
+#define KEY_KP_MULTIPLY 332
+#define KEY_KP_SUBTRACT 333
+#define KEY_KP_ADD 334
+#define KEY_KP_ENTER 335
+#define KEY_KP_EQUAL 336
+#define KEY_LEFT_SHIFT 340
+#define KEY_LEFT_CONTROL 341
+#define KEY_LEFT_ALT 342
+#define KEY_LEFT_SUPER 343
+#define KEY_RIGHT_SHIFT 344
+#define KEY_RIGHT_CONTROL 345
+#define KEY_RIGHT_ALT 346
+#define KEY_RIGHT_SUPER 347
+#define KEY_MENU 348
+
+#define KEY_LAST KEY_MENU
+
+#define MAX_KEYCODE 512
+
+#define MOUSE_DOWN (1 << 1)
+#define MOUSE_RELEASE (1 << 2)
+#define MOUSE_DOUBLE_CLICK (1 << 3)
+#define MOUSE_CLICK (1 << 4)
+
+#define SCROLL_UP 1
+#define SCROLL_DOWN -1
+
+
+// should be max path length
+#ifdef OS_LINUX
+#define MAX_INPUT_LENGTH 4096+1
+#define MAX_PATH_LENGTH 255+1
+#endif
+
+#ifdef OS_WIN
+#define MAX_INPUT_LENGTH 4096+1
+#define MAX_PATH_LENGTH MAX_PATH+1
+#endif
+
+typedef struct t_mouse_input
+{
+ s16 x;
+ s16 y;
+ s16 move_x;
+ s16 move_y;
+ s16 total_move_x;
+ s16 total_move_y;
+ s8 left_state;
+ s8 right_state;
+ s8 scroll_state;
+ bool last_state_released;
+ bool is_hovering_item;
+ bool inside_of_window;
+} mouse_input;
+
+typedef enum t_keyboard_input_mode
+{
+ INPUT_NUMERIC,
+ INPUT_FULL,
+} keyboard_input_mode;
+
+typedef struct t_keyboard_input
+{
+ keyboard_input_mode input_mode;
+ int modifier_state;
+ bool take_input;
+ u32 cursor;
+
+ // input
+ bool text_changed; // is set when text is pasted in, incase the new text is the same length as the old text so we know to store a new undo entry
+ bool has_selection;
+ s32 selection_begin_offset;
+ s32 selection_length;
+ char *input_text;
+ // input
+
+ s32 input_text_len;
+ bool keys[MAX_KEYCODE];
+ bool input_keys[MAX_KEYCODE];
+} keyboard_input;
+
+int keycode_map[MAX_KEYCODE];
+
+void reset_left_down();
+void reset_left_click();
+void reset_right_click();
+
+bool is_left_down();
+bool is_left_released();
+bool is_left_clicked();
+bool is_left_clicked_peak();
+bool is_left_double_clicked();
+bool is_right_down();
+bool is_right_released();
+bool is_right_clicked();
+
+bool mouse_interacts(s32 x, s32 y, s32 w, s32 h);
+bool mouse_interacts_peak(s32 x, s32 y, s32 w, s32 h);
+
+bool keyboard_is_key_down(s16 key);
+bool keyboard_is_key_pressed(s16 key);
+void keyboard_set_input_text(char *text);
+void keyboard_set_input_mode(keyboard_input_mode mode);
+bool keyboard_is_shortcut_down(s32 shortcut_keys[2]);
+
+typedef struct t_platform_window platform_window;
+void keyboard_handle_input_string(platform_window *window, char *text);
+
+mouse_input mouse_input_create();
+keyboard_input keyboard_input_create();
+void keyboard_input_destroy();
+
+#endif \ No newline at end of file