forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			295 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			295 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | #pragma once
 | ||
|  | 
 | ||
|  | #include <kinc/global.h>
 | ||
|  | 
 | ||
|  | /*! \file keyboard.h
 | ||
|  |     \brief Provides keyboard-support. | ||
|  | */ | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define KINC_KEY_UNKNOWN 0
 | ||
|  | #define KINC_KEY_BACK 1 // Android
 | ||
|  | #define KINC_KEY_CANCEL 3
 | ||
|  | #define KINC_KEY_HELP 6
 | ||
|  | #define KINC_KEY_BACKSPACE 8
 | ||
|  | #define KINC_KEY_TAB 9
 | ||
|  | #define KINC_KEY_CLEAR 12
 | ||
|  | #define KINC_KEY_RETURN 13
 | ||
|  | #define KINC_KEY_SHIFT 16
 | ||
|  | #define KINC_KEY_CONTROL 17
 | ||
|  | #define KINC_KEY_ALT 18
 | ||
|  | #define KINC_KEY_PAUSE 19
 | ||
|  | #define KINC_KEY_CAPS_LOCK 20
 | ||
|  | #define KINC_KEY_KANA 21
 | ||
|  | #define KINC_KEY_HANGUL 21
 | ||
|  | #define KINC_KEY_EISU 22
 | ||
|  | #define KINC_KEY_JUNJA 23
 | ||
|  | #define KINC_KEY_FINAL 24
 | ||
|  | #define KINC_KEY_HANJA 25
 | ||
|  | #define KINC_KEY_KANJI 25
 | ||
|  | #define KINC_KEY_ESCAPE 27
 | ||
|  | #define KINC_KEY_CONVERT 28
 | ||
|  | #define KINC_KEY_NON_CONVERT 29
 | ||
|  | #define KINC_KEY_ACCEPT 30
 | ||
|  | #define KINC_KEY_MODE_CHANGE 31
 | ||
|  | #define KINC_KEY_SPACE 32
 | ||
|  | #define KINC_KEY_PAGE_UP 33
 | ||
|  | #define KINC_KEY_PAGE_DOWN 34
 | ||
|  | #define KINC_KEY_END 35
 | ||
|  | #define KINC_KEY_HOME 36
 | ||
|  | #define KINC_KEY_LEFT 37
 | ||
|  | #define KINC_KEY_UP 38
 | ||
|  | #define KINC_KEY_RIGHT 39
 | ||
|  | #define KINC_KEY_DOWN 40
 | ||
|  | #define KINC_KEY_SELECT 41
 | ||
|  | #define KINC_KEY_PRINT 42
 | ||
|  | #define KINC_KEY_EXECUTE 43
 | ||
|  | #define KINC_KEY_PRINT_SCREEN 44
 | ||
|  | #define KINC_KEY_INSERT 45
 | ||
|  | #define KINC_KEY_DELETE 46
 | ||
|  | #define KINC_KEY_0 48
 | ||
|  | #define KINC_KEY_1 49
 | ||
|  | #define KINC_KEY_2 50
 | ||
|  | #define KINC_KEY_3 51
 | ||
|  | #define KINC_KEY_4 52
 | ||
|  | #define KINC_KEY_5 53
 | ||
|  | #define KINC_KEY_6 54
 | ||
|  | #define KINC_KEY_7 55
 | ||
|  | #define KINC_KEY_8 56
 | ||
|  | #define KINC_KEY_9 57
 | ||
|  | #define KINC_KEY_COLON 58
 | ||
|  | #define KINC_KEY_SEMICOLON 59
 | ||
|  | #define KINC_KEY_LESS_THAN 60
 | ||
|  | #define KINC_KEY_EQUALS 61
 | ||
|  | #define KINC_KEY_GREATER_THAN 62
 | ||
|  | #define KINC_KEY_QUESTIONMARK 63
 | ||
|  | #define KINC_KEY_AT 64
 | ||
|  | #define KINC_KEY_A 65
 | ||
|  | #define KINC_KEY_B 66
 | ||
|  | #define KINC_KEY_C 67
 | ||
|  | #define KINC_KEY_D 68
 | ||
|  | #define KINC_KEY_E 69
 | ||
|  | #define KINC_KEY_F 70
 | ||
|  | #define KINC_KEY_G 71
 | ||
