Simplify node creation

This commit is contained in:
2023-12-21 15:37:20 +01:00
parent 569294f292
commit 6bd640fc80
2 changed files with 24 additions and 49 deletions

View File

@@ -345,12 +345,10 @@ void bzUIEnd(BzUI *ui) {
renderNode(ui, ui->root); renderNode(ui, ui->root);
} }
BzUINode *bzUINodeMake(BzUI *ui, const BzUINodeDesc *desc) { BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags) {
BzUIKey key = desc->key; BzUINode *node = NULL;
if (key == bzUIKeyNull()) { if (key != bzUIKeyNull())
key = bzUIKeyFromString(desc->string); node = hmget(ui->nodeMap, key);
}
BzUINode *node = hmget(ui->nodeMap, key);
if (!node) { if (!node) {
node = bzObjectPool(ui->nodePool); node = bzObjectPool(ui->nodePool);
bzMemSet(node, 0, sizeof(*node)); bzMemSet(node, 0, sizeof(*node));
@@ -374,13 +372,7 @@ BzUINode *bzUINodeMake(BzUI *ui, const BzUINodeDesc *desc) {
} }
node->parent = parent; node->parent = parent;
node->flags = flags;
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;
return node; return node;
} }
@@ -397,20 +389,14 @@ BzUINode *bzUIPopParent(BzUI *ui) {
} }
void bzUIPushLayout(BzUI *ui, BzUILayout layout) { void bzUIPushLayout(BzUI *ui, BzUILayout layout) {
BzUINode *node = bzUINodeMake(ui, &(BzUINodeDesc) { BzUINode *node = bzUINodeMake(ui, ui->idCount++, BZ_UI_WIDGET_NONE);
.flags = BZ_UI_WIDGET_NONE, node->semanticSize[BZ_UI_AXIS_X] = (BzUISize) {
.string = NULL, .kind = BZ_UI_SIZE_PARENT_PERCENT,
.key = ui->idCount++, .value = 1.0f,
.semanticSize[BZ_UI_AXIS_X] = { };
.kind = BZ_UI_SIZE_PARENT_PERCENT, node->semanticSize[BZ_UI_AXIS_Y] = node->semanticSize[BZ_UI_AXIS_X];
.value = 1.0f,
}, node->layout = layout;
.semanticSize[BZ_UI_AXIS_Y] = {
.kind = BZ_UI_SIZE_PARENT_PERCENT,
.value = 1.0f,
},
.layout = layout
});
bzUIPushParent(ui, node); bzUIPushParent(ui, node);
} }
void bzUIPopLayout(BzUI *ui) { void bzUIPopLayout(BzUI *ui) {
@@ -437,17 +423,15 @@ bool bzUIButton(BzUI *ui, const char *string, BzUIStyle *style) {
if (style) { if (style) {
s = *style; s = *style;
} }
BzUINode *node = bzUINodeMake(ui, &(BzUINodeDesc) { BzUINode *node = bzUINodeMake(ui, bzUIKeyFromString(string),
.flags = BZ_UI_WIDGET_CLICKABLE | BZ_UI_WIDGET_DRAW_TEXT | BZ_UI_WIDGET_CLICKABLE | BZ_UI_WIDGET_DRAW_TEXT |
BZ_UI_WIDGET_DRAW_BORDER | BZ_UI_WIDGET_ALIGN_CENTER, BZ_UI_WIDGET_DRAW_BORDER | BZ_UI_WIDGET_ALIGN_CENTER);
.string = string, node->string = string;
.semanticSize[BZ_UI_AXIS_X] = (BzUISize) { node->semanticSize[BZ_UI_AXIS_X] = (BzUISize) {
.kind = BZ_UI_SIZE_FIT, .kind = BZ_UI_SIZE_FIT,
}, };
.semanticSize[BZ_UI_AXIS_Y] = (BzUISize) { node->semanticSize[BZ_UI_AXIS_Y] = node->semanticSize[BZ_UI_AXIS_X];
.kind = BZ_UI_SIZE_FIT, node->style = s;
},
.style = s,
});
return bzUIGetInteraction(ui, node).clicked; return bzUIGetInteraction(ui, node).clicked;
} }

View File

@@ -102,15 +102,6 @@ typedef struct BzUIInteraction {
bool hovering : 1; bool hovering : 1;
} BzUIInteraction; } 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; typedef struct BzUI BzUI;
BzUIKey bzUIKeyNull(); BzUIKey bzUIKeyNull();
@@ -124,7 +115,7 @@ void bzUIEnd(BzUI *ui);
// Widget construction // Widget construction
BzUINode *bzUINodeMake(BzUI *ui, const BzUINodeDesc *desc); BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags);
BzUINode *bzUIPushParent(BzUI *ui, BzUINode *node); BzUINode *bzUIPushParent(BzUI *ui, BzUINode *node);
BzUINode *bzUIPopParent(BzUI *ui); BzUINode *bzUIPopParent(BzUI *ui);