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);
|
bzArrayPush(ui->nodeStack, ui->root);
|
||||||
|
|
||||||
bzUINodeClearLinks(ui->root);
|
bzUINodeClearLinks(ui->root);
|
||||||
|
bzMemSet(&ui->root->style, 0, sizeof(ui->root->style));
|
||||||
|
|
||||||
ui->root->semanticSize[BZ_UI_AXIS_X] = (BzUISize){
|
ui->root->semanticSize[BZ_UI_AXIS_X] = (BzUISize){
|
||||||
.kind = BZ_UI_SIZE_PIXELS,
|
.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_X] = x;
|
||||||
node->computedPosition[BZ_UI_AXIS_Y] = y;
|
node->computedPosition[BZ_UI_AXIS_Y] = y;
|
||||||
|
|
||||||
BzUINode *child = node->first;
|
switch (node->layout.type) {
|
||||||
while (child != NULL) {
|
case BZ_UI_LAYOUT_FLEX_BOX:
|
||||||
switch (child->layout.type) {
|
calculatePositionsFlexBox(node);
|
||||||
case BZ_UI_LAYOUT_FLEX_BOX:
|
break;
|
||||||
calculatePositionsFlexBox(child);
|
default:
|
||||||
break;
|
for (BzUINode *child = node->first; child; child = child->next) {
|
||||||
default:
|
|
||||||
calculatePositions(child, x, y);
|
calculatePositions(child, x, y);
|
||||||
break;
|
}
|
||||||
}
|
break;
|
||||||
child = child->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -425,21 +424,12 @@ BzUINode *bzUIPopParent(BzUI *ui) {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
void bzUIPushLayout(BzUI *ui, BzUILayout layout) {
|
void bzUISetParentLayout(BzUI *ui, BzUILayout layout) {
|
||||||
BzUINode *node = bzUINodeMake(ui, ui->idCount++, BZ_UI_NONE);
|
i32 stackSize = bzArraySize(ui->nodeStack);
|
||||||
node->semanticSize[BZ_UI_AXIS_X] = (BzUISize) {
|
BZ_ASSERT(stackSize > 0);
|
||||||
.kind = BZ_UI_SIZE_PARENT_PERCENT,
|
BzUINode *last = bzArrayGet(ui->nodeStack, stackSize - 1);
|
||||||
.value = 1.0f,
|
BZ_ASSERT(last);
|
||||||
};
|
last->layout = layout;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BzUIInteraction bzUIGetInteraction(BzUI *ui, BzUINode *node) {
|
BzUIInteraction bzUIGetInteraction(BzUI *ui, BzUINode *node) {
|
||||||
|
|||||||
@@ -119,22 +119,16 @@ void bzUIDestroy(BzUI *ui);
|
|||||||
void bzUIBegin(BzUI *ui, i32 width, i32 height);
|
void bzUIBegin(BzUI *ui, i32 width, i32 height);
|
||||||
void bzUIEnd(BzUI *ui);
|
void bzUIEnd(BzUI *ui);
|
||||||
|
|
||||||
// Widget construction
|
|
||||||
|
|
||||||
BzUINode *bzUINodeMake(BzUI *ui, BzUIKey key, BzUIFlags flags);
|
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);
|
||||||
|
|
||||||
// Widget layout
|
void bzUISetParentLayout(BzUI *ui, BzUILayout layout);
|
||||||
void bzUIPushLayout(BzUI *ui, BzUILayout layout);
|
|
||||||
void bzUIPopLayout(BzUI *ui);
|
|
||||||
|
|
||||||
// Widget interaction
|
|
||||||
BzUIInteraction bzUIGetInteraction(BzUI *ui, BzUINode *node);
|
BzUIInteraction bzUIGetInteraction(BzUI *ui, BzUINode *node);
|
||||||
|
|
||||||
// UI
|
|
||||||
|
|
||||||
bool bzUIButton(BzUI *ui, const char *string, BzUIStyle *style);
|
bool bzUIButton(BzUI *ui, const char *string, BzUIStyle *style);
|
||||||
|
|
||||||
#endif //BREEZE_UI_CORE_H
|
#endif //BREEZE_UI_CORE_H
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ void render(float dt, int *game) {
|
|||||||
|
|
||||||
|
|
||||||
bzUIBegin(ui, GetScreenWidth(), GetScreenHeight());
|
bzUIBegin(ui, GetScreenWidth(), GetScreenHeight());
|
||||||
bzUIPushLayout(ui, *&(BzUILayout) {
|
bzUISetParentLayout(ui, *&(BzUILayout) {
|
||||||
.type = BZ_UI_LAYOUT_FLEX_BOX,
|
.type = BZ_UI_LAYOUT_FLEX_BOX,
|
||||||
.flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_ALIGN_CENTER | BZ_UI_FLEX_JUSTIFY_CENTER,
|
.flags = BZ_UI_FLEX_DIR_COLUMN | BZ_UI_FLEX_ALIGN_CENTER | BZ_UI_FLEX_JUSTIFY_CENTER,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user