wasm_system.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include <iron_system.h>
  2. #include <iron_audio.h>
  3. #include <iron_gpu.h>
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. void iron_display_init(void) {}
  8. int iron_primary_display(void) {
  9. return 0;
  10. }
  11. int iron_count_displays(void) {
  12. return 1;
  13. }
  14. iron_display_mode_t iron_display_current_mode(int display_index) {
  15. iron_display_mode_t mode;
  16. mode.x = 0;
  17. mode.y = 0;
  18. mode.width = 800;
  19. mode.height = 600;
  20. mode.pixels_per_inch = 96;
  21. mode.frequency = 60;
  22. mode.bits_per_pixel = 32;
  23. return mode;
  24. }
  25. void iron_internal_mouse_lock() {}
  26. void iron_internal_mouse_unlock(void) {}
  27. bool iron_mouse_can_lock(void) {
  28. return false;
  29. }
  30. void iron_mouse_show() {}
  31. void iron_mouse_hide() {}
  32. void iron_mouse_set_position(int x, int y) {}
  33. void iron_mouse_get_position(int *x, int *y) {}
  34. __attribute__((import_module("imports"), import_name("js_time"))) int js_time();
  35. extern int iron_internal_window_width;
  36. extern int iron_internal_window_height;
  37. void iron_init(iron_window_options_t *win) {
  38. iron_internal_window_width = win->width;
  39. iron_internal_window_height = win->height;
  40. gpu_init(win->depth_bits, true);
  41. }
  42. bool iron_internal_handle_messages() {
  43. return true;
  44. }
  45. void iron_set_keep_screen_on(bool on) {}
  46. double iron_frequency(void) {
  47. return 1000.0;
  48. }
  49. uint64_t iron_timestamp(void) {
  50. return (uint64_t)(js_time());
  51. }
  52. double iron_time(void) {
  53. return js_time() / 1000.0;
  54. }
  55. int iron_hardware_threads(void) {
  56. return 4;
  57. }
  58. void iron_internal_shutdown(void) {}
  59. extern int kickstart(int argc, char **argv);
  60. __attribute__((export_name("_start"))) void _start(void) {
  61. kickstart(0, NULL);
  62. }
  63. __attribute__((export_name("_update"))) void _update(void) {
  64. iron_internal_update_callback();
  65. iron_a2_update();
  66. }
  67. __attribute__((export_name("_mousedown"))) void _mousedown(int button, int x, int y) {
  68. iron_internal_mouse_trigger_press(0, button, x, y);
  69. }
  70. __attribute__((export_name("_mouseup"))) void _mouseup(int button, int x, int y) {
  71. iron_internal_mouse_trigger_release(0, button, x, y);
  72. }
  73. __attribute__((export_name("_mousemove"))) void _mousemove(int x, int y) {
  74. iron_internal_mouse_trigger_move(0, x, y);
  75. }
  76. __attribute__((export_name("_wheel"))) void _wheel(int delta) {
  77. iron_internal_mouse_trigger_scroll(0, delta);
  78. }
  79. __attribute__((export_name("_keydown"))) void _keydown(int key) {
  80. iron_internal_keyboard_trigger_key_down(key);
  81. }
  82. __attribute__((export_name("_keyup"))) void _keyup(int key) {
  83. iron_internal_keyboard_trigger_key_up(key);
  84. }
  85. int iron_internal_window_width = 0;
  86. int iron_internal_window_height = 0;
  87. iron_window_mode_t iron_internal_window_mode = IRON_WINDOW_MODE_WINDOW;
  88. int iron_window_x() {
  89. return 0;
  90. }
  91. int iron_window_y() {
  92. return 0;
  93. }
  94. int iron_window_width() {
  95. return iron_internal_window_width;
  96. }
  97. int iron_window_height() {
  98. return iron_internal_window_height;
  99. }
  100. void iron_window_resize(int width, int height) {}
  101. void iron_window_move(int x, int y) {}
  102. // In HTML5 fullscreen is activable only from user input.
  103. void iron_window_change_mode(iron_window_mode_t mode) {
  104. if (mode == IRON_WINDOW_MODE_FULLSCREEN) {
  105. if (iron_internal_window_mode == IRON_WINDOW_MODE_FULLSCREEN) {
  106. iron_internal_window_mode = mode;
  107. return;
  108. }
  109. // TODO: call js Fullscreen API
  110. iron_internal_window_mode = mode;
  111. }
  112. else {
  113. if (mode == iron_internal_window_mode) {
  114. return;
  115. }
  116. // TODO: call js Fullscreen API
  117. iron_internal_window_mode = mode;
  118. }
  119. }
  120. void iron_window_destroy() {}
  121. void iron_window_show() {}
  122. void iron_window_hide() {}
  123. // TODO: change browser title.
  124. void iron_window_set_title(const char *title) {}
  125. void iron_window_create(iron_window_options_t *win) {}
  126. void iron_window_set_resize_callback(void (*callback)(int x, int y, void *data), void *data) {}
  127. void iron_window_set_close_callback(bool (*callback)(void *), void *data) {}
  128. iron_window_mode_t iron_window_get_mode() {
  129. return iron_internal_window_mode;
  130. }