diff --git a/src/compositor.c b/src/compositor.c index 05c85f4..8324c2d 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -21,10 +21,6 @@ struct compositor { u32 active_window; SDL_Event event; bool running; - u64 mouse_x; - u64 mouse_y; - u64 last_clicked_mouse_x; - u64 last_clicked_mouse_y; i64 node_hovered; u64 count; node_t *nodes; @@ -33,7 +29,7 @@ struct compositor { }; void add_node(compositor_t *comp, node_type_t type, node_data_t data, i32 x, - i32 y); + i32 y, ui_elem_colours_t colours); i32 run_main_loop(void) { if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { @@ -65,6 +61,20 @@ i32 run_main_loop(void) { SDL_EventState(SDL_DROPFILE, SDL_ENABLE); colour_t bg_colour = {.abgr = 0xffffffff}; + ui_elem_colours_t button_colours = (ui_elem_colours_t){ + .fill = (colour_t){.abgr = 0xff89a83c}, + .border = (colour_t){.abgr = 0xff768432}, + }; + ui_elem_colours_t io_node_colours = (ui_elem_colours_t){ + .fill = (colour_t){.abgr = 0xff2c84b7}, + .border = (colour_t){.abgr = 0xff315c89}, + }; + ui_elem_colours_t op_node_colours = (ui_elem_colours_t){ + .fill = (colour_t){.abgr = 0xffad6c3a}, + .border = (colour_t){.abgr = 0xff8e4a33}, + }; + + i32 toolbox_button_x = (toolbox->width - BUTTON_WIDTH) / 2; while (comp.running) { while (SDL_PollEvent(&(comp.event))) { @@ -105,6 +115,15 @@ i32 run_main_loop(void) { } break; + case SDL_DROPFILE: + if (comp.event.drop.windowID == main_window->id) { + node_data_t data = (node_data_t){.path = comp.event.drop.file}; + + add_node(&comp, NODE_TYPE_IO, data, comp.ctx.mouse_x, + comp.ctx.mouse_y, io_node_colours); + + break; + } } } @@ -112,6 +131,27 @@ i32 run_main_loop(void) { clear_window(&(comp.windows[i]), bg_colour); } + for (u64 i = 0; i < COUNT_COMP_OPS; ++i) { + rect_t rect = { + .topleft.x = toolbox_button_x, + .topleft.y = i * (BUTTON_HEIGHT + 20) + 30, + .w = BUTTON_WIDTH, + .h = BUTTON_HEIGHT, + }; + + if (button(toolbox, &(comp.ctx), rect, button_colours)) { + node_data_t data = (node_data_t){.func = ops[i]}; + + add_node(&comp, NODE_TYPE_OP, data, comp.ctx.mouse_x, comp.ctx.mouse_y, + op_node_colours); + } + } + + for (u64 i = 0; i < comp.count; ++i) { + comp.nodes[i].rect = node(main_window, &(comp.ctx), comp.nodes[i].rect, + comp.nodes[i].colours); + } + for (u64 i = 0; i < MAX_WINDOWS; ++i) { swap_buffers(&(comp.windows[i])); } @@ -119,156 +159,6 @@ i32 run_main_loop(void) { reset_ui_ctx(&(comp.ctx)); } -#if 0 - i32 button_x = (toolbox->width - BUTTON_WIDTH) / 2; - for (u64 i = 0; i < COUNT_COMP_OPS; ++i) { - comp.buttons[i] = (button_t){.rect = (rect_t){ - .topleft.x = button_x, - .topleft.y = i * (BUTTON_HEIGHT + 20) + 30, - .w = BUTTON_WIDTH, - .h = BUTTON_HEIGHT, - }}; - } - - while (comp.running) { - while (SDL_PollEvent(&(comp.event))) { - switch (comp.event.type) { - case SDL_QUIT: - comp.running = false; - break; - case SDL_WINDOWEVENT: - switch (comp.event.window.event) { - case SDL_WINDOWEVENT_CLOSE: - comp.running = false; - break; - case SDL_WINDOWEVENT_ENTER: { - u32 id = comp.event.window.windowID; - window_t *wnd = NULL; - - for (u64 i = 0; i < MAX_WINDOWS; ++i) { - window_t *window = &(comp.windows[i]); - - if (id == window->id) { - wnd = window; - break; - } - } - - if (!wnd) { - break; - } - - SDL_RaiseWindow(wnd->window); - - break; - } - } - - break; - case SDL_MOUSEBUTTONDOWN: - if (comp.event.button.windowID == main_window->id) { - if (comp.node_hovered != -1) { - comp.move_node = true; - } - - comp.last_clicked_mouse_x = comp.event.button.x; - comp.last_clicked_mouse_y = comp.event.button.y; - - break; - } else if (comp.event.button.windowID == toolbox->id) { - if (comp.button_hovered != -1) { - comp.button_clicked = comp.button_hovered; - } - - break; - } - case SDL_MOUSEBUTTONUP: - comp.move_node = false; - - if (comp.event.button.windowID == toolbox->id) { - if (comp.button_hovered >= 0 && - comp.button_hovered == comp.button_clicked) { - add_node(&comp, NODE_TYPE_OP, - (node_data_t){.func = ops[comp.button_hovered]}, - comp.last_clicked_mouse_x, comp.last_clicked_mouse_y); - } - - comp.button_clicked = -1; - } - - break; - case SDL_MOUSEMOTION: - comp.button_hovered = -1; - - if (comp.event.motion.windowID == main_window->id) { - comp.mouse_x = comp.event.motion.x; - comp.mouse_y = comp.event.motion.y; - - if (comp.move_node) { - i32 dx = comp.event.motion.xrel; - i32 dy = comp.event.motion.yrel; - - node_t *node = &(comp.nodes[comp.node_hovered]); - - node->rect.topleft.x += dx; - node->rect.topleft.y += dy; - } else { - comp.node_hovered = -1; - - for (u64 i = comp.count - 1; i >= 0; --i) { - rect_t *rect = &(comp.nodes[i].rect); - - if (aabb(rect, comp.mouse_x, comp.mouse_y)) { - comp.node_hovered = i; - break; - } - } - } - - break; - } else if (comp.event.motion.windowID == toolbox->id) { - for (u64 i = COUNT_COMP_OPS - 1; i >= 0; --i) { - rect_t *rect = &(comp.buttons[i].rect); - - if (aabb(rect, comp.event.motion.x, comp.event.motion.y)) { - comp.button_hovered = i; - break; - } - } - - break; - } - case SDL_DROPFILE: - if (comp.event.drop.windowID == main_window->id) { - node_data_t data = (node_data_t){.path = comp.event.drop.file}; - - add_node(&comp, NODE_TYPE_IO, data, comp.mouse_x, comp.mouse_y); - - break; - } - } - } - - for (u64 i = 0; i < MAX_WINDOWS; ++i) { - clear_window(&(comp.windows[i]), bg_colour); - } - - for (u64 i = 0; i < comp.count; ++i) { - node_t *node = &(comp.nodes[i]); - draw_node(main_window, node); - } - - for (u64 i = 0; i < COUNT_COMP_OPS; ++i) { - button_t *button = &(comp.buttons[i]); - draw_button(toolbox, button); - } - - for (u64 i = 0; i < MAX_WINDOWS; ++i) { - swap_buffers(&(comp.windows[i])); - } - } -#endif - for (u64 i = 0; i < MAX_WINDOWS; ++i) { cleanup_window(&(comp.windows[i])); } @@ -278,9 +168,8 @@ i32 run_main_loop(void) { return EXIT_SUCCESS; } -#if 0 void add_node(compositor_t *comp, node_type_t type, node_data_t data, i32 x, - i32 y) { + i32 y, ui_elem_colours_t colours) { if (comp->count + 1 >= MAX_NODES) { return; } @@ -293,8 +182,8 @@ void add_node(compositor_t *comp, node_type_t type, node_data_t data, i32 x, .w = NODE_WIDTH, .h = NODE_HEIGHT, }, + .colours = colours, .type = type, .data.path = data.path, }; } -#endif