diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-30 16:07:10 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-10-30 16:07:10 -0400 |
| commit | 66fbcabd9d930a91f0c1a97a1e725d8d435d22da (patch) | |
| tree | cd9cc86211ef6ef15d7a6908d1ffd82891c5f5b3 | |
| parent | f986f2b422d9167604964108b7f2e71f77b6da14 (diff) | |
pke: static ui handle removed children, validation
| -rw-r--r-- | src/static-ui.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
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<pke_ui_box_instance_buffer_item> &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<pke_ui_box_instance_buffer_item> &buffer, pk_arr_t< void pke_ui_recalc_sizes_recursive(pk_arr_t<pke_ui_box_instance_buffer_item> &arr, pk_arr_t<std::pair<pke_ui_box*,pke_ui_box_instance_buffer_item>> &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<pke_ui_box_instance_buffer_item> &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; } |
