From 6bd640fc80fbf4a398fc042037c2d3c804386cbc Mon Sep 17 00:00:00 2001 From: Klemen Plestenjak Date: Thu, 21 Dec 2023 15:37:20 +0100 Subject: [PATCH] Simplify node creation --- engine/breeze/ui/ui.c | 62 ++++++++++++++++--------------------------- engine/breeze/ui/ui.h | 11 +------- 2 files changed, 24 insertions(+), 49 deletions(-) diff --git a/engine/breeze/ui/ui.c b/engine/breeze/ui/ui.c index c29f72d..255c71f 100644 --- a/engine/breeze/ui/ui.c +++ b/engine/breeze/ui/ui.c @@ -345,12 +345,10 @@ void bzUIEnd(BzUI *ui) { renderNode(ui, ui->root); } -BzUINode *bzUINodeMake(BzUI *ui, const BzUINodeDesc *desc) { - BzUIKey key = desc->key; - if (key == bzUIKeyNull()) { - key = bzUIKeyFromString(desc->string); - } - BzUINode *node = hmget(ui->nodeMap, key); +BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags) { + BzUINode *node = NULL; + if (key != bzUIKeyNull()) + node = hmget(ui->nodeMap, key); if (!node) { node = bzObjectPool(ui->nodePool); bzMemSet(node, 0, sizeof(*node)); @@ -374,13 +372,7 @@ BzUINode *bzUINodeMake(BzUI *ui, const BzUINodeDesc *desc) { } node->parent = parent; - - node->flags = desc->flags; - node->string = desc->string; - node->semanticSize[BZ_UI_AXIS_X] = desc->semanticSize[BZ_UI_AXIS_X]; - node->semanticSize[BZ_UI_AXIS_Y] = desc->semanticSize[BZ_UI_AXIS_Y]; - node->layout = desc->layout; - node->style = desc->style; + node->flags = flags; return node; } @@ -397,20 +389,14 @@ BzUINode *bzUIPopParent(BzUI *ui) { } void bzUIPushLayout(BzUI *ui, BzUILayout layout) { - BzUINode *node = bzUINodeMake(ui, &(BzUINodeDesc) { - .flags = BZ_UI_WIDGET_NONE, - .string = NULL, - .key = ui->idCount++, - .semanticSize[BZ_UI_AXIS_X] = { - .kind = BZ_UI_SIZE_PARENT_PERCENT, - .value = 1.0f, - }, - .semanticSize[BZ_UI_AXIS_Y] = { - .kind = BZ_UI_SIZE_PARENT_PERCENT, - .value = 1.0f, - }, - .layout = layout - }); + BzUINode *node = bzUINodeMake(ui, ui->idCount++, BZ_UI_WIDGET_NONE); + node->semanticSize[BZ_UI_AXIS_X] = (BzUISize) { + .kind = BZ_UI_SIZE_PARENT_PERCENT, + .value = 1.0f, + }; + node->semanticSize[BZ_UI_AXIS_Y] = node->semanticSize[BZ_UI_AXIS_X]; + + node->layout = layout; bzUIPushParent(ui, node); } void bzUIPopLayout(BzUI *ui) { @@ -437,17 +423,15 @@ bool bzUIButton(BzUI *ui, const char *string, BzUIStyle *style) { if (style) { s = *style; } - BzUINode *node = bzUINodeMake(ui, &(BzUINodeDesc) { - .flags = BZ_UI_WIDGET_CLICKABLE | BZ_UI_WIDGET_DRAW_TEXT | - BZ_UI_WIDGET_DRAW_BORDER | BZ_UI_WIDGET_ALIGN_CENTER, - .string = string, - .semanticSize[BZ_UI_AXIS_X] = (BzUISize) { - .kind = BZ_UI_SIZE_FIT, - }, - .semanticSize[BZ_UI_AXIS_Y] = (BzUISize) { - .kind = BZ_UI_SIZE_FIT, - }, - .style = s, - }); + BzUINode *node = bzUINodeMake(ui, bzUIKeyFromString(string), + BZ_UI_WIDGET_CLICKABLE | BZ_UI_WIDGET_DRAW_TEXT | + BZ_UI_WIDGET_DRAW_BORDER | BZ_UI_WIDGET_ALIGN_CENTER); + node->string = string; + node->semanticSize[BZ_UI_AXIS_X] = (BzUISize) { + .kind = BZ_UI_SIZE_FIT, + }; + node->semanticSize[BZ_UI_AXIS_Y] = node->semanticSize[BZ_UI_AXIS_X]; + node->style = s; + return bzUIGetInteraction(ui, node).clicked; } diff --git a/engine/breeze/ui/ui.h b/engine/breeze/ui/ui.h index 0581d7f..c13c79e 100644 --- a/engine/breeze/ui/ui.h +++ b/engine/breeze/ui/ui.h @@ -102,15 +102,6 @@ typedef struct BzUIInteraction { bool hovering : 1; } BzUIInteraction; -typedef struct BzUINodeDesc { - BzUIFlags flags; - const char *string; - BzUIKey key; - BzUISize semanticSize[BZ_UI_AXIS_COUNT]; - BzUILayout layout; - BzUIStyle style; -} BzUINodeDesc; - typedef struct BzUI BzUI; BzUIKey bzUIKeyNull(); @@ -124,7 +115,7 @@ void bzUIEnd(BzUI *ui); // Widget construction -BzUINode *bzUINodeMake(BzUI *ui, const BzUINodeDesc *desc); +BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags); BzUINode *bzUIPushParent(BzUI *ui, BzUINode *node); BzUINode *bzUIPopParent(BzUI *ui);