iron_system.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. #pragma once
  2. #include <iron_global.h>
  3. #include <stdbool.h>
  4. #include <stddef.h>
  5. #include <stdint.h>
  6. #include <stdarg.h>
  7. void iron_log(const char *format, ...);
  8. void iron_error(const char *format, ...);
  9. typedef struct iron_display_mode {
  10. int x;
  11. int y;
  12. int width;
  13. int height;
  14. int pixels_per_inch;
  15. int frequency;
  16. int bits_per_pixel;
  17. } iron_display_mode_t;
  18. void iron_display_init(void);
  19. int iron_primary_display(void);
  20. int iron_count_displays(void);
  21. iron_display_mode_t iron_display_current_mode(int display_index);
  22. typedef enum {
  23. IRON_CURSOR_ARROW,
  24. IRON_CURSOR_HAND,
  25. IRON_CURSOR_IBEAM,
  26. IRON_CURSOR_SIZEWE,
  27. IRON_CURSOR_SIZENS
  28. } iron_cursor_t;
  29. typedef enum {
  30. IRON_WINDOW_MODE_WINDOW,
  31. IRON_WINDOW_MODE_FULLSCREEN
  32. } iron_window_mode_t;
  33. #define IRON_WINDOW_FEATURE_RESIZEABLE 1
  34. #define IRON_WINDOW_FEATURE_MINIMIZABLE 2
  35. #define IRON_WINDOW_FEATURE_MAXIMIZABLE 4
  36. #define IRON_WINDOW_FEATURE_BORDERLESS 8
  37. #define IRON_WINDOW_FEATURE_ON_TOP 16
  38. typedef struct iron_window_options {
  39. const char *title;
  40. int x;
  41. int y;
  42. int width;
  43. int height;
  44. int features;
  45. iron_window_mode_t mode;
  46. int frequency;
  47. bool vsync;
  48. int display_index;
  49. bool visible;
  50. int color_bits;
  51. int depth_bits;
  52. } iron_window_options_t;
  53. void iron_window_create(iron_window_options_t *win);
  54. void iron_window_destroy();
  55. void iron_window_resize(int width, int height);
  56. void iron_window_move(int x, int y);
  57. void iron_window_change_mode(iron_window_mode_t mode);
  58. int iron_window_x();
  59. int iron_window_y();
  60. int iron_window_width();
  61. int iron_window_height();
  62. int iron_window_display();
  63. iron_window_mode_t iron_window_get_mode();
  64. void iron_window_show();
  65. void iron_window_hide();
  66. void iron_window_set_title(const char *title);
  67. void iron_window_set_resize_callback(void (*callback)(int x, int y, void *data), void *data);
  68. void iron_window_set_close_callback(bool (*callback)(void *data), void *data);
  69. void iron_internal_call_resize_callback(int width, int height);
  70. bool iron_internal_call_close_callback();
  71. void iron_init(iron_window_options_t *win);
  72. const char *iron_application_name(void);
  73. void iron_set_app_name(const char *name);
  74. void iron_load_url(const char *url);
  75. const char *iron_system_id(void);
  76. const char *iron_language(void);
  77. double iron_frequency(void);
  78. uint64_t iron_timestamp(void);
  79. int iron_hardware_threads(void);
  80. double iron_time(void);
  81. void iron_start(void);
  82. void iron_stop(void);
  83. void iron_set_keep_screen_on(bool on);
  84. void iron_copy_to_clipboard(const char *text);
  85. void iron_set_update_callback(void (*callback)(void *), void *data);
  86. void iron_set_foreground_callback(void (*callback)(void *), void *data);
  87. void iron_set_resume_callback(void (*callback)(void *), void *data);
  88. void iron_set_pause_callback(void (*callback)(void *), void *data);
  89. void iron_set_background_callback(void (*callback)(void *), void *data);
  90. void iron_set_shutdown_callback(void (*callback)(void *), void *data);
  91. void iron_set_drop_files_callback(void (*callback)(wchar_t *, void *), void *data);
  92. void iron_set_cut_callback(char *(*callback)(void *), void *data);
  93. void iron_set_copy_callback(char *(*callback)(void *), void *data);
  94. void iron_set_paste_callback(void (*callback)(char *, void *), void *data);
  95. bool iron_internal_frame(void);
  96. const char *iron_internal_save_path(void);
  97. bool iron_internal_handle_messages(void);
  98. void iron_internal_shutdown(void);
  99. void iron_internal_update_callback(void);
  100. void iron_internal_foreground_callback(void);
  101. void iron_internal_resume_callback(void);
  102. void iron_internal_pause_callback(void);
  103. void iron_internal_background_callback(void);
  104. void iron_internal_shutdown_callback(void);
  105. void iron_internal_drop_files_callback(wchar_t *);
  106. char *iron_internal_cut_callback(void);
  107. char *iron_internal_copy_callback(void);
  108. void iron_internal_paste_callback(char *);
  109. #define IRON_KEY_UNKNOWN 0
  110. #define IRON_KEY_BACK 1 // Android
  111. #define IRON_KEY_CANCEL 3
  112. #define IRON_KEY_HELP 6
  113. #define IRON_KEY_BACKSPACE 8
  114. #define IRON_KEY_TAB 9
  115. #define IRON_KEY_CLEAR 12
  116. #define IRON_KEY_RETURN 13
  117. #define IRON_KEY_SHIFT 16
  118. #define IRON_KEY_CONTROL 17
  119. #define IRON_KEY_ALT 18
  120. #define IRON_KEY_PAUSE 19
  121. #define IRON_KEY_CAPS_LOCK 20
  122. #define IRON_KEY_KANA 21
  123. #define IRON_KEY_HANGUL 21
  124. #define IRON_KEY_EISU 22
  125. #define IRON_KEY_JUNJA 23
  126. #define IRON_KEY_FINAL 24
  127. #define IRON_KEY_HANJA 25
  128. #define IRON_KEY_KANJI 25
  129. #define IRON_KEY_ESCAPE 27
  130. #define IRON_KEY_CONVERT 28
  131. #define IRON_KEY_NON_CONVERT 29
  132. #define IRON_KEY_ACCEPT 30
  133. #define IRON_KEY_MODE_CHANGE 31
  134. #define IRON_KEY_SPACE 32
  135. #define IRON_KEY_PAGE_UP 33
  136. #define IRON_KEY_PAGE_DOWN 34
  137. #define IRON_KEY_END 35
  138. #define IRON_KEY_HOME 36
  139. #define IRON_KEY_LEFT 37
  140. #define IRON_KEY_UP 38
  141. #define IRON_KEY_RIGHT 39
  142. #define IRON_KEY_DOWN 40
  143. #define IRON_KEY_SELECT 41
  144. #define IRON_KEY_PRINT 42
  145. #define IRON_KEY_EXECUTE 43
  146. #define IRON_KEY_PRINT_SCREEN 44
  147. #define IRON_KEY_INSERT 45
  148. #define IRON_KEY_DELETE 46
  149. #define IRON_KEY_0 48
  150. #define IRON_KEY_1 49
  151. #define IRON_KEY_2 50
  152. #define IRON_KEY_3 51
  153. #define IRON_KEY_4 52
  154. #define IRON_KEY_5 53
  155. #define IRON_KEY_6 54
  156. #define IRON_KEY_7 55
  157. #define IRON_KEY_8 56
  158. #define IRON_KEY_9 57
  159. #define IRON_KEY_COLON 58
  160. #define IRON_KEY_SEMICOLON 59
  161. #define IRON_KEY_LESS_THAN 60
  162. #define IRON_KEY_EQUALS 61
  163. #define IRON_KEY_GREATER_THAN 62
  164. #define IRON_KEY_QUESTIONMARK 63
  165. #define IRON_KEY_AT 64
  166. #define IRON_KEY_A 65
  167. #define IRON_KEY_B 66
  168. #define IRON_KEY_C 67
  169. #define IRON_KEY_D 68
  170. #define IRON_KEY_E 69
  171. #define IRON_KEY_F 70
  172. #define IRON_KEY_G 71
  173. #define IRON_KEY_H 72
  174. #define IRON_KEY_I 73
  175. #define IRON_KEY_J 74
  176. #define IRON_KEY_K 75
  177. #define IRON_KEY_L 76
  178. #define IRON_KEY_M 77
  179. #define IRON_KEY_N 78
  180. #define IRON_KEY_O 79
  181. #define IRON_KEY_P 80
  182. #define IRON_KEY_Q 81
  183. #define IRON_KEY_R 82
  184. #define IRON_KEY_S 83
  185. #define IRON_KEY_T 84
  186. #define IRON_KEY_U 85
  187. #define IRON_KEY_V 86
  188. #define IRON_KEY_W 87
  189. #define IRON_KEY_X 88
  190. #define IRON_KEY_Y 89
  191. #define IRON_KEY_Z 90
  192. #define IRON_KEY_WIN 91
  193. #define IRON_KEY_CONTEXT_MENU 93
  194. #define IRON_KEY_SLEEP 95
  195. #define IRON_KEY_NUMPAD_0 96
  196. #define IRON_KEY_NUMPAD_1 97
  197. #define IRON_KEY_NUMPAD_2 98
  198. #define IRON_KEY_NUMPAD_3 99
  199. #define IRON_KEY_NUMPAD_4 100
  200. #define IRON_KEY_NUMPAD_5 101
  201. #define IRON_KEY_NUMPAD_6 102
  202. #define IRON_KEY_NUMPAD_7 103
  203. #define IRON_KEY_NUMPAD_8 104
  204. #define IRON_KEY_NUMPAD_9 105
  205. #define IRON_KEY_MULTIPLY 106
  206. #define IRON_KEY_ADD 107
  207. #define IRON_KEY_SEPARATOR 108
  208. #define IRON_KEY_SUBTRACT 109
  209. #define IRON_KEY_DECIMAL 110
  210. #define IRON_KEY_DIVIDE 111
  211. #define IRON_KEY_F1 112
  212. #define IRON_KEY_F2 113
  213. #define IRON_KEY_F3 114
  214. #define IRON_KEY_F4 115
  215. #define IRON_KEY_F5 116
  216. #define IRON_KEY_F6 117
  217. #define IRON_KEY_F7 118
  218. #define IRON_KEY_F8 119
  219. #define IRON_KEY_F9 120
  220. #define IRON_KEY_F10 121
  221. #define IRON_KEY_F11 122
  222. #define IRON_KEY_F12 123
  223. #define IRON_KEY_F13 124
  224. #define IRON_KEY_F14 125
  225. #define IRON_KEY_F15 126
  226. #define IRON_KEY_F16 127
  227. #define IRON_KEY_F17 128
  228. #define IRON_KEY_F18 129
  229. #define IRON_KEY_F19 130
  230. #define IRON_KEY_F20 131
  231. #define IRON_KEY_F21 132
  232. #define IRON_KEY_F22 133
  233. #define IRON_KEY_F23 134
  234. #define IRON_KEY_F24 135
  235. #define IRON_KEY_NUM_LOCK 144
  236. #define IRON_KEY_SCROLL_LOCK 145
  237. #define IRON_KEY_WIN_OEM_FJ_JISHO 146
  238. #define IRON_KEY_WIN_OEM_FJ_MASSHOU 147
  239. #define IRON_KEY_WIN_OEM_FJ_TOUROKU 148
  240. #define IRON_KEY_WIN_OEM_FJ_LOYA 149
  241. #define IRON_KEY_WIN_OEM_FJ_ROYA 150
  242. #define IRON_KEY_CIRCUMFLEX 160
  243. #define IRON_KEY_EXCLAMATION 161
  244. #define IRON_KEY_DOUBLE_QUOTE 162
  245. #define IRON_KEY_HASH 163
  246. #define IRON_KEY_DOLLAR 164
  247. #define IRON_KEY_PERCENT 165
  248. #define IRON_KEY_AMPERSAND 166
  249. #define IRON_KEY_UNDERSCORE 167
  250. #define IRON_KEY_OPEN_PAREN 168
  251. #define IRON_KEY_CLOSE_PAREN 169
  252. #define IRON_KEY_ASTERISK 170
  253. #define IRON_KEY_PLUS 171
  254. #define IRON_KEY_PIPE 172
  255. #define IRON_KEY_HYPHEN_MINUS 173
  256. #define IRON_KEY_OPEN_CURLY_BRACKET 174
  257. #define IRON_KEY_CLOSE_CURLY_BRACKET 175
  258. #define IRON_KEY_TILDE 176
  259. #define IRON_KEY_VOLUME_MUTE 181
  260. #define IRON_KEY_VOLUME_DOWN 182
  261. #define IRON_KEY_VOLUME_UP 183
  262. #define IRON_KEY_COMMA 188
  263. #define IRON_KEY_PERIOD 190
  264. #define IRON_KEY_SLASH 191
  265. #define IRON_KEY_BACK_QUOTE 192
  266. #define IRON_KEY_OPEN_BRACKET 219
  267. #define IRON_KEY_BACK_SLASH 220
  268. #define IRON_KEY_CLOSE_BRACKET 221
  269. #define IRON_KEY_QUOTE 222
  270. #define IRON_KEY_META 224
  271. #define IRON_KEY_ALT_GR 225
  272. #define IRON_KEY_WIN_ICO_HELP 227
  273. #define IRON_KEY_WIN_ICO_00 228
  274. #define IRON_KEY_WIN_ICO_CLEAR 230
  275. #define IRON_KEY_WIN_OEM_RESET 233
  276. #define IRON_KEY_WIN_OEM_JUMP 234
  277. #define IRON_KEY_WIN_OEM_PA1 235
  278. #define IRON_KEY_WIN_OEM_PA2 236
  279. #define IRON_KEY_WIN_OEM_PA3 237
  280. #define IRON_KEY_WIN_OEM_WSCTRL 238
  281. #define IRON_KEY_WIN_OEM_CUSEL 239
  282. #define IRON_KEY_WIN_OEM_ATTN 240
  283. #define IRON_KEY_WIN_OEM_FINISH 241
  284. #define IRON_KEY_WIN_OEM_COPY 242
  285. #define IRON_KEY_WIN_OEM_AUTO 243
  286. #define IRON_KEY_WIN_OEM_ENLW 244
  287. #define IRON_KEY_WIN_OEM_BACK_TAB 245
  288. #define IRON_KEY_ATTN 246
  289. #define IRON_KEY_CRSEL 247
  290. #define IRON_KEY_EXSEL 248
  291. #define IRON_KEY_EREOF 249
  292. #define IRON_KEY_PLAY 250
  293. #define IRON_KEY_ZOOM 251
  294. #define IRON_KEY_PA1 253
  295. #define IRON_KEY_WIN_OEM_CLEAR 254
  296. void iron_keyboard_show(void);
  297. void iron_keyboard_hide(void);
  298. bool iron_keyboard_active(void);
  299. void iron_keyboard_set_key_down_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data);
  300. void iron_keyboard_set_key_up_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data);
  301. void iron_keyboard_set_key_press_callback(void (*value)(unsigned /*character*/, void * /*data*/), void *data);
  302. void iron_internal_keyboard_trigger_key_down(int key_code);
  303. void iron_internal_keyboard_trigger_key_up(int key_code);
  304. void iron_internal_keyboard_trigger_key_press(unsigned character);
  305. void iron_mouse_set_press_callback(void (*value)(int /*button*/, int /*x*/, int /*y*/, void * /*data*/), void *data);
  306. void iron_mouse_set_release_callback(void (*value)(int /*button*/, int /*x*/, int /*y*/, void * /*data*/), void *data);
  307. void iron_mouse_set_move_callback(void (*value)(int /*x*/, int /*y*/, int /*movement_x*/, int /*movement_y*/, void * /*data*/), void *data);
  308. void iron_mouse_set_scroll_callback(void (*value)(int /*delta*/, void * /*data*/), void *data);
  309. bool iron_mouse_can_lock(void);
  310. bool iron_mouse_is_locked(void);
  311. void iron_mouse_lock();
  312. void iron_mouse_unlock(void);
  313. void iron_mouse_set_cursor(iron_cursor_t cursor);
  314. void iron_mouse_show(void);
  315. void iron_mouse_hide(void);
  316. void iron_mouse_set_position(int x, int y);
  317. void iron_mouse_get_position(int *x, int *y);
  318. void iron_internal_mouse_trigger_press(int button, int x, int y);
  319. void iron_internal_mouse_trigger_release(int button, int x, int y);
  320. void iron_internal_mouse_trigger_move(int x, int y);
  321. void iron_internal_mouse_trigger_scroll(int delta);
  322. void iron_internal_mouse_lock();
  323. void iron_internal_mouse_unlock(void);
  324. void iron_internal_mouse_window_activated();
  325. void iron_internal_mouse_window_deactivated();
  326. void iron_pen_set_press_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
  327. void iron_pen_set_move_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
  328. void iron_pen_set_release_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
  329. void iron_eraser_set_press_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
  330. void iron_eraser_set_move_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
  331. void iron_eraser_set_release_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
  332. void iron_internal_pen_trigger_move(int x, int y, float pressure);
  333. void iron_internal_pen_trigger_press(int x, int y, float pressure);
  334. void iron_internal_pen_trigger_release(int x, int y, float pressure);
  335. void iron_internal_eraser_trigger_move(int x, int y, float pressure);
  336. void iron_internal_eraser_trigger_press(int x, int y, float pressure);
  337. void iron_internal_eraser_trigger_release(int x, int y, float pressure);
  338. void iron_surface_set_touch_start_callback(void (*value)(int /*index*/, int /*x*/, int /*y*/));
  339. void iron_surface_set_move_callback(void (*value)(int /*index*/, int /*x*/, int /*y*/));
  340. void iron_surface_set_touch_end_callback(void (*value)(int /*index*/, int /*x*/, int /*y*/));
  341. void iron_internal_surface_trigger_touch_start(int index, int x, int y);
  342. void iron_internal_surface_trigger_move(int index, int x, int y);
  343. void iron_internal_surface_trigger_touch_end(int index, int x, int y);
  344. #ifdef WITH_GAMEPAD
  345. #define IRON_GAMEPAD_MAX_COUNT 8
  346. void iron_gamepad_set_connect_callback(void (*value)(int /*gamepad*/, void * /*userdata*/), void *userdata);
  347. void iron_gamepad_set_disconnect_callback(void (*value)(int /*gamepad*/, void * /*userdata*/), void *userdata);
  348. void iron_gamepad_set_axis_callback(void (*value)(int /*gamepad*/, int /*axis*/, float /*value*/, void * /*userdata*/), void *userdata);
  349. void iron_gamepad_set_button_callback(void (*value)(int /*gamepad*/, int /*button*/, float /*value*/, void * /*userdata*/), void *userdata);
  350. const char *iron_gamepad_vendor(int gamepad);
  351. const char *iron_gamepad_product_name(int gamepad);
  352. bool iron_gamepad_connected(int gamepad);
  353. void iron_gamepad_rumble(int gamepad, float left, float right);
  354. void iron_internal_gamepad_trigger_connect(int gamepad);
  355. void iron_internal_gamepad_trigger_disconnect(int gamepad);
  356. void iron_internal_gamepad_trigger_axis(int gamepad, int axis, float value);
  357. void iron_internal_gamepad_trigger_button(int gamepad, int button, float value);
  358. #endif