2025-02-26 18:46:36 +01:00
|
|
|
|
|
|
|
|
#include <iron_system.h>
|
|
|
|
|
#include <iron_audio.h>
|
|
|
|
|
#include <iron_gpu.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
void iron_display_init(void) {}
|
2025-02-26 18:46:36 +01:00
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_primary_display(void) {
|
2025-02-26 18:46:36 +01:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_count_displays(void) {
|
2025-02-26 18:46:36 +01:00
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_display_mode_t iron_display_current_mode(int display_index) {
|
|
|
|
|
iron_display_mode_t mode;
|
2025-02-26 18:46:36 +01:00
|
|
|
mode.x = 0;
|
|
|
|
|
mode.y = 0;
|
|
|
|
|
mode.width = 800;
|
|
|
|
|
mode.height = 600;
|
|
|
|
|
mode.pixels_per_inch = 96;
|
|
|
|
|
mode.frequency = 60;
|
|
|
|
|
mode.bits_per_pixel = 32;
|
|
|
|
|
return mode;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
bool iron_mouse_can_lock(void) {
|
2025-02-26 18:46:36 +01:00
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
void iron_mouse_show() {}
|
|
|
|
|
void iron_mouse_hide() {}
|
|
|
|
|
void iron_mouse_set_position(int x, int y) {}
|
|
|
|
|
void iron_mouse_get_position(int *x, int *y) {}
|
2025-02-26 18:46:36 +01:00
|
|
|
|
|
|
|
|
__attribute__((import_module("imports"), import_name("js_time"))) int js_time();
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
extern int iron_internal_window_width;
|
|
|
|
|
extern int iron_internal_window_height;
|
2025-02-26 18:46:36 +01:00
|
|
|
|
2025-08-05 21:20:38 +02:00
|
|
|
void iron_init(iron_window_options_t *win) {
|
|
|
|
|
iron_internal_window_width = win->width;
|
|
|
|
|
iron_internal_window_height = win->height;
|
2025-06-18 20:47:58 +02:00
|
|
|
gpu_init(win->depth_bits, true);
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
bool iron_internal_handle_messages() {
|
2025-02-26 18:46:36 +01:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
void iron_set_keep_screen_on(bool on) {}
|
2025-02-26 18:46:36 +01:00
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
double iron_frequency(void) {
|
2025-02-26 18:46:36 +01:00
|
|
|
return 1000.0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-21 18:36:17 +02:00
|
|
|
uint64_t iron_timestamp(void) {
|
|
|
|
|
return (uint64_t)(js_time());
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
double iron_time(void) {
|
2025-02-26 18:46:36 +01:00
|
|
|
return js_time() / 1000.0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_hardware_threads(void) {
|
2025-02-26 18:46:36 +01:00
|
|
|
return 4;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
void iron_internal_shutdown(void) {}
|
2025-02-26 18:46:36 +01:00
|
|
|
|
|
|
|
|
extern int kickstart(int argc, char **argv);
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_start"))) void _start(void) {
|
|
|
|
|
kickstart(0, NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_update"))) void _update(void) {
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_update_callback();
|
|
|
|
|
iron_a2_update();
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_mousedown"))) void _mousedown(int button, int x, int y) {
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_mouse_trigger_press(0, button, x, y);
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_mouseup"))) void _mouseup(int button, int x, int y) {
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_mouse_trigger_release(0, button, x, y);
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_mousemove"))) void _mousemove(int x, int y) {
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_mouse_trigger_move(0, x, y);
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_wheel"))) void _wheel(int delta) {
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_mouse_trigger_scroll(0, delta);
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_keydown"))) void _keydown(int key) {
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_keyboard_trigger_key_down(key);
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
__attribute__((export_name("_keyup"))) void _keyup(int key) {
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_keyboard_trigger_key_up(key);
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_internal_window_width = 0;
|
|
|
|
|
int iron_internal_window_height = 0;
|
|
|
|
|
iron_window_mode_t iron_internal_window_mode = IRON_WINDOW_MODE_WINDOW;
|
2025-02-26 18:46:36 +01:00
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_window_x() {
|
2025-02-26 18:46:36 +01:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_window_y() {
|
2025-02-26 18:46:36 +01:00
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_window_width() {
|
|
|
|
|
return iron_internal_window_width;
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
int iron_window_height() {
|
|
|
|
|
return iron_internal_window_height;
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
void iron_window_resize(int width, int height) {}
|
|
|
|
|
void iron_window_move(int x, int y) {}
|
2025-02-26 18:46:36 +01:00
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
void iron_window_change_mode(iron_window_mode_t mode) {
|
|
|
|
|
if (mode == IRON_WINDOW_MODE_FULLSCREEN) {
|
|
|
|
|
if (iron_internal_window_mode == IRON_WINDOW_MODE_FULLSCREEN) {
|
|
|
|
|
iron_internal_window_mode = mode;
|
2025-02-26 18:46:36 +01:00
|
|
|
return;
|
|
|
|
|
}
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_window_mode = mode;
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
else {
|
2025-03-09 17:02:12 +01:00
|
|
|
if (mode == iron_internal_window_mode) {
|
2025-02-26 18:46:36 +01:00
|
|
|
return;
|
|
|
|
|
}
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_internal_window_mode = mode;
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
void iron_window_destroy() {}
|
|
|
|
|
void iron_window_show() {}
|
|
|
|
|
void iron_window_hide() {}
|
|
|
|
|
void iron_window_set_title(const char *title) {}
|
|
|
|
|
void iron_window_create(iron_window_options_t *win) {}
|
|
|
|
|
void iron_window_set_resize_callback(void (*callback)(int x, int y, void *data), void *data) {}
|
|
|
|
|
void iron_window_set_close_callback(bool (*callback)(void *), void *data) {}
|
2025-02-26 18:46:36 +01:00
|
|
|
|
2025-03-09 17:02:12 +01:00
|
|
|
iron_window_mode_t iron_window_get_mode() {
|
|
|
|
|
return iron_internal_window_mode;
|
2025-02-26 18:46:36 +01:00
|
|
|
}
|