Add functionality to draw nodes with user-defined inputs count

This commit is contained in:
2024-02-24 23:53:04 +00:00
parent 30986e3c99
commit 2d31233a1e
4 changed files with 73 additions and 39 deletions

View File

@@ -32,8 +32,8 @@ struct compositor {
ui_ctx ctx;
};
void add_node(compositor *comp, node_type type, node_data data, i32 x, i32 y,
ui_elem_colours colours);
void add_node(compositor *comp, node_type type, node_data data, u64 inputs,
i32 x, i32 y, ui_elem_colours colours);
i32 run_main_loop(void) {
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
@@ -124,8 +124,8 @@ i32 run_main_loop(void) {
if (comp.event.drop.windowID == main_window->id) {
node_data data = (node_data){.path = comp.event.drop.file};
add_node(&comp, NODEYPE_IO, data, comp.ctx.mouse_x, comp.ctx.mouse_y,
io_node_colours);
add_node(&comp, NODEYPE_IO, data, IO_INPUT_COUNT, comp.ctx.mouse_x,
comp.ctx.mouse_y, io_node_colours);
break;
}
@@ -147,8 +147,8 @@ i32 run_main_loop(void) {
if (ui_button(toolbox, &(comp.ctx), rect, button_colours)) {
node_data data = (node_data){.func = ops[i]};
add_node(&comp, NODEYPE_OP, data, comp.ctx.mouse_x, comp.ctx.mouse_y,
op_node_colours);
add_node(&comp, NODEYPE_OP, data, OP_INPUT_COUNT, comp.ctx.mouse_x,
comp.ctx.mouse_y, op_node_colours);
}
}
@@ -175,24 +175,31 @@ i32 run_main_loop(void) {
return EXIT_SUCCESS;
}
void add_node(compositor *comp, node_type type, node_data data, i32 x, i32 y,
ui_elem_colours colours) {
void add_node(compositor *comp, node_type type, node_data data, u64 inputs,
i32 x, i32 y, ui_elem_colours colours) {
if (comp->count + 1 >= MAX_NODES) {
return;
}
comp->nodes[(comp->count)++] = (node){
.node =
(ui_node_elem){
.rec =
(rect){
.topleft.x = x,
.topleft.y = y,
.w = NODE_WIDTH,
.h = NODE_HEIGHT,
},
.noodle = (line){0},
line *noodles = mem_arena_alloc(comp->arena, inputs * sizeof(line));
if (!noodles) {
return;
}
ui_node_elem elem = {
.rec =
(rect){
.topleft.x = x,
.topleft.y = y,
.w = NODE_WIDTH,
.h = NODE_HEIGHT,
},
.inputs = inputs,
.noodles = noodles,
};
comp->nodes[(comp->count)++] = (node){
.node = elem,
.colours = colours,
.type = type,
.data.path = data.path,