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