Files
armorpaint/base/sources/iron_system.h
T
2026-04-21 10:52:19 +02:00

344 lines
14 KiB
C

#pragma once
#include "iron_array.h"
#include "iron_global.h"
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
typedef enum {
IRON_LOG_LEVEL_INFO,
IRON_LOG_LEVEL_ERROR
} iron_log_level_t;
void iron_log_args(iron_log_level_t level, const char *format, va_list args);
void iron_log(const char *format, ...);
void iron_error(const char *format, ...);
typedef struct iron_display_mode {
int x;
int y;
int width;
int height;
int pixels_per_inch;
int frequency;
int bits_per_pixel;
} iron_display_mode_t;
void iron_display_init(void);
int iron_primary_display(void);
int iron_count_displays(void);
iron_display_mode_t iron_display_current_mode(int display_index);
typedef enum {
IRON_CURSOR_ARROW,
IRON_CURSOR_HAND,
IRON_CURSOR_IBEAM,
IRON_CURSOR_SIZEWE,
IRON_CURSOR_SIZENS
} iron_cursor_t;
typedef enum {
IRON_WINDOW_MODE_WINDOW,
IRON_WINDOW_MODE_FULLSCREEN
} iron_window_mode_t;
typedef enum {
IRON_WINDOW_FEATURES_NONE = 0,
IRON_WINDOW_FEATURES_RESIZABLE = 1,
IRON_WINDOW_FEATURES_MINIMIZABLE = 2,
IRON_WINDOW_FEATURES_MAXIMIZABLE = 4,
} iron_window_features_t;
typedef struct iron_window_options {
const char *title;
int x;
int y;
int width;
int height;
int features;
iron_window_mode_t mode;
int frequency;
bool vsync;
int display_index;
bool visible;
int color_bits;
int depth_bits;
} iron_window_options_t;
void iron_window_create(iron_window_options_t *win);
void iron_window_destroy();
void iron_window_resize(int width, int height);
void iron_window_move(int x, int y);
void iron_window_change_mode(iron_window_mode_t mode);
int iron_window_x();
int iron_window_y();
int iron_window_width();
int iron_window_height();
int iron_window_display();
iron_window_mode_t iron_window_get_mode();
void iron_window_show();
void iron_window_hide();
void iron_window_set_title(const char *title);
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 *data), void *data);
void iron_internal_call_resize_callback(int width, int height);
bool iron_internal_call_close_callback();
void iron_init(iron_window_options_t *win);
const char *iron_application_name(void);
void iron_set_app_name(const char *name);
void iron_load_url(const char *url);
const char *iron_system_id(void);
const char *iron_language(void);
double iron_frequency(void);
uint64_t iron_timestamp(void);
int iron_hardware_threads(void);
double iron_time(void);
void iron_start(void);
void iron_stop(void);
void iron_set_keep_screen_on(bool on);
void iron_exec_async(const char *path, char *argv[]);
extern volatile int iron_exec_async_done;
void iron_copy_to_clipboard(const char *text);
void iron_set_update_callback(void (*callback)(void));
void iron_set_foreground_callback(void (*callback)(void *), void *data);
void iron_set_resume_callback(void (*callback)(void *), void *data);
void iron_set_pause_callback(void (*callback)(void *), void *data);
void iron_set_background_callback(void (*callback)(void *), void *data);
void iron_set_shutdown_callback(void (*callback)(void *), void *data);
void iron_set_drop_files_callback(void (*callback)(char *, void *), void *data);
void iron_set_cut_callback(char *(*callback)(void *), void *data);
void iron_set_copy_callback(char *(*callback)(void *), void *data);
void iron_set_paste_callback(void (*callback)(char *, void *), void *data);
bool iron_internal_frame(void);
const char *iron_internal_save_path(void);
bool iron_internal_handle_messages(void);
void iron_internal_shutdown(void);
void iron_internal_update_callback(void);
void iron_internal_foreground_callback(void);
void iron_internal_resume_callback(void);
void iron_internal_pause_callback(void);
void iron_internal_background_callback(void);
void iron_internal_shutdown_callback(void);
void iron_internal_drop_files_callback(char *);
char *iron_internal_cut_callback(void);
char *iron_internal_copy_callback(void);
void iron_internal_paste_callback(char *);
typedef enum {
KEY_CODE_UNKNOWN = 0,
KEY_CODE_BACK = 1,
KEY_CODE_CANCEL = 3,
KEY_CODE_HELP = 6,
KEY_CODE_BACKSPACE = 8,
KEY_CODE_TAB = 9,
KEY_CODE_RETURN = 13,
KEY_CODE_SHIFT = 16,
KEY_CODE_CONTROL = 17,
KEY_CODE_ALT = 18,
KEY_CODE_PAUSE = 19,
KEY_CODE_CAPS_LOCK = 20,
KEY_CODE_ESCAPE = 27,
KEY_CODE_SPACE = 32,
KEY_CODE_PAGE_UP = 33,
KEY_CODE_PAGE_DOWN = 34,
KEY_CODE_END = 35,
KEY_CODE_HOME = 36,
KEY_CODE_LEFT = 37,
KEY_CODE_UP = 38,
KEY_CODE_RIGHT = 39,
KEY_CODE_DOWN = 40,
KEY_CODE_PRINT_SCREEN = 44,
KEY_CODE_INSERT = 45,
KEY_CODE_DELETE = 46,
KEY_CODE_0 = 48,
KEY_CODE_1 = 49,
KEY_CODE_2 = 50,
KEY_CODE_3 = 51,
KEY_CODE_4 = 52,
KEY_CODE_5 = 53,
KEY_CODE_6 = 54,
KEY_CODE_7 = 55,
KEY_CODE_8 = 56,
KEY_CODE_9 = 57,
KEY_CODE_COLON = 58,
KEY_CODE_SEMICOLON = 59,
KEY_CODE_LESS_THAN = 60,
KEY_CODE_EQUALS = 61,
KEY_CODE_GREATER_THAN = 62,
KEY_CODE_QUESTIONMARK = 63,
KEY_CODE_AT = 64,
KEY_CODE_A = 65,
KEY_CODE_B = 66,
KEY_CODE_C = 67,
KEY_CODE_D = 68,
KEY_CODE_E = 69,
KEY_CODE_F = 70,
KEY_CODE_G = 71,
KEY_CODE_H = 72,
KEY_CODE_I = 73,
KEY_CODE_J = 74,
KEY_CODE_K = 75,
KEY_CODE_L = 76,
KEY_CODE_M = 77,
KEY_CODE_N = 78,
KEY_CODE_O = 79,
KEY_CODE_P = 80,
KEY_CODE_Q = 81,
KEY_CODE_R = 82,
KEY_CODE_S = 83,
KEY_CODE_T = 84,
KEY_CODE_U = 85,
KEY_CODE_V = 86,
KEY_CODE_W = 87,
KEY_CODE_X = 88,
KEY_CODE_Y = 89,
KEY_CODE_Z = 90,
KEY_CODE_WIN = 91,
KEY_CODE_CONTEXT_MENU = 93,
KEY_CODE_SLEEP = 95,
KEY_CODE_NUMPAD_0 = 96,
KEY_CODE_NUMPAD_1 = 97,
KEY_CODE_NUMPAD_2 = 98,
KEY_CODE_NUMPAD_3 = 99,
KEY_CODE_NUMPAD_4 = 100,
KEY_CODE_NUMPAD_5 = 101,
KEY_CODE_NUMPAD_6 = 102,
KEY_CODE_NUMPAD_7 = 103,
KEY_CODE_NUMPAD_8 = 104,
KEY_CODE_NUMPAD_9 = 105,
KEY_CODE_MULTIPLY = 106,
KEY_CODE_ADD = 107,
KEY_CODE_SEPARATOR = 108,
KEY_CODE_SUBTRACT = 109,
KEY_CODE_DECIMAL = 110,
KEY_CODE_DIVIDE = 111,
KEY_CODE_F1 = 112,
KEY_CODE_F2 = 113,
KEY_CODE_F3 = 114,
KEY_CODE_F4 = 115,
KEY_CODE_F5 = 116,
KEY_CODE_F6 = 117,
KEY_CODE_F7 = 118,
KEY_CODE_F8 = 119,
KEY_CODE_F9 = 120,
KEY_CODE_F10 = 121,
KEY_CODE_F11 = 122,
KEY_CODE_F12 = 123,
KEY_CODE_F13 = 124,
KEY_CODE_F14 = 125,
KEY_CODE_F15 = 126,
KEY_CODE_F16 = 127,
KEY_CODE_F17 = 128,
KEY_CODE_F18 = 129,
KEY_CODE_F19 = 130,
KEY_CODE_F20 = 131,
KEY_CODE_F21 = 132,
KEY_CODE_F22 = 133,
KEY_CODE_F23 = 134,
KEY_CODE_F24 = 135,
KEY_CODE_NUM_LOCK = 144,
KEY_CODE_SCROLL_LOCK = 145,
KEY_CODE_EXCLAMATION = 161,
KEY_CODE_DOUBLE_QUOTE = 162,
KEY_CODE_HASH = 163,
KEY_CODE_DOLLAR = 164,
KEY_CODE_PERCENT = 165,
KEY_CODE_AMPERSAND = 166,
KEY_CODE_UNDERSCORE = 167,
KEY_CODE_OPEN_PAREN = 168,
KEY_CODE_CLOSE_PAREN = 169,
KEY_CODE_ASTERISK = 170,
KEY_CODE_PLUS = 171,
KEY_CODE_PIPE = 172,
KEY_CODE_HYPHEN_MINUS = 173,
KEY_CODE_OPEN_CURLY_BRACKET = 174,
KEY_CODE_CLOSE_CURLY_BRACKET = 175,
KEY_CODE_TILDE = 176,
KEY_CODE_VOLUME_MUTE = 181,
KEY_CODE_VOLUME_DOWN = 182,
KEY_CODE_VOLUME_UP = 183,
KEY_CODE_COMMA = 188,
KEY_CODE_PERIOD = 190,
KEY_CODE_SLASH = 191,
KEY_CODE_BACK_QUOTE = 192,
KEY_CODE_OPEN_BRACKET = 219,
KEY_CODE_BACK_SLASH = 220,
KEY_CODE_CLOSE_BRACKET = 221,
KEY_CODE_QUOTE = 222,
KEY_CODE_META = 224,
KEY_CODE_ALT_GR = 225,
} key_code_t;
void iron_keyboard_show(void);
void iron_keyboard_hide(void);
bool iron_keyboard_active(void);
void iron_keyboard_set_key_down_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data);
void iron_keyboard_set_key_up_callback(void (*value)(int /*key_code*/, void * /*data*/), void *data);
void iron_keyboard_set_key_press_callback(void (*value)(unsigned /*character*/, void * /*data*/), void *data);
void iron_internal_keyboard_trigger_key_down(int key_code);
void iron_internal_keyboard_trigger_key_up(int key_code);
void iron_internal_keyboard_trigger_key_press(unsigned character);
void iron_mouse_set_press_callback(void (*value)(int /*button*/, int /*x*/, int /*y*/, void * /*data*/), void *data);
void iron_mouse_set_release_callback(void (*value)(int /*button*/, int /*x*/, int /*y*/, void * /*data*/), void *data);
void iron_mouse_set_move_callback(void (*value)(int /*x*/, int /*y*/, int /*movement_x*/, int /*movement_y*/, void * /*data*/), void *data);
void iron_mouse_set_scroll_callback(void (*value)(float /*delta*/, void * /*data*/), void *data);
bool iron_mouse_can_lock(void);
bool iron_mouse_is_locked(void);
void iron_mouse_lock();
void iron_mouse_unlock(void);
void iron_mouse_set_cursor(iron_cursor_t cursor);
void iron_mouse_show(void);
void iron_mouse_hide(void);
void iron_mouse_set_position(int x, int y);
void iron_mouse_get_position(int *x, int *y);
void iron_internal_mouse_trigger_press(int button, int x, int y);
void iron_internal_mouse_trigger_release(int button, int x, int y);
void iron_internal_mouse_trigger_move(int x, int y);
void iron_internal_mouse_trigger_scroll(float delta);
void iron_internal_mouse_window_activated();
void iron_internal_mouse_window_deactivated();
void iron_pen_set_press_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
void iron_pen_set_move_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
void iron_pen_set_release_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
void iron_eraser_set_press_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
void iron_eraser_set_move_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
void iron_eraser_set_release_callback(void (*value)(int /*x*/, int /*y*/, float /*pressure*/));
void iron_internal_pen_trigger_move(int x, int y, float pressure);
void iron_internal_pen_trigger_press(int x, int y, float pressure);
void iron_internal_pen_trigger_release(int x, int y, float pressure);
void iron_internal_eraser_trigger_move(int x, int y, float pressure);
void iron_internal_eraser_trigger_press(int x, int y, float pressure);
void iron_internal_eraser_trigger_release(int x, int y, float pressure);
void iron_surface_set_touch_start_callback(void (*value)(int /*index*/, int /*x*/, int /*y*/));
void iron_surface_set_move_callback(void (*value)(int /*index*/, int /*x*/, int /*y*/));
void iron_surface_set_touch_end_callback(void (*value)(int /*index*/, int /*x*/, int /*y*/));
void iron_internal_surface_trigger_touch_start(int index, int x, int y);
void iron_internal_surface_trigger_move(int index, int x, int y);
void iron_internal_surface_trigger_touch_end(int index, int x, int y);
#ifdef WITH_GAMEPAD
#define IRON_GAMEPAD_MAX_COUNT 8
void iron_gamepad_set_connect_callback(void (*value)(int /*gamepad*/, void */*userdata*/), void *userdata);
void iron_gamepad_set_disconnect_callback(void (*value)(int /*gamepad*/, void */*userdata*/), void *userdata);
void iron_gamepad_set_axis_callback(void (*value)(int /*gamepad*/, int /*axis*/, float /*value*/, void */*userdata*/), void *userdata);
void iron_gamepad_set_button_callback(void (*value)(int /*gamepad*/, int /*button*/, float /*value*/, void */*userdata*/), void *userdata);
const char *iron_gamepad_vendor(int gamepad);
const char *iron_gamepad_product_name(int gamepad);
bool iron_gamepad_connected(int gamepad);
void iron_gamepad_rumble(int gamepad, float left, float right);
void iron_internal_gamepad_trigger_connect(int gamepad);
void iron_internal_gamepad_trigger_disconnect(int gamepad);
void iron_internal_gamepad_trigger_axis(int gamepad, int axis, float value);
void iron_internal_gamepad_trigger_button(int gamepad, int button, float value);
#endif
i32 iron_sys_command(char *cmd);
string_array_t *iron_open_dialog(char *filter_list, char *default_path, bool open_multiple);
char *iron_save_dialog(char *filter_list, char *default_path);