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);
}
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;
}

View File

@@ -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);