|  | #define KINC_KEY_H 72
 | ||
|  | #define KINC_KEY_I 73
 | ||
|  | #define KINC_KEY_J 74
 | ||
|  | #define KINC_KEY_K 75
 | ||
|  | #define KINC_KEY_L 76
 | ||
|  | #define KINC_KEY_M 77
 | ||
|  | #define KINC_KEY_N 78
 | ||
|  | #define KINC_KEY_O 79
 | ||
|  | #define KINC_KEY_P 80
 | ||
|  | #define KINC_KEY_Q 81
 | ||
|  | #define KINC_KEY_R 82
 | ||
|  | #define KINC_KEY_S 83
 | ||
|  | #define KINC_KEY_T 84
 | ||
|  | #define KINC_KEY_U 85
 | ||
|  | #define KINC_KEY_V 86
 | ||
|  | #define KINC_KEY_W 87
 | ||
|  | #define KINC_KEY_X 88
 | ||
|  | #define KINC_KEY_Y 89
 | ||
|  | #define KINC_KEY_Z 90
 | ||
|  | #define KINC_KEY_WIN 91
 | ||
|  | #define KINC_KEY_CONTEXT_MENU 93
 | ||
|  | #define KINC_KEY_SLEEP 95
 | ||
|  | #define KINC_KEY_NUMPAD_0 96
 | ||
|  | #define KINC_KEY_NUMPAD_1 97
 | ||
|  | #define KINC_KEY_NUMPAD_2 98
 | ||
|  | #define KINC_KEY_NUMPAD_3 99
 | ||
|  | #define KINC_KEY_NUMPAD_4 100
 | ||
|  | #define KINC_KEY_NUMPAD_5 101
 | ||
|  | #define KINC_KEY_NUMPAD_6 102
 | ||
|  | #define KINC_KEY_NUMPAD_7 103
 | ||
|  | #define KINC_KEY_NUMPAD_8 104
 | ||
|  | #define KINC_KEY_NUMPAD_9 105
 | ||
|  | #define KINC_KEY_MULTIPLY 106
 | ||
|  | #define KINC_KEY_ADD 107
 | ||
|  | #define KINC_KEY_SEPARATOR 108
 | ||
|  | #define KINC_KEY_SUBTRACT 109
 | ||
|  | #define KINC_KEY_DECIMAL 110
 | ||
|  | #define KINC_KEY_DIVIDE 111
 | ||
|  | #define KINC_KEY_F1 112
 | ||
|  | #define KINC_KEY_F2 113
 | ||
|  | #define KINC_KEY_F3 114
 | ||
|  | #define KINC_KEY_F4 115
 | ||
|  | #define KINC_KEY_F5 116
 | ||
|  | #define KINC_KEY_F6 117
 | ||
|  | #define KINC_KEY_F7 118
 | ||
|  | #define KINC_KEY_F8 119
 | ||
|  | #define KINC_KEY_F9 120
 | ||
|  | #define KINC_KEY_F10 121
 | ||
|  | #define KINC_KEY_F11 122
 | ||
|  | #define KINC_KEY_F12 123
 | ||
|  | #define KINC_KEY_F13 124
 | ||
|  | #define KINC_KEY_F14 125
 | ||
|  | #define KINC_KEY_F15 126
 | ||
|  | #define KINC_KEY_F16 127
 | ||
|  | #define KINC_KEY_F17 128
 | ||
|  | #define KINC_KEY_F18 129
 | ||
|  | #define KINC_KEY_F19 130
 | ||
|  | #define KINC_KEY_F20 131
 | ||
|  | #define KINC_KEY_F21 132
 | ||
|  | #define KINC_KEY_F22 133
 | ||
|  | #define KINC_KEY_F23 134
 | ||
|  | #define KINC_KEY_F24 135
 | ||
|  | #define KINC_KEY_NUM_LOCK 144
 | ||
|  | #define KINC_KEY_SCROLL_LOCK 145
 | ||
|  | #define KINC_KEY_WIN_OEM_FJ_JISHO 146
 | ||
|  | #define KINC_KEY_WIN_OEM_FJ_MASSHOU 147
 | ||
|  | #define KINC_KEY_WIN_OEM_FJ_TOUROKU 148
 | ||
