From a68d6997a50a348caf541e3f7412fb234dc1c6f4 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sun, 25 Feb 2024 20:52:25 +0000 Subject: [PATCH] Add different return states for ui_noodle --- include/ui.h | 13 ++++++++++--- src/ui.c | 17 +++++++++-------- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/include/ui.h b/include/ui.h index 39b9437..e6765c2 100644 --- a/include/ui.h +++ b/include/ui.h @@ -21,6 +21,8 @@ typedef enum ui_elem_type ui_elem_type; typedef struct ui_elem ui_elem; typedef struct ui_ctx ui_ctx; +typedef struct ui_elem_colours ui_elem_colours; +typedef enum noodle_action noodle_action; enum ui_elem_type { UI_ELEM_NODE, @@ -39,12 +41,17 @@ struct ui_elem { ui_elem_type type; }; -typedef struct ui_elem_colours ui_elem_colours; struct ui_elem_colours { colour fill; colour border; }; +enum noodle_action { + NOODLE_ACTION_NONE, + NOODLE_ACTION_DRAGGING, + NOODLE_ACTION_RELEASED, +}; + struct ui_ctx { u64 count; i64 hovered; @@ -66,7 +73,7 @@ bool ui_button(const window *wnd, ui_ctx *ctx, rect rect, ui_elem_colours colours); bool ui_node(const window *wnd, ui_ctx *ctx, rect rect, ui_elem_colours colours); -bool ui_noodle(const window *wnd, ui_ctx *ctx, line ln, ui_elem_colours colours, - rect parent_node); +noodle_action ui_noodle(const window *wnd, ui_ctx *ctx, line ln, + ui_elem_colours colours, rect parent_node); #endif // !UI_H diff --git a/src/ui.c b/src/ui.c index d0848cb..ebb095a 100644 --- a/src/ui.c +++ b/src/ui.c @@ -141,10 +141,10 @@ bool ui_node(const window *wnd, ui_ctx *ctx, rect rect, return false; } -bool ui_noodle(const window *wnd, ui_ctx *ctx, line ln, ui_elem_colours colours, - rect parent_node) { +noodle_action ui_noodle(const window *wnd, ui_ctx *ctx, line ln, + ui_elem_colours colours, rect parent_node) { if (ctx->count + 1 >= MAX_UI_ELEMENTS) { - return false; + return NOODLE_ACTION_NONE; } u64 id = get_id(ctx); @@ -220,24 +220,25 @@ bool ui_noodle(const window *wnd, ui_ctx *ctx, line ln, ui_elem_colours colours, } if (wnd != ctx->wnd || (ctx->active >= 0 && ctx->active != id)) { - return false; + return NOODLE_ACTION_NONE; } if (ctx->mouse_up) { if (ctx->hovered == ctx->active && ctx->hovered == id) { ctx->hovered = ctx->active = -1; + return NOODLE_ACTION_RELEASED; } - return true; + return NOODLE_ACTION_NONE; } if (ctx->hovered == id && ctx->active == id) { - return true; + return NOODLE_ACTION_DRAGGING; } if (!aabb(bounding_box, ctx->mouse_x, ctx->mouse_y) || aabb(parent_node, ctx->mouse_x, ctx->mouse_y)) { - return false; + return NOODLE_ACTION_NONE; } ctx->hovered = id; @@ -246,7 +247,7 @@ bool ui_noodle(const window *wnd, ui_ctx *ctx, line ln, ui_elem_colours colours, ctx->active = id; } - return false; + return NOODLE_ACTION_NONE; } internal u64 get_id(ui_ctx *ctx) {