#pragma once

// Copied from GLFW (glfw3.h)

/* The unknown key */
#define FL_KEYCODE_UNKNOWN            -1

/* Printable keys */
#define FL_KEYCODE_SPACE              32
#define FL_KEYCODE_APOSTROPHE         39  /* ' */
#define FL_KEYCODE_COMMA              44  /* , */
#define FL_KEYCODE_MINUS              45  /* - */
#define FL_KEYCODE_PERIOD             46  /* . */
#define FL_KEYCODE_SLASH              47  /* / */
#define FL_KEYCODE_0                  48
#define FL_KEYCODE_1                  49
#define FL_KEYCODE_2                  50
#define FL_KEYCODE_3                  51
#define FL_KEYCODE_4                  52
#define FL_KEYCODE_5                  53
#define FL_KEYCODE_6                  54
#define FL_KEYCODE_7                  55
#define FL_KEYCODE_8                  56
#define FL_KEYCODE_9                  57
#define FL_KEYCODE_SEMICOLON          59  /* ; */
#define FL_KEYCODE_EQUAL              61  /* = */
#define FL_KEYCODE_A                  65
#define FL_KEYCODE_B                  66
#define FL_KEYCODE_C                  67
#define FL_KEYCODE_D                  68
#define FL_KEYCODE_E                  69
#define FL_KEYCODE_F                  70
#define FL_KEYCODE_G                  71
#define FL_KEYCODE_H                  72
#define FL_KEYCODE_I                  73
#define FL_KEYCODE_J                  74
#define FL_KEYCODE_K                  75
#define FL_KEYCODE_L                  76
#define FL_KEYCODE_M                  77
#define FL_KEYCODE_N                  78
#define FL_KEYCODE_O                  79
#define FL_KEYCODE_P                  80
#define FL_KEYCODE_Q                  81
#define FL_KEYCODE_R                  82
#define FL_KEYCODE_S                  83
#define FL_KEYCODE_T                  84
#define FL_KEYCODE_U                  85
#define FL_KEYCODE_V                  86
#define FL_KEYCODE_W                  87
#define FL_KEYCODE_X                  88
#define FL_KEYCODE_Y                  89
#define FL_KEYCODE_Z                  90
#define FL_KEYCODE_LEFT_BRACKET       91  /* [ */
#define FL_KEYCODE_BACKSLASH          92  /* \ */
#define FL_KEYCODE_RIGHT_BRACKET      93  /* ] */
#define FL_KEYCODE_GRAVE_ACCENT       96  /* ` */
#define FL_KEYCODE_WORLD_1            161 /* non-US #1 */
#define FL_KEYCODE_WORLD_2            162 /* non-US #2 */

/* Function keys */
#define FL_KEYCODE_ESCAPE             256
#define FL_KEYCODE_ENTER              257
#define FL_KEYCODE_TAB                258
#define FL_KEYCODE_BACKSPACE          259
#define FL_KEYCODE_INSERT             260
#define FL_KEYCODE_DELETE             261
#define FL_KEYCODE_RIGHT              262
#define FL_KEYCODE_LEFT               263
#define FL_KEYCODE_DOWN               264
#define FL_KEYCODE_UP                 265
#define FL_KEYCODE_PAGE_UP            266
#define FL_KEYCODE_PAGE_DOWN          267
#define FL_KEYCODE_HOME               268
#define FL_KEYCODE_END                269
#define FL_KEYCODE_CAPS_LOCK          280
#define FL_KEYCODE_SCROLL_LOCK        281
#define FL_KEYCODE_NUM_LOCK           282
#define FL_KEYCODE_PRINT_SCREEN       283
#define FL_KEYCODE_PAUSE              284
#define FL_KEYCODE_F1                 290
#define FL_KEYCODE_F2                 291
#define FL_KEYCODE_F3                 292
#define FL_KEYCODE_F4                 293
#define FL_KEYCODE_F5                 294
#define FL_KEYCODE_F6                 295
#define FL_KEYCODE_F7                 296
#define FL_KEYCODE_F8                 297
#define FL_KEYCODE_F9                 298
#define FL_KEYCODE_F10                299
#define FL_KEYCODE_F11                300
#define FL_KEYCODE_F12                301
#define FL_KEYCODE_F13                302
#define FL_KEYCODE_F14                303
#define FL_KEYCODE_F15                304
#define FL_KEYCODE_F16                305
#define FL_KEYCODE_F17                306
#define FL_KEYCODE_F18                307
#define FL_KEYCODE_F19                308
#define FL_KEYCODE_F20                309
#define FL_KEYCODE_F21                310
#define FL_KEYCODE_F22                311
#define FL_KEYCODE_F23                312
#define FL_KEYCODE_F24                313
#define FL_KEYCODE_F25                314
#define FL_KEYCODE_KP_0               320
#define FL_KEYCODE_KP_1               321
#define FL_KEYCODE_KP_2               322
#define FL_KEYCODE_KP_3               323
#define FL_KEYCODE_KP_4               324
#define FL_KEYCODE_KP_5               325
#define FL_KEYCODE_KP_6               326
#define FL_KEYCODE_KP_7               327
#define FL_KEYCODE_KP_8               328
#define FL_KEYCODE_KP_9               329
#define FL_KEYCODE_KP_DECIMAL         330
#define FL_KEYCODE_KP_DIVIDE          331
#define FL_KEYCODE_KP_MULTIPLY        332
#define FL_KEYCODE_KP_SUBTRACT        333
#define FL_KEYCODE_KP_ADD             334
#define FL_KEYCODE_KP_ENTER           335
#define FL_KEYCODE_KP_EQUAL           336
#define FL_KEYCODE_LEFT_SHIFT         340
#define FL_KEYCODE_LEFT_CONTROL       341
#define FL_KEYCODE_LEFT_ALT           342
#define FL_KEYCODE_LEFT_SUPER         343
#define FL_KEYCODE_RIGHT_SHIFT        344
#define FL_KEYCODE_RIGHT_CONTROL      345
#define FL_KEYCODE_RIGHT_ALT          346
#define FL_KEYCODE_RIGHT_SUPER        347
#define FL_KEYCODE_MENU               348

#define 	FL_MOUSE_BUTTON_CODE_1   0
#define 	FL_MOUSE_BUTTON_CODE_2   1
#define 	FL_MOUSE_BUTTON_CODE_3   2
#define 	FL_MOUSE_BUTTON_CODE_4   3
#define 	FL_MOUSE_BUTTON_CODE_5   4
#define 	FL_MOUSE_BUTTON_CODE_6   5
#define 	FL_MOUSE_BUTTON_CODE_7   6
#define 	FL_MOUSE_BUTTON_CODE_8   7
#define 	FL_MOUSE_BUTTON_CODE_LAST   FL_MOUSE_BUTTON_CODE_8
#define 	FL_MOUSE_BUTTON_CODE_LEFT   FL_MOUSE_BUTTON_CODE_1
#define 	FL_MOUSE_BUTTON_CODE_RIGHT   FL_MOUSE_BUTTON_CODE_2
#define 	FL_MOUSE_BUTTON_CODE_MIDDLE   FL_MOUSE_BUTTON_CODE_3