|  | #define KINC_KEY_WIN_OEM_FJ_LOYA 149
 | ||
|  | #define KINC_KEY_WIN_OEM_FJ_ROYA 150
 | ||
|  | #define KINC_KEY_CIRCUMFLEX 160
 | ||
|  | #define KINC_KEY_EXCLAMATION 161
 | ||
|  | #define KINC_KEY_DOUBLE_QUOTE 162
 | ||
|  | #define KINC_KEY_HASH 163
 | ||
|  | #define KINC_KEY_DOLLAR 164
 | ||
|  | #define KINC_KEY_PERCENT 165
 | ||
|  | #define KINC_KEY_AMPERSAND 166
 | ||
|  | #define KINC_KEY_UNDERSCORE 167
 | ||
|  | #define KINC_KEY_OPEN_PAREN 168
 | ||
|  | #define KINC_KEY_CLOSE_PAREN 169
 | ||
|  | #define KINC_KEY_ASTERISK 170
 | ||
|  | #define KINC_KEY_PLUS 171
 | ||
|  | #define KINC_KEY_PIPE 172
 | ||
|  | #define KINC_KEY_HYPHEN_MINUS 173
 | ||
|  | #define KINC_KEY_OPEN_CURLY_BRACKET 174
 | ||
|  | #define KINC_KEY_CLOSE_CURLY_BRACKET 175
 | ||
|  | #define KINC_KEY_TILDE 176
 | ||
|  | #define KINC_KEY_VOLUME_MUTE 181
 | ||
|  | #define KINC_KEY_VOLUME_DOWN 182
 | ||
|  | #define KINC_KEY_VOLUME_UP 183
 | ||
|  | #define KINC_KEY_COMMA 188
 | ||
|  | #define KINC_KEY_PERIOD 190
 | ||
|  | #define KINC_KEY_SLASH 191
 | ||
|  | #define KINC_KEY_BACK_QUOTE 192
 | ||
|  | #define KINC_KEY_OPEN_BRACKET 219
 | ||
|  | #define KINC_KEY_BACK_SLASH 220
 | ||
|  | #define KINC_KEY_CLOSE_BRACKET 221
 | ||
|  | #define KINC_KEY_QUOTE 222
 | ||
|  | #define KINC_KEY_META 224
 | ||
|  | #define KINC_KEY_ALT_GR 225
 | ||
|  | #define KINC_KEY_WIN_ICO_HELP 227
 | ||
|  | #define KINC_KEY_WIN_ICO_00 228
 | ||
|  | #define KINC_KEY_WIN_ICO_CLEAR 230
 | ||
|  | #define KINC_KEY_WIN_OEM_RESET 233
 | ||
|  | #define KINC_KEY_WIN_OEM_JUMP 234
 | ||
|  | #define KINC_KEY_WIN_OEM_PA1 235
 | ||
|  | #define KINC_KEY_WIN_OEM_PA2 236
 | ||
|  | #define KINC_KEY_WIN_OEM_PA3 237
 | ||
|  | #define KINC_KEY_WIN_OEM_WSCTRL 238
 | ||
|  | #define KINC_KEY_WIN_OEM_CUSEL 239
 | ||
|  | #define KINC_KEY_WIN_OEM_ATTN 240
 | ||
|  | #define KINC_KEY_WIN_OEM_FINISH 241
 | ||
|  | #define KINC_KEY_WIN_OEM_COPY 242
 | ||
|  | #define KINC_KEY_WIN_OEM_AUTO 243
 | ||
|  | #define KINC_KEY_WIN_OEM_ENLW 244
 | ||
|  | #define KINC_KEY_WIN_OEM_BACK_TAB 245
 | ||
|  | #define KINC_KEY_ATTN 246
 | ||
|  | #define KINC_KEY_CRSEL 247
 | ||
|  | #define KINC_KEY_EXSEL 248
 | ||
|  | #define KINC_KEY_EREOF 249
 | ||
|  | #define KINC_KEY_PLAY 250
 | ||
|  | #define KINC_KEY_ZOOM 251
 | ||
|  | #define KINC_KEY_PA1 253
 | ||
|  | #define KINC_KEY_WIN_OEM_CLEAR 254
 | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Show the keyboard if the system is using a software-keyboard.
 | ||
|  | /// </summary>
 | ||
