Push layout to parent instead of creating new node

This commit is contained in:
2023-12-21 17:48:06 +01:00
parent 8cbab1bbb8
commit 05782559be
3 changed files with 17 additions and 33 deletions

View File

@@ -101,6 +101,7 @@ void bzUIBegin(BzUI *ui, i32 width, i32 height) {
bzArrayPush(ui->nodeStack, ui->root);
bzUINodeClearLinks(ui->root);
bzMemSet(&ui->root->style, 0, sizeof(ui->root->style));
ui->root->semanticSize[BZ_UI_AXIS_X] = (BzUISize){
.kind = BZ_UI_SIZE_PIXELS,
@@ -249,17 +250,15 @@ static void calculatePositions(BzUINode *node, f32 x, f32 y) {
node->computedPosition[BZ_UI_AXIS_X] = x;
node->computedPosition[BZ_UI_AXIS_Y] = y;
BzUINode *child = node->first;
while (child != NULL) {
switch (child->layout.type) {
case BZ_UI_LAYOUT_FLEX_BOX:
calculatePositionsFlexBox(child);
break;
default:
switch (node->layout.type) {
case BZ_UI_LAYOUT_FLEX_BOX:
calculatePositionsFlexBox(node);
break;
default:
for (BzUINode *child = node->first; child; child = child->next) {
calculatePositions(child, x, y);
break;
}
child = child->next;
}
break;
}
}
@@ -425,21 +424,12 @@ BzUINode *bzUIPopParent(BzUI *ui) {
return node;
}
void bzUIPushLayout(BzUI *ui, BzUILayout layout) {
BzUINode *node = bzUINodeMake(ui, ui->idCount++, BZ_UI_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) {
BzUINode *last = bzArrayGet(ui->nodeStack, bzArraySize(ui->nodeStack) - 1);
BZ_ASSERT(last->flags == BZ_UI_NONE);
bzUIPopParent(ui);
void bzUISetParentLayout(BzUI *ui, BzUILayout layout) {
i32 stackSize = bzArraySize(ui->nodeStack);
BZ_ASSERT(stackSize > 0);
BzUINode *last = bzArrayGet(ui->nodeStack, stackSize - 1);
BZ_ASSERT(last);
last->layout = layout;
}
BzUIInteraction bzUIGetInteraction(BzUI *ui, BzUINode *node) {

View File

@@ -119,22 +119,16 @@ void bzUIDestroy(BzUI *ui);
void bzUIBegin(BzUI *ui, i32 width, i32 height);
void bzUIEnd(BzUI *ui);
// Widget construction
BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags);
BzUINode *bzUIPushParent(BzUI *ui, BzUINode *node);
BzUINode *bzUIPopParent(BzUI *ui);
// Widget layout
void bzUIPushLayout(BzUI *ui, BzUILayout layout);
void bzUIPopLayout(BzUI *ui);
void bzUISetParentLayout(BzUI *ui, BzUILayout layout);
// Widget interaction
BzUIInteraction bzUIGetInteraction(BzUI *ui, BzUINode *node);
// UI
bool bzUIButton(BzUI *ui, const char *string, BzUIStyle *style);
#endif //BREEZE_UI_CORE_H

View File

@@ -19,7 +19,7 @@ void render(float dt, int *game) {
bzUIBegin(ui, GetScreenWidth(), GetScreenHeight());
bzUIPushLayout(ui, *&(BzUILayout) {
bzUISetParentLayout(ui, *&(BzUILayout) {
.type = BZ_UI_LAYOUT_FLEX_BOX,
.flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_ALIGN_CENTER | BZ_UI_FLEX_JUSTIFY_CENTER,
});