163 lines
3.7 KiB
C
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);
|