mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-22 11:44:59 -07:00
begin color editing, fix some bugs with meta-type-info disrupting type chain scans
This commit is contained in:
@@ -183,6 +183,8 @@ e_token_kind_strings:
|
||||
`LastSigned2 = E_TypeKind_S512`,
|
||||
`FirstIncomplete = E_TypeKind_IncompleteStruct`,
|
||||
`LastIncomplete = E_TypeKind_IncompleteEnum`,
|
||||
`FirstMeta = E_TypeKind_MetaExpr`,
|
||||
`LastMeta = E_TypeKind_MetaDescription`,
|
||||
}
|
||||
|
||||
@data(String8) e_type_kind_basic_string_table:
|
||||
|
||||
@@ -1382,14 +1382,14 @@ e_expand_rule_from_type_key(E_TypeKey key)
|
||||
{
|
||||
E_TypeExpandRule *rule = &e_type_expand_rule__default;
|
||||
{
|
||||
E_Type *type = e_type_from_key__cached(key);
|
||||
E_Type *type = e_type_from_key__cached(e_type_key_unwrap(key, E_TypeUnwrapFlag_Meta));
|
||||
if(type->expand.info != 0)
|
||||
{
|
||||
rule = &type->expand;
|
||||
}
|
||||
for(E_Type *lens_type = type;
|
||||
lens_type->kind == E_TypeKind_Lens || lens_type->kind == E_TypeKind_Set;
|
||||
lens_type = e_type_from_key__cached(lens_type->direct_type_key))
|
||||
lens_type = e_type_from_key__cached(e_type_key_unwrap(lens_type->direct_type_key, E_TypeUnwrapFlag_Meta)))
|
||||
{
|
||||
if(lens_type->expand.info != 0)
|
||||
{
|
||||
@@ -1746,6 +1746,8 @@ e_type_lhs_string_from_key(Arena *arena, E_TypeKey key, String8List *out, U32 pr
|
||||
}break;
|
||||
|
||||
case E_TypeKind_MetaExpr:
|
||||
case E_TypeKind_MetaDisplayName:
|
||||
case E_TypeKind_MetaDescription:
|
||||
{
|
||||
E_TypeKey direct = e_type_key_direct(key);
|
||||
e_type_lhs_string_from_key(arena, direct, out, prec, skip_return);
|
||||
@@ -1905,7 +1907,7 @@ e_default_expansion_type_from_key(E_TypeKey root_key)
|
||||
|
||||
//- rjf: if we have meta-expression tags in the type chain, defer
|
||||
// to the next type in the chain.
|
||||
else if(kind == E_TypeKind_MetaExpr)
|
||||
else if(E_TypeKind_FirstMeta <= kind && kind <= E_TypeKind_LastMeta)
|
||||
{
|
||||
done = 0;
|
||||
}
|
||||
|
||||
@@ -91,6 +91,8 @@ E_TypeKind_FirstSigned2 = E_TypeKind_S8,
|
||||
E_TypeKind_LastSigned2 = E_TypeKind_S512,
|
||||
E_TypeKind_FirstIncomplete = E_TypeKind_IncompleteStruct,
|
||||
E_TypeKind_LastIncomplete = E_TypeKind_IncompleteEnum,
|
||||
E_TypeKind_FirstMeta = E_TypeKind_MetaExpr,
|
||||
E_TypeKind_LastMeta = E_TypeKind_MetaDescription,
|
||||
} E_TypeKind;
|
||||
|
||||
typedef U32 E_ExprKind;
|
||||
|
||||
@@ -417,9 +417,9 @@ ev_expand_rule_from_type_key(E_TypeKey type_key)
|
||||
{
|
||||
EV_ExpandRule *rule = &ev_nil_expand_rule;
|
||||
{
|
||||
E_TypeKey k = type_key;
|
||||
E_TypeKey k = e_type_key_unwrap(type_key, E_TypeUnwrapFlag_Meta);
|
||||
E_TypeKind kind = e_type_kind_from_key(k);
|
||||
for(;kind == E_TypeKind_Lens; k = e_type_key_direct(k), kind = e_type_kind_from_key(k))
|
||||
for(;kind == E_TypeKind_Lens; k = e_type_key_direct(e_type_key_unwrap(k, E_TypeUnwrapFlag_Meta)), kind = e_type_kind_from_key(k))
|
||||
{
|
||||
E_Type *type = e_type_from_key__cached(k);
|
||||
EV_ExpandRule *candidate = ev_expand_rule_from_string(type->name);
|
||||
@@ -536,10 +536,10 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
||||
tree.total_item_count += 1;
|
||||
|
||||
//- rjf: generate initial task, for root's evaluation
|
||||
typedef struct Task Task;
|
||||
struct Task
|
||||
typedef struct BlockTreeBuildTask BlockTreeBuildTask;
|
||||
struct BlockTreeBuildTask
|
||||
{
|
||||
Task *next;
|
||||
BlockTreeBuildTask *next;
|
||||
EV_Block *parent_block;
|
||||
E_Eval eval;
|
||||
E_Expr *next_expr;
|
||||
@@ -548,12 +548,12 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
||||
B32 default_expanded;
|
||||
B32 force_expanded;
|
||||
};
|
||||
Task start_task = {0, tree.root, tree.root->eval, tree.root->eval.expr->next, 1, 0};
|
||||
Task *first_task = &start_task;
|
||||
Task *last_task = first_task;
|
||||
BlockTreeBuildTask start_task = {0, tree.root, tree.root->eval, tree.root->eval.expr->next, 1, 0};
|
||||
BlockTreeBuildTask *first_task = &start_task;
|
||||
BlockTreeBuildTask *last_task = first_task;
|
||||
|
||||
//- rjf: iterate all expansions & generate blocks for each
|
||||
for(Task *t = first_task; t != 0; t = t->next)
|
||||
for(BlockTreeBuildTask *t = first_task; t != 0; t = t->next)
|
||||
{
|
||||
// rjf: get task key
|
||||
EV_Key key = ev_key_make(ev_hash_from_key(t->parent_block->key), t->child_id);
|
||||
@@ -704,7 +704,7 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
||||
E_Eval child_eval = {0};
|
||||
type_expand_rule->range(arena, type_expand_info.user_data, t->eval, filter, r1u64(split_relative_idx, split_relative_idx+1), &child_eval);
|
||||
EV_Key child_key = child_keys[idx];
|
||||
Task *task = push_array(scratch.arena, Task, 1);
|
||||
BlockTreeBuildTask *task = push_array(scratch.arena, BlockTreeBuildTask, 1);
|
||||
SLLQueuePush(first_task, last_task, task);
|
||||
task->parent_block = expansion_block;
|
||||
task->eval = child_eval;
|
||||
@@ -718,7 +718,7 @@ ev_block_tree_from_eval(Arena *arena, EV_View *view, String8 filter, E_Eval eval
|
||||
// rjf: if this expr has a sibling, push another task to continue the chain
|
||||
if(t->next_expr != &e_expr_nil)
|
||||
{
|
||||
Task *task = push_array(scratch.arena, Task, 1);
|
||||
BlockTreeBuildTask *task = push_array(scratch.arena, BlockTreeBuildTask, 1);
|
||||
task->next = t->next;
|
||||
t->next = task;
|
||||
task->parent_block = t->parent_block;
|
||||
@@ -1744,6 +1744,7 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string)
|
||||
//
|
||||
case E_TypeKind_Modifier:
|
||||
case E_TypeKind_MetaDescription:
|
||||
case E_TypeKind_MetaDisplayName:
|
||||
{
|
||||
need_pop = 1;
|
||||
need_new_task = 1;
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -229,6 +229,8 @@ RD_CmdKind_DisableBreakpoint,
|
||||
RD_CmdKind_AddWatchPin,
|
||||
RD_CmdKind_ToggleWatchPin,
|
||||
RD_CmdKind_AddAutoViewRule,
|
||||
RD_CmdKind_AddColor,
|
||||
RD_CmdKind_ImportColors,
|
||||
RD_CmdKind_SetNextStatement,
|
||||
RD_CmdKind_AddTarget,
|
||||
RD_CmdKind_SelectTarget,
|
||||
@@ -668,8 +670,8 @@ Z(getting_started)\
|
||||
C_LINKAGE_BEGIN
|
||||
extern String8 rd_tab_fast_path_view_name_table[20];
|
||||
extern String8 rd_tab_fast_path_query_name_table[20];
|
||||
extern RD_VocabInfo rd_vocab_info_table[316];
|
||||
extern RD_NameSchemaInfo rd_name_schema_info_table[21];
|
||||
extern RD_VocabInfo rd_vocab_info_table[319];
|
||||
extern RD_NameSchemaInfo rd_name_schema_info_table[22];
|
||||
extern Rng1U64 rd_reg_slot_range_table[42];
|
||||
extern String8 rd_binding_version_remap_old_name_table[8];
|
||||
extern String8 rd_binding_version_remap_new_name_table[8];
|
||||
|
||||
+35
-2
@@ -90,6 +90,7 @@ RD_VocabTable:
|
||||
{source_location _ "Source Location" _ Null }
|
||||
{address_location _ "Address Location" _ Null }
|
||||
{target _ "Target" _ Target }
|
||||
{color _ "Color" _ Palette }
|
||||
{executable _ "Executable" _ Module }
|
||||
{arguments arguments "Arguments" "Arguments" Null }
|
||||
{exe exes "Executable" _ Module }
|
||||
@@ -227,6 +228,14 @@ RD_VocabTable:
|
||||
'main_font': string,
|
||||
'code_font': string,
|
||||
|
||||
//- rjf: colors
|
||||
@display_name('Color Preset')
|
||||
'color_preset': string,
|
||||
@display_name('Color File')
|
||||
'color_file': path,
|
||||
@display_name('Colors')
|
||||
'colors': query,
|
||||
|
||||
//- rjf: thread & breakpoint decorations
|
||||
@default(1) @display_name('Thread Lines') @description("Controls whether or not a long horizontal line is drawn before the next line or instruction that the selected thread will execute in source and disassembly views.")
|
||||
'thread_lines': bool,
|
||||
@@ -346,6 +355,18 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: colors
|
||||
{
|
||||
color,
|
||||
```
|
||||
@collection_commands(add_color, import_colors) x:
|
||||
{
|
||||
@display_name('Tags') tags: string,
|
||||
color: @color @hex u32,
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: windows
|
||||
{
|
||||
window,
|
||||
@@ -896,6 +917,10 @@ RD_CmdTable: // | | | |
|
||||
//- rjf: auto view rule
|
||||
{AddAutoViewRule 1 1 0 0 "" String null Nil Null 0 0 0 0 0 0 0 Binoculars "add_auto_view_rule" "Add Auto View Rule" "Adds a new auto view rule." "" "$auto_view_rules," }
|
||||
|
||||
//- rjf: colors
|
||||
{AddColor 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Palette "add_color" "Add Color" "Adds a new color." "" "" }
|
||||
{ImportColors 1 1 0 0 "" Null null Nil Null 0 0 0 0 0 0 0 Palette "import_colors" "Import Colors" "Imports all colors from a loaded color theme file or color theme preset." "" "" }
|
||||
|
||||
//- rjf: line operations
|
||||
{SetNextStatement 1 1 1 0 "" Null null Nil Null 0 0 0 0 0 0 0 RightArrow "set_next_statement" "Set Next Statement" "Sets the selected thread's instruction pointer to the cursor's position." "" "$text_pt," }
|
||||
|
||||
@@ -1405,7 +1430,15 @@ RD_ThemePresetTable:
|
||||
}
|
||||
|
||||
{ DefaultLight default_light "Default (Light)" }
|
||||
{ VSDark vs_dark "VS (Dark)" }
|
||||
|
||||
{
|
||||
VSDark vs_dark "VS (Dark)",
|
||||
```theme:
|
||||
{
|
||||
background: 0x1b0000ff,
|
||||
}
|
||||
```
|
||||
}
|
||||
{ VSLight vs_light "VS (Light)" }
|
||||
{ SolarizedDark solarized_dark "Solarized (Dark)" }
|
||||
{ SolarizedLight solarized_light "Solarized (Light)" }
|
||||
@@ -1414,7 +1447,7 @@ RD_ThemePresetTable:
|
||||
{ FarManager far_manager "Far Manager" }
|
||||
}
|
||||
|
||||
@table(name display_name name_lower default_dark default_light vs_dark vs_light solarized_dark solarized_light handmade_hero four_coder far_manager desc)
|
||||
@table(name display_name name_lower default_dark default_light vs_dark vs_light solarized_dark solarized_light handmade_hero four_coder far_manager desc)
|
||||
RD_ThemeColorTable:
|
||||
{
|
||||
{Null "Null" null 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff ""}
|
||||
|
||||
@@ -1780,6 +1780,17 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
|
||||
U64 value = e_value_from_string(value_string_casted).u64;
|
||||
read_data = push_str8_copy(scratch.arena, str8_struct(&value));
|
||||
}
|
||||
else if(str8_match(child_type_name, str8_lit("u32"), 0))
|
||||
{
|
||||
String8 value_string = cfg->first->string;
|
||||
if(value_string.size == 0)
|
||||
{
|
||||
value_string = md_tag_from_string(child_schema, str8_lit("default"), 0)->first->string;
|
||||
}
|
||||
String8 value_string_casted = push_str8f(scratch.arena, "(uint32)(%S)", value_string);
|
||||
U64 value = e_value_from_string(value_string_casted).u64;
|
||||
read_data = push_str8_copy(scratch.arena, str8_struct(&value));
|
||||
}
|
||||
else if(str8_match(child_type_name, str8_lit("f32"), 0))
|
||||
{
|
||||
String8 value_string = cfg->first->string;
|
||||
@@ -4741,6 +4752,10 @@ rd_view_ui(Rng2F32 rect)
|
||||
{
|
||||
CTRL_Entity *entity = rd_ctrl_entity_from_eval_space(row->eval.space);
|
||||
RD_Cfg *cfg = rd_cfg_from_eval_space(row->eval.space);
|
||||
if(cfg == &rd_nil_cfg)
|
||||
{
|
||||
cfg = rd_cfg_from_eval_space(row->block->eval.space);
|
||||
}
|
||||
RD_RegsScope(.cfg = cfg->id, .ctrl_entity = entity->handle)
|
||||
{
|
||||
if(cfg != &rd_nil_cfg || entity != &ctrl_entity_nil)
|
||||
@@ -5483,7 +5498,7 @@ rd_window_frame(void)
|
||||
// that windows can have their own colors, and have those override higher-up settings.
|
||||
RD_Cfg *preset_cfg = &rd_nil_cfg;
|
||||
RD_CfgList colors_cfgs = {0};
|
||||
RD_Cfg *scan_parents[] = {window, rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("project")), rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("user"))};
|
||||
RD_Cfg *scan_parents[] = {window, rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("project")), rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("theme")), rd_cfg_child_from_string(rd_state->root_cfg, str8_lit("user"))};
|
||||
for EachElement(idx, scan_parents)
|
||||
{
|
||||
for(RD_Cfg *parent_cfg = scan_parents[idx]; parent_cfg != &rd_nil_cfg; parent_cfg = parent_cfg->parent)
|
||||
@@ -10864,6 +10879,7 @@ rd_init(CmdLine *cmdln)
|
||||
cmd_line_has_flag(cmdln, str8_lit("q")));
|
||||
rd_state->user_path_arena = arena_alloc();
|
||||
rd_state->project_path_arena = arena_alloc();
|
||||
rd_state->theme_path_arena = arena_alloc();
|
||||
rd_state->user_cfg_string_key = hs_hash_from_data(str8_lit("raddbg_user_data_string_key"));
|
||||
rd_state->project_cfg_string_key = hs_hash_from_data(str8_lit("raddbg_project_data_string_key"));
|
||||
rd_state->cmdln_cfg_string_key = hs_hash_from_data(str8_lit("raddbg_cmdln_data_string_key"));
|
||||
@@ -12304,6 +12320,19 @@ rd_frame(void)
|
||||
{
|
||||
.info = E_TYPE_EXPAND_INFO_FUNCTION_NAME(call_stack),
|
||||
}));
|
||||
e_string2typekey_map_insert(rd_frame_arena(), rd_state->meta_name2type_map, str8_lit("colors"),
|
||||
e_type_key_cons(.kind = E_TypeKind_Set,
|
||||
.flags = E_TypeFlag_EditableChildren,
|
||||
.name = str8_lit("colors"),
|
||||
.irext = E_TYPE_IREXT_FUNCTION_NAME(cfgs_slice),
|
||||
.access = E_TYPE_ACCESS_FUNCTION_NAME(cfgs_slice),
|
||||
.expand =
|
||||
{
|
||||
.info = E_TYPE_EXPAND_INFO_FUNCTION_NAME(cfgs_query),
|
||||
.range = E_TYPE_EXPAND_RANGE_FUNCTION_NAME(cfgs_slice),
|
||||
.id_from_num = E_TYPE_EXPAND_ID_FROM_NUM_FUNCTION_NAME(cfgs_slice),
|
||||
.num_from_id = E_TYPE_EXPAND_NUM_FROM_ID_FUNCTION_NAME(cfgs_slice),
|
||||
}));
|
||||
}
|
||||
|
||||
//- rjf: add macro for collections with specific lookup rules (but no unique id rules)
|
||||
@@ -12846,7 +12875,9 @@ rd_frame(void)
|
||||
case RD_CmdKind_OpenUser:
|
||||
case RD_CmdKind_OpenProject:
|
||||
{
|
||||
String8 file_root_key = (kind == RD_CmdKind_OpenUser ? str8_lit("user") : str8_lit("project"));
|
||||
String8 file_root_key = (kind == RD_CmdKind_OpenUser ? str8_lit("user") :
|
||||
kind == RD_CmdKind_OpenProject ? str8_lit("project") :
|
||||
str8_lit("other"));
|
||||
RD_Cfg *file_root = rd_cfg_child_from_string(rd_state->root_cfg, file_root_key);
|
||||
|
||||
//- rjf: load the new file's data
|
||||
@@ -15164,6 +15195,24 @@ rd_frame(void)
|
||||
rd_cfg_new(project, str8_lit("auto_view_rule"));
|
||||
}break;
|
||||
|
||||
//- rjf: colors
|
||||
case RD_CmdKind_AddColor:
|
||||
{
|
||||
RD_Cfg *parent = rd_cfg_from_id(rd_regs()->cfg);
|
||||
rd_cfg_new(parent, str8_lit("color"));
|
||||
}break;
|
||||
case RD_CmdKind_ImportColors:
|
||||
{
|
||||
RD_Cfg *parent = rd_cfg_from_id(rd_regs()->cfg);
|
||||
RD_CfgList colors = rd_cfg_child_list_from_string(scratch.arena, parent, str8_lit("color"));
|
||||
for(RD_CfgNode *n = colors.first; n != 0; n = n->next)
|
||||
{
|
||||
rd_cfg_release(n->v);
|
||||
}
|
||||
// String8 color_preset = rd_setting_from_name(str8_lit("color_preset"));
|
||||
// String8 color_file = rd_setting_from_name(str8_lit("color_file"));
|
||||
}break;
|
||||
|
||||
//- rjf: watches
|
||||
case RD_CmdKind_ToggleWatchExpression:
|
||||
if(rd_regs()->string.size != 0)
|
||||
|
||||
@@ -608,6 +608,8 @@ struct RD_State
|
||||
String8 user_path;
|
||||
Arena *project_path_arena;
|
||||
String8 project_path;
|
||||
Arena *theme_path_arena;
|
||||
String8 theme_path;
|
||||
|
||||
// rjf: serialized config debug string keys
|
||||
U128 user_cfg_string_key;
|
||||
|
||||
@@ -269,6 +269,11 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema)
|
||||
child_type_key = e_type_key_basic(E_TypeKind_U64);
|
||||
wrap_child_w_meta_expr = 1;
|
||||
}
|
||||
else if(str8_match(child_schema->first->string, str8_lit("u32"), 0))
|
||||
{
|
||||
child_type_key = e_type_key_basic(E_TypeKind_U32);
|
||||
wrap_child_w_meta_expr = 1;
|
||||
}
|
||||
else if(str8_match(child_schema->first->string, str8_lit("f32"), 0))
|
||||
{
|
||||
child_type_key = e_type_key_basic(E_TypeKind_F32);
|
||||
@@ -341,6 +346,28 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema)
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: extend child type with hex lens
|
||||
{
|
||||
MD_Node *hex = md_tag_from_string(child_schema->first, str8_lit("hex"), 0);
|
||||
if(!md_node_is_nil(hex))
|
||||
{
|
||||
child_type_key = e_type_key_cons(.kind = E_TypeKind_Lens,
|
||||
.name = str8_lit("hex"),
|
||||
.direct_key = child_type_key);
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: extend child type with color lens
|
||||
{
|
||||
MD_Node *color = md_tag_from_string(child_schema->first, str8_lit("color"), 0);
|
||||
if(!md_node_is_nil(color))
|
||||
{
|
||||
child_type_key = e_type_key_cons(.kind = E_TypeKind_Lens,
|
||||
.name = str8_lit("color"),
|
||||
.direct_key = child_type_key);
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: extend child type with ranges
|
||||
{
|
||||
MD_Node *range = md_tag_from_string(child_schema->first, str8_lit("range"), 0);
|
||||
@@ -668,6 +695,40 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_slice)
|
||||
return info;
|
||||
}
|
||||
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_query)
|
||||
{
|
||||
RD_CfgsExpandAccel *accel = push_array(arena, RD_CfgsExpandAccel, 1);
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
RD_Cfg *root_cfg = rd_cfg_from_eval_space(eval.space);
|
||||
String8 child_key = e_string_from_id(eval.space.u64s[1]);
|
||||
String8 child_key_singular = rd_singular_from_code_name_plural(child_key);
|
||||
if(child_key_singular.size != 0)
|
||||
{
|
||||
child_key = child_key_singular;
|
||||
}
|
||||
String8List cmds = {0};
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(child_key);
|
||||
for(MD_NodePtrNode *n = schemas.first; n != 0; n = n->next)
|
||||
{
|
||||
MD_Node *schema = n->v;
|
||||
MD_Node *collection_cmds_root = md_tag_from_string(schema, str8_lit("collection_commands"), 0);
|
||||
for MD_EachNode(cmd, collection_cmds_root->first)
|
||||
{
|
||||
str8_list_push(scratch.arena, &cmds, cmd->string);
|
||||
}
|
||||
}
|
||||
RD_CfgList children = rd_cfg_child_list_from_string(scratch.arena, root_cfg, child_key);
|
||||
accel->cmds = str8_array_from_list(arena, &cmds);
|
||||
accel->cmds_idx_range = r1u64(0, accel->cmds.count);
|
||||
accel->cfgs = rd_cfg_array_from_list(arena, &children);
|
||||
accel->cfgs_idx_range = r1u64(accel->cmds.count + 0, accel->cmds.count + accel->cfgs.count);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
E_TypeExpandInfo info = {accel, accel->cfgs.count + accel->cmds.count};
|
||||
return info;
|
||||
}
|
||||
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(cfgs_slice)
|
||||
{
|
||||
RD_CfgsExpandAccel *accel = (RD_CfgsExpandAccel *)user_data;
|
||||
|
||||
@@ -40,6 +40,7 @@ E_TYPE_ACCESS_FUNCTION_DEF(cfgs);
|
||||
//~ rjf: Config Slice Type Hooks
|
||||
|
||||
E_TYPE_IREXT_FUNCTION_DEF(cfgs_slice);
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_query);
|
||||
E_TYPE_ACCESS_FUNCTION_DEF(cfgs_slice);
|
||||
E_TYPE_EXPAND_INFO_FUNCTION_DEF(cfgs_slice);
|
||||
E_TYPE_EXPAND_RANGE_FUNCTION_DEF(cfgs_slice);
|
||||
|
||||
@@ -945,7 +945,7 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
EV_Key key = row->key;
|
||||
EV_Block *block = row->block;
|
||||
E_Eval block_eval = row->block->eval;
|
||||
E_TypeKey block_type_key = block_eval.irtree.type_key;
|
||||
E_TypeKey block_type_key = e_type_key_unwrap(block_eval.irtree.type_key, E_TypeUnwrapFlag_Meta);
|
||||
E_TypeKind block_type_kind = e_type_kind_from_key(block_type_key);
|
||||
E_Type *block_type = e_type_from_key__cached(block_type_key);
|
||||
RD_Cfg *evalled_cfg = rd_cfg_from_eval_space(row->eval.space);
|
||||
@@ -1277,7 +1277,9 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
////////////////////////////
|
||||
//- rjf: @watch_row_build_cells queries
|
||||
//
|
||||
else if(row->eval.space.kind == RD_EvalSpaceKind_MetaQuery)
|
||||
else if(row->eval.space.kind == RD_EvalSpaceKind_MetaQuery ||
|
||||
(row->eval.space.kind == RD_EvalSpaceKind_MetaCfg &&
|
||||
e_type_kind_from_key(e_type_key_unwrap(row->eval.irtree.type_key, E_TypeUnwrapFlag_Meta)) == E_TypeKind_Set))
|
||||
{
|
||||
rd_watch_cell_list_push_new(arena, &info.cells, RD_WatchCellKind_Eval, row->eval, .flags = RD_WatchCellFlag_Expr|RD_WatchCellFlag_NoEval|RD_WatchCellFlag_Indented, .pct = 1.f);
|
||||
}
|
||||
@@ -1339,8 +1341,9 @@ rd_watch_row_info_from_row(Arena *arena, EV_Row *row)
|
||||
row->eval.space.kind == RD_EvalSpaceKind_MetaCtrlEntity ||
|
||||
row->eval.space.kind == E_SpaceKind_File)
|
||||
{
|
||||
if(e_type_kind_from_key(row->eval.irtree.type_key) == E_TypeKind_Array &&
|
||||
e_type_kind_from_key(e_type_key_direct(row->eval.irtree.type_key)) == E_TypeKind_U8)
|
||||
E_TypeKey substantive_row_eval_type = e_type_key_unwrap(row->eval.irtree.type_key, E_TypeUnwrapFlag_Meta);
|
||||
if(e_type_kind_from_key(substantive_row_eval_type) == E_TypeKind_Array &&
|
||||
e_type_kind_from_key(e_type_key_direct(substantive_row_eval_type)) == E_TypeKind_U8)
|
||||
{
|
||||
info.can_expand = 0;
|
||||
}
|
||||
@@ -1742,7 +1745,7 @@ rd_info_from_watch_row_cell(Arena *arena, EV_Row *row, EV_StringFlags string_fla
|
||||
// rjf: determine if code
|
||||
B32 is_code = 1;
|
||||
{
|
||||
E_Type *type = e_type_from_key__cached(cell->eval.irtree.type_key);
|
||||
E_Type *type = e_type_from_key__cached(e_type_key_unwrap(cell->eval.irtree.type_key, E_TypeUnwrapFlag_Meta));
|
||||
if(type->flags & (E_TypeFlag_IsPlainText|E_TypeFlag_IsPathText))
|
||||
{
|
||||
is_code = 0;
|
||||
|
||||
@@ -393,6 +393,23 @@ rd_title_fstrs_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, dst_string, .color = dst_color);
|
||||
}
|
||||
|
||||
//- rjf: special case: colors
|
||||
if(str8_match(cfg->string, str8_lit("color"), 0))
|
||||
{
|
||||
String8 tags = rd_cfg_child_from_string(cfg, str8_lit("tags"))->first->string;
|
||||
String8 color_string = rd_cfg_child_from_string(cfg, str8_lit("color"))->first->string;
|
||||
U32 color_u32 = e_value_from_stringf("(uint32)(%S)", color_string).u32;
|
||||
Vec4F32 color = rgba_from_u32(color_u32);
|
||||
if(tags.size != 0)
|
||||
{
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, tags, .color = color);
|
||||
}
|
||||
else
|
||||
{
|
||||
dr_fstrs_push_new(arena, &result, ¶ms, str8_lit("Color"), .color = rgba_secondary);
|
||||
}
|
||||
}
|
||||
|
||||
#undef start_secondary
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user