diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-09-22 11:33:48 -0400 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-09-22 11:34:51 -0400 |
| commit | aaf6c699b86450a5fdd03f329724b275dcb27b34 (patch) | |
| tree | b1fa2171d8f15df61e9ede40e066e76ac710671f /src | |
| parent | 08751c3863d95f0ef1f53f7d5326adfeb49bfbd6 (diff) | |
pke: multiple ui box flex size and position
Diffstat (limited to 'src')
| -rw-r--r-- | src/static-ui.cpp | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/static-ui.cpp b/src/static-ui.cpp index c8200b0..7145422 100644 --- a/src/static-ui.cpp +++ b/src/static-ui.cpp @@ -236,6 +236,7 @@ void pke_ui_update_state(pke_ui_box &box) { struct pke_ui_flex_params { float px_per_unit; float unit_total; + float used_units; }; void pke_ui_calc_px(pk_arr_t<pke_ui_box_instance_buffer_item> &buffer, pk_arr_t<std::pair<pke_ui_box*,pke_ui_box_instance_buffer_item>> &tmp_txtr_buffer, pke_ui_flex_params *flex_params, pke_ui_box *box) { @@ -295,9 +296,14 @@ void pke_ui_calc_px(pk_arr_t<pke_ui_box_instance_buffer_item> &buffer, pk_arr_t< assert(box->internal.parent != nullptr); if (box->internal.parent->flex_direction == 0) { px_size.x = flex_params->px_per_unit * box->flex_weight; + px_size.y = parent_size_padded.y; + box->internal.px_corner.x += flex_params->used_units * flex_params->px_per_unit; } else { + px_size.x = parent_size_padded.x; px_size.y = flex_params->px_per_unit * box->flex_weight; + box->internal.px_corner.y += flex_params->used_units * flex_params->px_per_unit; } + flex_params->used_units += box->flex_weight; } else if (PK_HAS_FLAG(box->flags, PKE_UI_BOX_FLAG_POSITION_TYPE_STATIC)) { px_size.x -= box->pos_top_left.x; px_size.y -= box->pos_top_left.y; @@ -340,15 +346,6 @@ void pke_ui_calc_px(pk_arr_t<pke_ui_box_instance_buffer_item> &buffer, pk_arr_t< box->internal.px_size.x = px_size.x; box->internal.px_size.y = px_size.y; - if (box->internal.parent != nullptr) { - // TODO change this based on the parent's 'direction' - // 2025-03-13 JCB - // optional: auto-wrapping boxes possible if we keep track of two sizes: - // - remaining in active row/column - // - unused space - // box->internal.parent->internal.px_padding_l += px_size.x; - box->internal.parent->internal.px_padding_t += px_size.y; - } if (box->type_data != nullptr) { // type-specific changes @@ -416,6 +413,9 @@ void pke_ui_recalc_sizes_recursive(pk_arr_t<pke_ui_box_instance_buffer_item> &ar PKE_UI_BOX_FLAG_T flags_masked; uint8_t flex_count = 0; pke_ui_flex_params flex_params{}; + flex_params.px_per_unit = 0; + flex_params.unit_total = 0; + flex_params.used_units = 0; if (box->isMarkedForRemoval == true) return; @@ -439,8 +439,8 @@ void pke_ui_recalc_sizes_recursive(pk_arr_t<pke_ui_box_instance_buffer_item> &ar if (flex_count != 0) { flex_params.px_per_unit = box->flex_direction == 0 - ? box->internal.px_size.x / flex_params.unit_total - : box->internal.px_size.y / flex_params.unit_total; + ? (box->internal.px_size.x - box->internal.px_padding_l - box->internal.px_padding_r) / flex_params.unit_total + : (box->internal.px_size.y - box->internal.px_padding_t - box->internal.px_padding_b) / flex_params.unit_total; } for (pke_ui_box_count_T i = 0; i < box->internal.h_children; ++i) { |
