mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-17 09:32:22 -07:00
revert-to-default ui for meta setting editors
This commit is contained in:
@@ -412,15 +412,15 @@ RD_NameSchemaInfo rd_name_schema_info_table[24] =
|
||||
{str8_lit_comp("window"), str8_lit_comp("x:\n{\n //- rjf: text rasterization settings\n @default(1) @display_name('Smooth UI Text') @description(\"Controls whether or not UI text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_ui_text': bool,\n @default(1) @display_name('Hint UI Text') @description(\"Controls whether or not UI text is hinted, for better text readability at small sizes.\")\n 'hint_ui_text': bool,\n @default(0) @display_name('Smooth Code Text') @description(\"Controls whether or not code text is fully anti-aliased, for a smoother appearance.\")\n 'smooth_code_text': bool,\n @default(1) @display_name('Hint Code Text') @description(\"Controls whether or not code text is hinted, for better text readability at small sizes.\")\n 'hint_code_text': bool,\n @default(11) @display_name('Window Font Size') @description(\"Controls the window's default font size. Does not apply to tabs with their own font size set.\")\n 'font_size': @range[6, 72] u64,\n\n //- rjf: size settings\n @default(3.f) @display_name('Window Row Height') @description(\"Controls the window's default row height, in multiples of the font size. Does not apply to tabs with their own row height set.\")\n 'row_height': @range[1.75f, 5.f] f32,\n @default(3.f) @description(\"Controls the height of tabs, in multiples of the font size.\")\n 'tab_height': @range[1.75f, 5.f] f32,\n\n //- rjf: theme settings\n @default(1) @display_name('Use Project Theme') @description(\"Prefer using the project theme for this window, if any. If off, only the user's theme settings will be used.\")\n 'use_project_theme': bool,\n}\n")},
|
||||
{str8_lit_comp("tab"), str8_lit_comp("@row_commands(@file copy_tab_full_path, @file show_file_in_explorer, duplicate_tab, close_tab)\nx:\n{\n @override @display_name('Tab Font Size') @description(\"Controls the tab's font size.\")\n 'font_size': @range[6, 72] u64,\n}\n")},
|
||||
{str8_lit_comp("watch"), str8_lit_comp("@inherit(tab) x:\n{\n @override @display_name('Tab Row Height') @description(\"Controls the tab's row height, in multiples of the font size.\")\n 'row_height': @range[1.75f, 5.f] f32,\n 'label': code_string,\n @description(\"The root expression which is evaluated to produce the watch window.\")\n 'expression': expr_string,\n @no_expand 'watches': query,\n}\n")},
|
||||
{str8_lit_comp("text"), str8_lit_comp("@inherit(tab) x:\n{\n @description(\"An expression to describe data which should be viewed as text or code.\")\n 'expression': expr_string,\n @description(\"The language that the text should be interpreted as being within. Used for syntax highlighting and other parsing features.\")\n 'lang': code_string,\n @default(1) @description(\"Controls whether or not line numbers are shown.\")\n 'show_line_numbers':bool,\n @default(0) @display_name('Transient') @description(\"Controls whether or not this tab will be automatically replaced by the debugger when it snaps to new source code locations.\")\n 'auto': bool,\n}\n")},
|
||||
{str8_lit_comp("text"), str8_lit_comp("@inherit(tab) x:\n{\n @description(\"An expression to describe data which should be viewed as text or code.\")\n 'expression': expr_string,\n @description(\"The language that the text should be interpreted as being within. Used for syntax highlighting and other parsing features.\")\n 'lang': code_string,\n @default(1) @description(\"Controls whether or not line numbers are shown.\")\n 'show_line_numbers':bool,\n @no_revert @default(0) @display_name('Transient') @description(\"Controls whether or not this tab will be automatically replaced by the debugger when it snaps to new source code locations.\")\n 'auto': bool,\n}\n")},
|
||||
{str8_lit_comp("disasm"), str8_lit_comp("@inherit(tab) x:\n{\n @description(\"An expression to describe the base address or offset of the disassembly.\")\n 'expression': expr_string,\n 'arch': code_string,\n 'syntax': code_string,\n 'size': expr_string,\n @default(1) @description(\"Controls whether or not addresses are shown in the disassembly text.\")\n 'show_addresses': bool,\n @default(0) @description(\"Controls whether or not code bytes are shown in the disassembly text.\")\n 'show_code_bytes': bool,\n @default(1) @description(\"Controls whether or not source lines, corresponding to disassembly instruction ranges, are shown in the disassembly text.\")\n 'show_source_lines': bool,\n @default(1) @description(\"Controls whether or not disassembly text is decorated with symbol names.\")\n 'show_symbol_names': bool,\n @default(1) @description(\"Controls whether or not line numbers are shown.\")\n 'show_line_numbers': bool,\n}\n")},
|
||||
{str8_lit_comp("memory"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Base Address\") @description(\"An expression to describe the base address or offset of the memory view.\")\n 'expression': expr_string,\n @display_name(\"Address Range Size\") @description(\"The number of bytes of the viewed memory range.\")\n 'size': expr_string,\n @display_name(\"Cursor Address\") @description(\"The address of the cursor.\")\n 'cursor': expr_string,\n @display_name(\"Cursor Size\") @description(\"The size, in bytes, of the cursor.\")\n 'cursor_size': @range[1, 16] u64,\n @default(16) @description(\"The number of columns to build before building new rows.\")\n 'num_columns': @range[1, 64] u64,\n}\n")},
|
||||
{str8_lit_comp("bitmap"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Base Pointer\") @description(\"An expression to describe the base address or offset of the bitmap data.\")\n 'expression': expr_string,\n @order(0) 'w': u64,\n @order(1) 'h': u64,\n @display_name(\"Bitmap Format\") @description(\"The pixel format that the bitmap data should be interpreted as being within.\")\n 'fmt': code_string,\n}\n")},
|
||||
{str8_lit_comp("color"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Value\") @description(\"An expression to describe the value or location of the color.\")\n 'expression': expr_string,\n}\n")},
|
||||
{str8_lit_comp("geo3d"), str8_lit_comp("@inherit(tab) x:\n{\n @display_name(\"Expression\") @description(\"An expression to describe the base address of the index buffer.\")\n 'expression': expr_string,\n 'count': expr_string,\n 'vtx': expr_string,\n 'vtx_size': expr_string,\n 'yaw': @range[0, 1] f32,\n 'pitch': @range[-0.5, 0] f32,\n 'zoom': @range[0, 100] f32,\n}\n")},
|
||||
{str8_lit_comp("getting_started"), str8_lit_comp("@inherit(tab) x:\n{\n}\n")},
|
||||
{str8_lit_comp("target"), str8_lit_comp("@row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg)\n@collection_commands(add_target)\nx:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': expr_string,\n 'stdout_path': path,\n 'stderr_path': path,\n 'stdin_path': path,\n 'environment': query,\n 'debug_subprocesses': bool,\n @no_expand @default(0) 'enabled': bool,\n}\n")},
|
||||
{str8_lit_comp("breakpoint"), str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint)\nx:\n{\n 'label': code_string,\n 'condition': expr_string,\n 'source_location': string,\n 'address_location': expr_string,\n 'hit_count': u64,\n 'address_range_size': @or(0, 1, 2, 4, 8) u64,\n 'break_on_write': bool,\n 'break_on_read': bool,\n 'break_on_execute': bool,\n @no_expand @default(1) 'enabled': bool,\n}\n")},
|
||||
{str8_lit_comp("target"), str8_lit_comp("@row_commands(@cmd_line save_cfg_to_project, enable_cfg, launch_and_run, launch_and_step_into, duplicate_cfg, remove_cfg)\n@collection_commands(add_target)\nx:\n{\n 'label': code_string,\n 'executable': path,\n 'arguments': string,\n 'working_directory': path,\n 'entry_point': expr_string,\n 'stdout_path': path,\n 'stderr_path': path,\n 'stdin_path': path,\n 'environment': query,\n 'debug_subprocesses': bool,\n @no_revert @no_expand @default(0) 'enabled': bool,\n}\n")},
|
||||
{str8_lit_comp("breakpoint"), str8_lit_comp("@row_commands(enable_cfg, duplicate_cfg, remove_cfg)\n@collection_commands(toggle_breakpoint, add_breakpoint, add_address_breakpoint)\nx:\n{\n 'label': code_string,\n 'condition': expr_string,\n 'source_location': string,\n 'address_location': expr_string,\n 'hit_count': u64,\n 'address_range_size': @or(0, 1, 2, 4, 8) u64,\n 'break_on_write': bool,\n 'break_on_read': bool,\n 'break_on_execute': bool,\n @no_revert @no_expand @default(1) 'enabled': bool,\n}\n")},
|
||||
{str8_lit_comp("watch_pin"), str8_lit_comp("@row_commands(duplicate_cfg, remove_cfg)\n@collection_commands(add_watch_pin, toggle_watch_pin)\nx:\n{\n 'expression': expr_string,\n 'source_location': string,\n 'address_location': expr_string,\n}\n")},
|
||||
{str8_lit_comp("file_path_map"), str8_lit_comp("@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @absolute path, 'dest': @absolute path}")},
|
||||
{str8_lit_comp("type_view"), str8_lit_comp("@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}")},
|
||||
|
||||
@@ -466,7 +466,7 @@ RD_VocabTable:
|
||||
'lang': code_string,
|
||||
@default(1) @description("Controls whether or not line numbers are shown.")
|
||||
'show_line_numbers':bool,
|
||||
@default(0) @display_name('Transient') @description("Controls whether or not this tab will be automatically replaced by the debugger when it snaps to new source code locations.")
|
||||
@no_revert @default(0) @display_name('Transient') @description("Controls whether or not this tab will be automatically replaced by the debugger when it snaps to new source code locations.")
|
||||
'auto': bool,
|
||||
}
|
||||
```
|
||||
@@ -581,7 +581,7 @@ RD_VocabTable:
|
||||
'stdin_path': path,
|
||||
'environment': query,
|
||||
'debug_subprocesses': bool,
|
||||
@no_expand @default(0) 'enabled': bool,
|
||||
@no_revert @no_expand @default(0) 'enabled': bool,
|
||||
}
|
||||
```,
|
||||
}
|
||||
@@ -603,7 +603,7 @@ RD_VocabTable:
|
||||
'break_on_write': bool,
|
||||
'break_on_read': bool,
|
||||
'break_on_execute': bool,
|
||||
@no_expand @default(1) 'enabled': bool,
|
||||
@no_revert @no_expand @default(1) 'enabled': bool,
|
||||
}
|
||||
```,
|
||||
}
|
||||
|
||||
@@ -1868,6 +1868,11 @@ rd_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
|
||||
value_string = parent_child_w_key->first->string;
|
||||
break;
|
||||
}
|
||||
value_string = rd_default_setting_from_names(parent->string, child_key);
|
||||
if(value_string.size != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(str8_match(child_type_name, str8_lit("bool"), 0))
|
||||
@@ -4699,6 +4704,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
//- rjf: build cell contents
|
||||
//
|
||||
RD_Cfg *cell_view = &rd_nil_cfg;
|
||||
B32 revert_cell = 0;
|
||||
UI_Signal sig = {0};
|
||||
ProfScope("build cell contents")
|
||||
UI_Parent(cell_box)
|
||||
@@ -4862,6 +4868,34 @@ rd_view_ui(Rng2F32 rect)
|
||||
cell_params.flags |= RD_CellFlag_EmptyEditButton;
|
||||
}
|
||||
|
||||
// rjf: extra revert button for non-default meta-cfgs
|
||||
if(cell->eval.space.kind == RD_EvalSpaceKind_MetaCfg &&
|
||||
!(cell->flags & RD_WatchCellFlag_NoEval))
|
||||
{
|
||||
RD_Cfg *cfg = rd_cfg_from_eval_space(cell->eval.space);
|
||||
String8 child_key = e_string_from_id(cell->eval.space.u64s[1]);
|
||||
RD_Cfg *child_cfg = rd_cfg_child_from_string(cfg, child_key);
|
||||
if(child_cfg != &rd_nil_cfg)
|
||||
{
|
||||
MD_NodePtrList schemas = rd_schemas_from_name(cfg->string);
|
||||
if(schemas.count != 0)
|
||||
{
|
||||
MD_Node *child_schema = &md_nil_node;
|
||||
for(MD_NodePtrNode *n = schemas.first; md_node_is_nil(child_schema) && n != 0; n = n->next)
|
||||
{
|
||||
child_schema = md_child_from_string(n->v, child_key, 0);
|
||||
}
|
||||
if((md_node_has_tag(child_schema, str8_lit("override"), 0) ||
|
||||
md_node_has_tag(child_schema, str8_lit("default"), 0)) &&
|
||||
!md_node_has_tag(child_schema, str8_lit("no_revert"), 0))
|
||||
{
|
||||
cell_params.flags |= RD_CellFlag_RevertButton;
|
||||
cell_params.revert_out = &revert_cell;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: apply expander (or substitute space)
|
||||
if(!ewv->text_editing || !cell_selected || row_depth > 0)
|
||||
{
|
||||
@@ -5033,6 +5067,14 @@ rd_view_ui(Rng2F32 rect)
|
||||
pressed = 1;
|
||||
}
|
||||
|
||||
// rjf: reversion
|
||||
if(revert_cell && cell->eval.space.kind == RD_EvalSpaceKind_MetaCfg)
|
||||
{
|
||||
RD_Cfg *cfg = rd_cfg_from_eval_space(cell->eval.space);
|
||||
String8 child_key = e_string_from_id(cell->eval.space.u64s[1]);
|
||||
rd_cfg_release(rd_cfg_child_from_string(cfg, child_key));
|
||||
}
|
||||
|
||||
// rjf: activation (double-click normally, or single-clicks with special buttons)
|
||||
if((!(cell_info.flags & RD_WatchCellFlag_ActivateWithSingleClick) && ui_double_clicked(sig)) ||
|
||||
((cell_info.flags & RD_WatchCellFlag_ActivateWithSingleClick) && ui_clicked(sig)) ||
|
||||
|
||||
+48
-36
@@ -3328,40 +3328,6 @@ rd_cell(RD_CellParams *params, String8 string)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: build reset-to-default, if line edit is embedded & it is marked
|
||||
//
|
||||
#if 0
|
||||
if(!is_focus_active && !is_focus_active_disabled)
|
||||
{
|
||||
UI_TagF(".")
|
||||
UI_TagF("weak")
|
||||
UI_TagF("implicit")
|
||||
UI_Parent(box)
|
||||
UI_PrefWidth(ui_em(2.f, 1.f))
|
||||
{
|
||||
UI_Column
|
||||
UI_Padding(ui_pct(1, 0))
|
||||
UI_PrefHeight(ui_em(2.f, 1.f))
|
||||
UI_CornerRadius(ui_top_font_size()*0.5f)
|
||||
UI_HoverCursor(OS_Cursor_HandPoint)
|
||||
RD_Font(RD_FontSlot_Icons)
|
||||
UI_TextAlignment(UI_TextAlign_Center)
|
||||
{
|
||||
UI_Box *edit_start_box = ui_build_box_from_stringf(UI_BoxFlag_DrawText|
|
||||
UI_BoxFlag_DrawHotEffects|
|
||||
UI_BoxFlag_DrawBorder|
|
||||
UI_BoxFlag_DrawBackground|
|
||||
UI_BoxFlag_DisableFocusOverlay|
|
||||
UI_BoxFlag_DisableFocusBorder|
|
||||
UI_BoxFlag_Clickable,
|
||||
"%S##undo", rd_icon_kind_text_table[RD_IconKind_Undo]);
|
||||
UI_Signal sig = ui_signal_from_box(edit_start_box);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: build line edit container box
|
||||
//
|
||||
@@ -3373,8 +3339,14 @@ rd_cell(RD_CellParams *params, String8 string)
|
||||
UI_Size edit_box_size = ui_pct(1, 0);
|
||||
if(build_lhs_name_desc)
|
||||
{
|
||||
F32 px_size = is_editing ? (floor_f32(dim_2f32(box->rect).x*0.5f)) : floor_f32(dr_dim_from_fstrs(&value_name_fstrs).x + ui_top_font_size()*1.5f);
|
||||
edit_box_size = ui_px(px_size, 1.f);
|
||||
if(is_editing)
|
||||
{
|
||||
edit_box_size = ui_px(floor_f32(dim_2f32(box->rect).x*0.5f), 1.f);
|
||||
}
|
||||
else
|
||||
{
|
||||
edit_box_size = ui_children_sum(1);
|
||||
}
|
||||
}
|
||||
UI_PrefWidth(edit_box_size)
|
||||
{
|
||||
@@ -3458,6 +3430,46 @@ rd_cell(RD_CellParams *params, String8 string)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: build revert-button
|
||||
//
|
||||
if(params->flags & RD_CellFlag_RevertButton && !is_focus_active && !is_focus_active_disabled)
|
||||
{
|
||||
UI_Parent(edit_box)
|
||||
UI_PrefWidth(ui_em(2.f, 1.f))
|
||||
{
|
||||
UI_TagF(".")
|
||||
UI_TagF("weak")
|
||||
UI_TagF("implicit")
|
||||
UI_Column
|
||||
UI_Padding(ui_pct(1, 0))
|
||||
UI_PrefHeight(ui_em(2.f, 1.f))
|
||||
UI_CornerRadius(ui_top_font_size()*0.5f)
|
||||
RD_Font(RD_FontSlot_Icons)
|
||||
UI_TextAlignment(UI_TextAlign_Center)
|
||||
{
|
||||
UI_Box *revert_box = ui_build_box_from_stringf(UI_BoxFlag_DrawText|
|
||||
UI_BoxFlag_DrawHotEffects|
|
||||
UI_BoxFlag_DrawBorder|
|
||||
UI_BoxFlag_DrawBackground|
|
||||
UI_BoxFlag_DisableFocusOverlay|
|
||||
UI_BoxFlag_DisableFocusBorder|
|
||||
UI_BoxFlag_Clickable,
|
||||
"%S##revert", rd_icon_kind_text_table[RD_IconKind_Undo]);
|
||||
UI_Signal sig = ui_signal_from_box(revert_box);
|
||||
if(ui_pressed(sig) && params->revert_out)
|
||||
{
|
||||
params->revert_out[0] = 1;
|
||||
}
|
||||
}
|
||||
// TODO(rjf): @hack
|
||||
if(build_toggle_switch || build_slider)
|
||||
{
|
||||
ui_spacer(ui_em(1.f, 1.f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: build toggle-switch
|
||||
//
|
||||
|
||||
@@ -26,19 +26,20 @@ enum
|
||||
|
||||
//- rjf: extra button extensions
|
||||
RD_CellFlag_EmptyEditButton = (1<<6),
|
||||
RD_CellFlag_RevertButton = (1<<7),
|
||||
|
||||
//- rjf: behavior
|
||||
RD_CellFlag_DisableEdit = (1<<7),
|
||||
RD_CellFlag_KeyboardClickable = (1<<8),
|
||||
RD_CellFlag_SingleClickActivate = (1<<9),
|
||||
RD_CellFlag_DisableEdit = (1<<8),
|
||||
RD_CellFlag_KeyboardClickable = (1<<9),
|
||||
RD_CellFlag_SingleClickActivate = (1<<10),
|
||||
|
||||
//- rjf: contents description
|
||||
RD_CellFlag_CodeContents = (1<<10),
|
||||
RD_CellFlag_CodeContents = (1<<11),
|
||||
|
||||
//- rjf: appearance
|
||||
RD_CellFlag_Border = (1<<11),
|
||||
RD_CellFlag_NoBackground = (1<<12),
|
||||
RD_CellFlag_Button = (1<<13),
|
||||
RD_CellFlag_Border = (1<<12),
|
||||
RD_CellFlag_NoBackground = (1<<13),
|
||||
RD_CellFlag_Button = (1<<14),
|
||||
};
|
||||
|
||||
typedef struct RD_CellParams RD_CellParams;
|
||||
@@ -65,6 +66,9 @@ struct RD_CellParams
|
||||
//- rjf: bindings name w info
|
||||
String8 bindings_name;
|
||||
|
||||
//- rjf: revert out
|
||||
B32 *revert_out;
|
||||
|
||||
//- rjf: text editing r/w info
|
||||
TxtPt *cursor;
|
||||
TxtPt *mark;
|
||||
|
||||
+22
-20
@@ -3341,15 +3341,17 @@ return old_value;
|
||||
internal void
|
||||
ui__push_tags_key_from_appended_string(String8 string)
|
||||
{
|
||||
B32 is_new_root = str8_match(str8_lit("."), string, 0);
|
||||
|
||||
// rjf: generate new key, by combining hash of this new string with the top
|
||||
// of the tags key stack
|
||||
UI_Key seed_key = {0};
|
||||
if(ui_state->tags_key_stack_top != 0)
|
||||
if(!is_new_root && ui_state->tags_key_stack_top != 0)
|
||||
{
|
||||
seed_key = ui_state->tags_key_stack_top->key;
|
||||
}
|
||||
UI_Key key = seed_key;
|
||||
if(!str8_match(str8_lit("."), string, 0) && string.size > 0)
|
||||
if(!is_new_root && string.size > 0)
|
||||
{
|
||||
key = ui_key_from_string(seed_key, string);
|
||||
}
|
||||
@@ -3370,23 +3372,23 @@ ui__push_tags_key_from_appended_string(String8 string)
|
||||
}
|
||||
|
||||
// rjf: store in tags cache
|
||||
U64 slot_idx = key.u64[0] % ui_state->tags_cache_slots_count;
|
||||
UI_TagsCacheSlot *slot = &ui_state->tags_cache_slots[slot_idx];
|
||||
UI_TagsCacheNode *node = 0;
|
||||
for(UI_TagsCacheNode *n = slot->first; n != 0; n = n->next)
|
||||
if(!is_new_root)
|
||||
{
|
||||
if(ui_key_match(n->key, key))
|
||||
U64 slot_idx = key.u64[0] % ui_state->tags_cache_slots_count;
|
||||
UI_TagsCacheSlot *slot = &ui_state->tags_cache_slots[slot_idx];
|
||||
UI_TagsCacheNode *node = 0;
|
||||
for(UI_TagsCacheNode *n = slot->first; n != 0; n = n->next)
|
||||
{
|
||||
node = n;
|
||||
break;
|
||||
if(ui_key_match(n->key, key))
|
||||
{
|
||||
node = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(node == 0)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8List tags = {0};
|
||||
if(!str8_match(string, str8_lit("."), 0))
|
||||
if(node == 0)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
String8List tags = {0};
|
||||
if(string.size != 0)
|
||||
{
|
||||
str8_list_push(scratch.arena, &tags, push_str8_copy(ui_build_arena(), string));
|
||||
@@ -3402,12 +3404,12 @@ ui__push_tags_key_from_appended_string(String8 string)
|
||||
str8_list_push(scratch.arena, &tags, push_str8_copy(ui_build_arena(), n->v));
|
||||
}
|
||||
}
|
||||
node = push_array(ui_build_arena(), UI_TagsCacheNode, 1);
|
||||
SLLQueuePush(slot->first, slot->last, node);
|
||||
node->key = key;
|
||||
node->tags = str8_array_from_list(ui_build_arena(), &tags);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
node = push_array(ui_build_arena(), UI_TagsCacheNode, 1);
|
||||
SLLQueuePush(slot->first, slot->last, node);
|
||||
node->key = key;
|
||||
node->tags = str8_array_from_list(ui_build_arena(), &tags);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user