Files
armorpaint/base/sources/iron_ui_nodes.h
T
2025-09-26 17:39:45 +02:00

163 lines
3.7 KiB
C

#pragma once
#include "iron_ui.h"
#include "iron_armpack.h"
typedef struct ui_canvas_control {
float pan_x;
float pan_y;
float zoom;
bool controls_down;
} ui_canvas_control_t;
typedef struct ui_node_socket {
int id;
int node_id;
char *name;
char *type;
uint32_t color;
f32_array_t *default_value;
float min;
float max;
float precision;
int display;
} ui_node_socket_t;
typedef struct ui_node_button {
char *name;
char *type;
int output;
f32_array_t *default_value;
u8_array_t *data;
float min;
float max;
float precision;
float height;
} ui_node_button_t;
typedef struct ui_node_socket_array {
ui_node_socket_t **buffer;
int length;
int capacity;
} ui_node_socket_array_t;
typedef struct ui_node_button_array {
ui_node_button_t **buffer;
int length;
int capacity;
} ui_node_button_array_t;
typedef enum ui_node_flag {
NODE_FLAG_NONE = 0,
NODE_FLAG_COLLAPSED = 1,
NODE_FLAG_PREVIEW = 2,
} ui_node_flag_t;
typedef struct ui_node {
int id;
char *name;
char *type;
float x;
float y;
uint32_t color;
ui_node_socket_array_t *inputs;
ui_node_socket_array_t *outputs;
ui_node_button_array_t *buttons;
float width;
int flags; // ui_node_flag_t
} ui_node_t;
typedef struct ui_node_link {
int id;
int from_id;
int from_socket;
int to_id;
int to_socket;
} ui_node_link_t;
typedef struct ui_node_array {
ui_node_t **buffer;
int length;
int capacity;
} ui_node_array_t;
typedef struct ui_node_link_array {
ui_node_link_t **buffer;
int length;
int capacity;
} ui_node_link_array_t;
typedef struct ui_node_canvas {
char *name;
ui_node_array_t *nodes;
ui_node_link_array_t *links;
} ui_node_canvas_t;
typedef struct ui_nodes {
bool nodes_drag;
i32_array_t *nodes_selected_id;
float pan_x;
float pan_y;
float zoom;
int uiw;
int uih;
bool _input_started;
void (*color_picker_callback)(uint32_t);
void *color_picker_callback_data;
float scale_factor;
float ELEMENT_H;
bool dragged;
ui_node_t *move_on_top;
int link_drag_id;
bool is_new_link;
int snap_from_id;
int snap_to_id;
int snap_socket;
float snap_x;
float snap_y;
ui_handle_t *handle;
} ui_nodes_t;
void ui_nodes_init(ui_nodes_t *nodes);
void ui_node_canvas(ui_nodes_t *nodes, ui_node_canvas_t *canvas);
void ui_nodes_rgba_popup(ui_handle_t *nhandle, float *val, int x, int y);
void ui_remove_node(ui_node_t *n, ui_node_canvas_t *canvas);
float UI_NODES_SCALE();
float UI_NODES_PAN_X();
float UI_NODES_PAN_Y();
extern char *ui_clipboard;
extern char_ptr_array_t *ui_nodes_exclude_remove;
extern bool ui_nodes_socket_released;
extern char_ptr_array_t *(*ui_nodes_enum_texts)(char *);
extern void (*ui_nodes_on_custom_button)(int, char *);
extern ui_canvas_control_t *(*ui_nodes_on_canvas_control)(void);
extern void (*ui_nodes_on_canvas_released)(void);
extern void (*ui_nodes_on_socket_released)(int);
extern void (*ui_nodes_on_link_drag)(int, bool);
extern bool ui_nodes_grid_snap;
void ui_node_canvas_encode(ui_node_canvas_t *canvas);
uint32_t ui_node_canvas_encoded_size(ui_node_canvas_t *canvas);
char *ui_node_canvas_to_json(ui_node_canvas_t *canvas);
float UI_NODE_X(ui_node_t *node);
float UI_NODE_Y(ui_node_t *node);
float UI_NODE_W(ui_node_t *node);
float UI_NODE_H(ui_node_canvas_t *canvas, ui_node_t *node);
float UI_OUTPUT_Y(ui_node_t *node, int pos);
float UI_INPUT_Y(ui_node_canvas_t *canvas, ui_node_t *node, int pos);
float UI_OUTPUTS_H(int sockets_count, int length);
float UI_BUTTONS_H(ui_node_t *node);
float UI_LINE_H();
float UI_NODES_PAN_X();
float UI_NODES_PAN_Y();
float ui_p(float f);
int ui_get_socket_id(ui_node_array_t *nodes);
ui_node_link_t *ui_get_link(ui_node_link_array_t *links, int id);
int ui_next_link_id(ui_node_link_array_t *links);
ui_node_t *ui_get_node(ui_node_array_t *nodes, int id);
int ui_next_node_id(ui_node_array_t *nodes);