From 66fbcabd9d930a91f0c1a97a1e725d8d435d22da Mon Sep 17 00:00:00 2001 From: Jonathan Bradley Date: Thu, 30 Oct 2025 16:07:10 -0400 Subject: pke: static ui handle removed children, validation --- src/static-ui.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/static-ui.cpp b/src/static-ui.cpp index 72bd298..505f4bc 100644 --- a/src/static-ui.cpp +++ b/src/static-ui.cpp @@ -286,6 +286,8 @@ bool pke_ui_calc_px(pk_arr_t &buffer, pk_arr_t< box->internal.parent->internal.children[i] = box->internal.parent->internal.children[i+1]; } box->internal.parent->internal.h_children -= 1; + pke_ui_teardown_box_recursive(box, 0); + pke_ui_master.should_update_buffer = true; return false; } @@ -486,6 +488,7 @@ bool pke_ui_calc_px(pk_arr_t &buffer, pk_arr_t< void pke_ui_recalc_sizes_recursive(pk_arr_t &arr, pk_arr_t> &tmp_txtr_buffer, pke_ui_box *box) { PKE_UI_BOX_FLAG_T flags_masked; uint8_t flex_count = 0; + uint8_t unreal_count = 0; float available_size = 0; pke_ui_flex_params flex_params{}; flex_params.px_per_unit = 0; @@ -501,13 +504,23 @@ void pke_ui_recalc_sizes_recursive(pk_arr_t &ar } for (pke_ui_box_count_T i = 0; i < box->internal.h_children; ++i) { + if (box->internal.children[i]->isMarkedForRemoval == true) { + unreal_count += 1; + continue; + } if (PK_HAS_FLAG(box->internal.children[i]->flags, PKE_UI_BOX_FLAG_POSITION_TYPE_FLEX)) { flex_count += 1; + + if (box->internal.children[i]->flex_weight <= 0 || !(box->internal.children[i]->flex_weight == box->internal.children[i]->flex_weight)) { + fprintf(stderr, "[%s] ui box invalid flex_weight: '%f' on child #: %u\n", __FILE__, box->internal.children[i]->flex_weight, i); + flex_count = 0; + break; + } flex_params.unit_total += box->internal.children[i]->flex_weight; } } - if (flex_count != 0 && flex_count != box->internal.h_children) { + if (flex_count != 0 && (flex_count + unreal_count) != box->internal.h_children) { fprintf(stderr, "[%s] ui box invalid flags: if one child is type FLEX, then all children must be type FLEX\n", __FILE__); return; } -- cgit v1.2.3