Fix bug with pruning stale nodes

This commit is contained in:
2023-12-29 19:11:56 +01:00
parent cc66f15131
commit e852fcc791

View File

@@ -116,6 +116,8 @@ BzUI *bzUICreate() {
ui->borderStyles = bzArrayCreate(BzUIBorderStyle, 10); ui->borderStyles = bzArrayCreate(BzUIBorderStyle, 10);
ui->spriteStyles = bzArrayCreate(BzUISpriteStyle, 10); ui->spriteStyles = bzArrayCreate(BzUISpriteStyle, 10);
ui->currFrame = 0;
// 10kb should be enough // 10kb should be enough
ui->strArena = bzStackAllocCreate(10240); ui->strArena = bzStackAllocCreate(10240);
@@ -165,7 +167,6 @@ void bzUIBegin(BzUI *ui, i32 width, i32 height) {
bzStackAllocReset(&ui->strArena); bzStackAllocReset(&ui->strArena);
ui->currFrame++;
ui->root->lastFrame = ui->currFrame; ui->root->lastFrame = ui->currFrame;
ui->keyIdCount = 1; ui->keyIdCount = 1;
} }
@@ -349,7 +350,7 @@ static void pruneStale(BzUI *ui, BzUINode *node) {
BzUINode *last = NULL; BzUINode *last = NULL;
while (child != NULL) { while (child != NULL) {
if (child->lastFrame != node->lastFrame) { if (child->lastFrame != ui->currFrame) {
BzUINode *next = child->next; BzUINode *next = child->next;
if (child->prev) if (child->prev)
child->prev->next = next; child->prev->next = next;
@@ -479,6 +480,8 @@ void bzUIEnd(BzUI *ui) {
calculatePositions(ui, ui->root, 0, 0); calculatePositions(ui, ui->root, 0, 0);
updateNodeInteraction(ui, ui->root, GetMousePosition()); updateNodeInteraction(ui, ui->root, GetMousePosition());
renderNode(ui, ui->root); renderNode(ui, ui->root);
ui->currFrame++;
} }
BzUIKey bzUIGetUniqueKey(BzUI *ui) { BzUIKey bzUIGetUniqueKey(BzUI *ui) {