|  | KINC_FUNC void kinc_keyboard_show(void); | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Hide the keyboard if the system is using a software-keyboard.
 | ||
|  | /// </summary>
 | ||
|  | KINC_FUNC void kinc_keyboard_hide(void); | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Figure out whether the keyboard is currently shown if the system is using a software-keyboard.
 | ||
|  | /// </summary>
 | ||
|  | /// <returns>Whether the keyboard is currently shown</returns>
 | ||
|  | KINC_FUNC bool kinc_keyboard_active(void); | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Sets the keyboard-key-down-callback which is called with a key-code when a key goes down. Do not use this for text-input, that's what the key-press-callback
 | ||
|  | /// is here for.
 | ||
|  | /// </summary>
 | ||
|  | /// <param name="value">The callback</param>
 | ||
|  | KINC_FUNC void kinc_keyboard_set_key_down_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data); | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Sets the keyboard-key-up-callback which is called with a key-code when a key goes up. Do not use this for text-input, that's what the key-press-callback is
 | ||
|  | /// here for.
 | ||
|  | /// </summary>
 | ||
|  | /// <param name="value">The callback</param>
 | ||
|  | KINC_FUNC void kinc_keyboard_set_key_up_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data); | ||
|  | 
 | ||
|  | /// <summary>
 | ||
|  | /// Sets the keyboard-key-press-callback which is called when the system decides that a character came in via the keyboard. Use this for text-input.
 | ||
|  | /// </summary>
 | ||
|  | /// <param name="value">The callback</param>
 | ||
|  | KINC_FUNC void kinc_keyboard_set_key_press_callback(void (*value)(unsigned /*character*/, void * /*data*/), void *data); | ||
|  | 
 | ||
|  | void kinc_internal_keyboard_trigger_key_down(int key_code); | ||
|  | void kinc_internal_keyboard_trigger_key_up(int key_code); | ||
|  | void kinc_internal_keyboard_trigger_key_press(unsigned character); | ||
|  | 
 | ||
|  | #ifdef KINC_IMPLEMENTATION_INPUT
 | ||
|  | #define KINC_IMPLEMENTATION
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef KINC_IMPLEMENTATION
 | ||
|  | 
 | ||
|  | #include <memory.h>
 | ||
|  | #include <stddef.h>
 | ||
|  | 
 | ||
|  | static void (*keyboard_key_down_callback)(int /*key_code*/, void * /*data*/) = NULL; | ||
|  | static void *keyboard_key_down_callback_data = NULL; | ||
|  | static void (*keyboard_key_up_callback)(int /*key_code*/, void * /*data*/) = NULL; | ||
|  | static void *keyboard_key_up_callback_data = NULL; | ||
|  | static void (*keyboard_key_press_callback)(unsigned /*character*/, void * /*data*/) = NULL; | ||
|  | static void *keyboard_key_press_callback_data = NULL; | ||
|  | 
 | ||
|  | void kinc_keyboard_set_key_down_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data) { | ||
|  | 	keyboard_key_down_callback = value; | ||
|  | 	keyboard_key_down_callback_data = data; | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_keyboard_set_key_up_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data) { | ||
|  | 	keyboard_key_up_callback = value; | ||
|  | 	keyboard_key_up_callback_data = data; | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_keyboard_set_key_press_callback(void (*value)(unsigned /*character*/, void * /*data*/), void *data) { | ||
|  | 	keyboard_key_press_callback = value; | ||
|  | 	keyboard_key_press_callback_data = data; | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_internal_keyboard_trigger_key_down(int key_code) { | ||
|  | 	if (keyboard_key_down_callback != NULL) { | ||
|  | 		keyboard_key_down_callback(key_code, keyboard_key_down_callback_data); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_internal_keyboard_trigger_key_up(int key_code) { | ||
|  | 	if (keyboard_key_up_callback != NULL) { | ||
|  | 		keyboard_key_up_callback(key_code, keyboard_key_up_callback_data); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | void kinc_internal_keyboard_trigger_key_press(unsigned character) { | ||
|  | 	if (keyboard_key_press_callback != NULL) { | ||
|  | 		keyboard_key_press_callback(character, keyboard_key_press_callback_data); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #ifdef __cplusplus
 | ||
|  | } | ||
|  | #endif
 |