Push layout to parent instead of creating new node
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user