Simplify node creation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user