From ff922fa087584bac31dc78447c3bfffb97dc1d65 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Thu, 22 Aug 2024 17:11:12 -0700 Subject: [PATCH] fix expandability/block/row building for block ui view rules --- src/df/core/df_core.c | 56 ++++++++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/df/core/df_core.c b/src/df/core/df_core.c index 658ae5fa..81636358 100644 --- a/src/df/core/df_core.c +++ b/src/df/core/df_core.c @@ -5158,18 +5158,6 @@ df_eval_viz_row_list_push_new(Arena *arena, DF_EvalView *eval_view, DF_EvalVizWi } } - // rjf: determine if view rules force expandability - B32 expandability_required = 0; - for(DF_CfgVal *val = cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next) - { - DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string); - if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_Expandable) - { - expandability_required = 1; - break; - } - } - // rjf: determine row ui hook to use for this row DF_GfxViewRuleSpec *value_ui_rule_spec = &df_g_nil_gfx_view_rule_spec; DF_CfgNode *value_ui_rule_node= &df_g_nil_cfg_node; @@ -5187,14 +5175,17 @@ df_eval_viz_row_list_push_new(Arena *arena, DF_EvalView *eval_view, DF_EvalVizWi // rjf: determine block ui hook to use for this row DF_GfxViewRuleSpec *expand_ui_rule_spec = &df_g_nil_gfx_view_rule_spec; DF_CfgNode *expand_ui_rule_node = &df_g_nil_cfg_node; - for(DF_CfgVal *val = cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next) + if(block->kind == DF_EvalVizBlockKind_Canvas) { - DF_GfxViewRuleSpec *spec = df_gfx_view_rule_spec_from_string(val->string); - if(spec->info.flags & DF_GfxViewRuleSpecInfoFlag_BlockUI) + for(DF_CfgVal *val = cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next) { - expand_ui_rule_spec = spec; - expand_ui_rule_node = val->last; - break; + DF_GfxViewRuleSpec *spec = df_gfx_view_rule_spec_from_string(val->string); + if(spec->info.flags & DF_GfxViewRuleSpecInfoFlag_BlockUI) + { + expand_ui_rule_spec = spec; + expand_ui_rule_node = val->last; + break; + } } } @@ -5364,13 +5355,30 @@ df_expr_string_from_viz_row(Arena *arena, DF_EvalVizRow *row) internal B32 df_viz_row_is_expandable(DF_EvalVizRow *row) { - B32 result = (row->expand_ui_rule_spec != &df_g_nil_gfx_view_rule_spec && row->expand_ui_rule_spec != 0); - if(!result) + B32 result = 0; { - Temp scratch = scratch_begin(0, 0); - E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, row->expr); - result = df_type_key_is_expandable(irtree.type_key); - scratch_end(scratch); + // rjf: determine if view rules force expandability + if(!result) + { + for(DF_CfgVal *val = row->cfg_table->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next) + { + DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string); + if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_Expandable) + { + result = 1; + break; + } + } + } + + // rjf: determine if type info force expandability + if(!result) + { + Temp scratch = scratch_begin(0, 0); + E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, row->expr); + result = df_type_key_is_expandable(irtree.type_key); + scratch_end(scratch); + } } return result; }