mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 05:18:40 +00:00
further progress on unified lister interface
This commit is contained in:
+186
-103
@@ -3127,7 +3127,7 @@ rd_window_state_from_cfg(RD_Cfg *cfg)
|
|||||||
ws->ctx_menu_input_buffer = push_array(ws->arena, U8, ws->ctx_menu_input_buffer_size);
|
ws->ctx_menu_input_buffer = push_array(ws->arena, U8, ws->ctx_menu_input_buffer_size);
|
||||||
ws->drop_completion_arena = arena_alloc();
|
ws->drop_completion_arena = arena_alloc();
|
||||||
ws->hover_eval_arena = arena_alloc();
|
ws->hover_eval_arena = arena_alloc();
|
||||||
ws->lister_params_arena = arena_alloc();
|
ws->lister_arena = arena_alloc();
|
||||||
ws->query_cmd_arena = arena_alloc();
|
ws->query_cmd_arena = arena_alloc();
|
||||||
ws->last_dpi = os_dpi_from_window(ws->os);
|
ws->last_dpi = os_dpi_from_window(ws->os);
|
||||||
for EachEnumVal(RD_SettingCode, code)
|
for EachEnumVal(RD_SettingCode, code)
|
||||||
@@ -3137,6 +3137,7 @@ rd_window_state_from_cfg(RD_Cfg *cfg)
|
|||||||
ws->setting_vals[code] = rd_setting_code_default_val_table[code];
|
ws->setting_vals[code] = rd_setting_code_default_val_table[code];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ws->lister_input_cursor = ws->lister_input_mark = txt_pt(1, 1);
|
||||||
ws->setting_vals[RD_SettingCode_MainFontSize].s32 = ws->setting_vals[RD_SettingCode_MainFontSize].s32 * (ws->last_dpi / 96.f);
|
ws->setting_vals[RD_SettingCode_MainFontSize].s32 = ws->setting_vals[RD_SettingCode_MainFontSize].s32 * (ws->last_dpi / 96.f);
|
||||||
ws->setting_vals[RD_SettingCode_CodeFontSize].s32 = ws->setting_vals[RD_SettingCode_CodeFontSize].s32 * (ws->last_dpi / 96.f);
|
ws->setting_vals[RD_SettingCode_CodeFontSize].s32 = ws->setting_vals[RD_SettingCode_CodeFontSize].s32 * (ws->last_dpi / 96.f);
|
||||||
ws->setting_vals[RD_SettingCode_MainFontSize].s32 = ClampBot(ws->setting_vals[RD_SettingCode_MainFontSize].s32, rd_setting_code_default_val_table[RD_SettingCode_MainFontSize].s32);
|
ws->setting_vals[RD_SettingCode_MainFontSize].s32 = ClampBot(ws->setting_vals[RD_SettingCode_MainFontSize].s32, rd_setting_code_default_val_table[RD_SettingCode_MainFontSize].s32);
|
||||||
@@ -3206,14 +3207,14 @@ rd_window_frame(void)
|
|||||||
RD_Cfg *window = rd_cfg_from_handle(rd_regs()->window);
|
RD_Cfg *window = rd_cfg_from_handle(rd_regs()->window);
|
||||||
RD_WindowState *ws = rd_window_state_from_cfg(rd_cfg_from_handle(rd_regs()->window));
|
RD_WindowState *ws = rd_window_state_from_cfg(rd_cfg_from_handle(rd_regs()->window));
|
||||||
RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, window);
|
RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, window);
|
||||||
B32 window_is_focused = os_window_is_focused(ws->os) || ws->window_temporarily_focused_ipc;
|
B32 window_is_focused = (os_window_is_focused(ws->os) || ws->window_temporarily_focused_ipc);
|
||||||
B32 popup_open = rd_state->popup_active;
|
B32 popup_is_open = (rd_state->popup_active);
|
||||||
B32 query_is_open = (ws->query_cmd_name.size != 0);
|
B32 lister_is_open = (ws->lister_last_frame_idx+1 >= rd_state->frame_index);
|
||||||
B32 hover_eval_is_open = (!popup_open &&
|
B32 hover_eval_is_open = (!popup_is_open &&
|
||||||
ws->hover_eval_string.size != 0 &&
|
ws->hover_eval_string.size != 0 &&
|
||||||
ws->hover_eval_first_frame_idx+20 < ws->hover_eval_last_frame_idx &&
|
ws->hover_eval_first_frame_idx+20 < ws->hover_eval_last_frame_idx &&
|
||||||
rd_state->frame_index-ws->hover_eval_last_frame_idx < 20);
|
rd_state->frame_index-ws->hover_eval_last_frame_idx < 20);
|
||||||
if(!window_is_focused || popup_open)
|
if(!window_is_focused || popup_is_open)
|
||||||
{
|
{
|
||||||
ws->menu_bar_key_held = 0;
|
ws->menu_bar_key_held = 0;
|
||||||
}
|
}
|
||||||
@@ -3816,25 +3817,55 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////
|
||||||
|
//- rjf: prepare for active query
|
||||||
|
//
|
||||||
|
if(ws->query_cmd_name.size != 0)
|
||||||
|
{
|
||||||
|
if(ui_slot_press(UI_EventActionSlot_Cancel))
|
||||||
|
{
|
||||||
|
rd_cmd(RD_CmdKind_CancelQuery);
|
||||||
|
}
|
||||||
|
if(ui_slot_press(UI_EventActionSlot_Accept))
|
||||||
|
{
|
||||||
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
RD_RegsScope()
|
||||||
|
{
|
||||||
|
//rd_regs_fill_slot_from_string(query->slot, str8(ws->query_input_buffer, ws->query_input_string_size));
|
||||||
|
rd_cmd(RD_CmdKind_CompleteQuery);
|
||||||
|
}
|
||||||
|
scratch_end(scratch);
|
||||||
|
}
|
||||||
|
rd_set_lister_query(.flags = 0xffffffff);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
//- rjf: build lister
|
//- rjf: build lister
|
||||||
//
|
//
|
||||||
ProfScope("build lister")
|
ProfScope("build lister")
|
||||||
if(!ui_key_match(ws->lister_params.anchor_key, ui_key_zero()) && ws->lister_last_frame_idx+1 >= rd_state->frame_index)
|
if(ws->lister_last_frame_idx+1 >= rd_state->frame_index)
|
||||||
{
|
|
||||||
String8 input = str8(ws->lister_input_buffer, ws->lister_input_size);
|
|
||||||
String8 query_word = rd_lister_query_word_from_input_string_off(input, ws->lister_params.cursor_off);
|
|
||||||
String8 query_path = rd_lister_query_path_from_input_string_off(input, ws->lister_params.cursor_off);
|
|
||||||
UI_Box *lister_root_box = ui_box_from_key(ws->lister_params.anchor_key);
|
|
||||||
if(!ui_box_is_nil(lister_root_box))
|
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0, 0);
|
Temp scratch = scratch_begin(0, 0);
|
||||||
DI_Scope *di_scope = di_scope_open();
|
DI_Scope *di_scope = di_scope_open();
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
//- rjf: unpack
|
||||||
|
//
|
||||||
|
U64 input_cursor_off = ws->lister_params.cursor_off;
|
||||||
|
if(ws->lister_params.flags & RD_ListerFlag_LineEdit)
|
||||||
|
{
|
||||||
|
input_cursor_off = ws->lister_input_cursor.column-1;
|
||||||
|
}
|
||||||
|
String8 input = str8(ws->lister_input_buffer, ws->lister_input_size);
|
||||||
|
String8 query_word = rd_lister_query_word_from_input_string_off(input, input_cursor_off);
|
||||||
|
String8 query_path = rd_lister_query_path_from_input_string_off(input, input_cursor_off);
|
||||||
|
UI_Box *lister_anchor_box = ui_box_from_key(ws->lister_params.anchor_key);
|
||||||
DI_KeyList dbgi_keys_list = d_push_active_dbgi_key_list(scratch.arena);
|
DI_KeyList dbgi_keys_list = d_push_active_dbgi_key_list(scratch.arena);
|
||||||
DI_KeyArray dbgi_keys = di_key_array_from_list(scratch.arena, &dbgi_keys_list);
|
DI_KeyArray dbgi_keys = di_key_array_from_list(scratch.arena, &dbgi_keys_list);
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
//- rjf: grab rdis
|
//- rjf: grab rdis
|
||||||
|
//
|
||||||
U64 rdis_count = dbgi_keys.count;
|
U64 rdis_count = dbgi_keys.count;
|
||||||
RDI_Parsed **rdis = push_array(scratch.arena, RDI_Parsed *, rdis_count);
|
RDI_Parsed **rdis = push_array(scratch.arena, RDI_Parsed *, rdis_count);
|
||||||
{
|
{
|
||||||
@@ -3846,7 +3877,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
//- rjf: unpack lister params
|
//- rjf: unpack lister params
|
||||||
|
//
|
||||||
CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_base_regs()->thread);
|
CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_base_regs()->thread);
|
||||||
U64 thread_rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, rd_base_regs()->unwind_count);
|
U64 thread_rip_vaddr = d_query_cached_rip_from_thread_unwind(thread, rd_base_regs()->unwind_count);
|
||||||
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process);
|
CTRL_Entity *process = ctrl_entity_ancestor_from_kind(thread, CTRL_EntityKind_Process);
|
||||||
@@ -3854,10 +3887,14 @@ rd_window_frame(void)
|
|||||||
U64 thread_rip_voff = ctrl_voff_from_vaddr(module, thread_rip_vaddr);
|
U64 thread_rip_voff = ctrl_voff_from_vaddr(module, thread_rip_vaddr);
|
||||||
DI_Key dbgi_key = ctrl_dbgi_key_from_module(module);
|
DI_Key dbgi_key = ctrl_dbgi_key_from_module(module);
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
//- rjf: gather lister items
|
//- rjf: gather lister items
|
||||||
|
//
|
||||||
RD_ListerItemChunkList item_list = {0};
|
RD_ListerItemChunkList item_list = {0};
|
||||||
{
|
{
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather locals
|
//- rjf: gather locals
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Locals)
|
if(ws->lister_params.flags & RD_ListerFlag_Locals)
|
||||||
{
|
{
|
||||||
E_String2NumMap *locals_map = d_query_cached_locals_map_from_dbgi_key_voff(&dbgi_key, thread_rip_voff);
|
E_String2NumMap *locals_map = d_query_cached_locals_map_from_dbgi_key_voff(&dbgi_key, thread_rip_voff);
|
||||||
@@ -3888,7 +3925,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather registers
|
//- rjf: gather registers
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Registers)
|
if(ws->lister_params.flags & RD_ListerFlag_Registers)
|
||||||
{
|
{
|
||||||
Arch arch = thread->arch;
|
Arch arch = thread->arch;
|
||||||
@@ -3930,7 +3969,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather view rules
|
//- rjf: gather view rules
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_ViewRules)
|
if(ws->lister_params.flags & RD_ListerFlag_ViewRules)
|
||||||
{
|
{
|
||||||
for(U64 slot_idx = 0; slot_idx < d_state->view_rule_spec_table_size; slot_idx += 1)
|
for(U64 slot_idx = 0; slot_idx < d_state->view_rule_spec_table_size; slot_idx += 1)
|
||||||
@@ -3956,13 +3997,17 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather members
|
//- rjf: gather members
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Members)
|
if(ws->lister_params.flags & RD_ListerFlag_Members)
|
||||||
{
|
{
|
||||||
// TODO(rjf)
|
// TODO(rjf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather globals
|
//- rjf: gather globals
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Globals && query_word.size != 0)
|
if(ws->lister_params.flags & RD_ListerFlag_Globals && query_word.size != 0)
|
||||||
{
|
{
|
||||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_globals_search_key")), d_hash_from_string(str8_lit("autocomp_globals_search_key"))};
|
U128 search_key = {d_hash_from_string(str8_lit("autocomp_globals_search_key")), d_hash_from_string(str8_lit("autocomp_globals_search_key"))};
|
||||||
@@ -3996,7 +4041,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather thread locals
|
//- rjf: gather thread locals
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_ThreadLocals && query_word.size != 0)
|
if(ws->lister_params.flags & RD_ListerFlag_ThreadLocals && query_word.size != 0)
|
||||||
{
|
{
|
||||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_tvars_dis_key")), d_hash_from_string(str8_lit("autocomp_tvars_dis_key"))};
|
U128 search_key = {d_hash_from_string(str8_lit("autocomp_tvars_dis_key")), d_hash_from_string(str8_lit("autocomp_tvars_dis_key"))};
|
||||||
@@ -4030,7 +4077,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather procedures
|
//- rjf: gather procedures
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Procedures && query_word.size != 0)
|
if(ws->lister_params.flags & RD_ListerFlag_Procedures && query_word.size != 0)
|
||||||
{
|
{
|
||||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_procedures_search_key")), d_hash_from_string(str8_lit("autocomp_procedures_search_key"))};
|
U128 search_key = {d_hash_from_string(str8_lit("autocomp_procedures_search_key")), d_hash_from_string(str8_lit("autocomp_procedures_search_key"))};
|
||||||
@@ -4064,7 +4113,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather types
|
//- rjf: gather types
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Types && query_word.size != 0)
|
if(ws->lister_params.flags & RD_ListerFlag_Types && query_word.size != 0)
|
||||||
{
|
{
|
||||||
U128 search_key = {d_hash_from_string(str8_lit("autocomp_types_search_key")), d_hash_from_string(str8_lit("autocomp_types_search_key"))};
|
U128 search_key = {d_hash_from_string(str8_lit("autocomp_types_search_key")), d_hash_from_string(str8_lit("autocomp_types_search_key"))};
|
||||||
@@ -4098,7 +4149,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather languages
|
//- rjf: gather languages
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Languages)
|
if(ws->lister_params.flags & RD_ListerFlag_Languages)
|
||||||
{
|
{
|
||||||
for EachNonZeroEnumVal(TXT_LangKind, lang)
|
for EachNonZeroEnumVal(TXT_LangKind, lang)
|
||||||
@@ -4119,7 +4172,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather architectures
|
//- rjf: gather architectures
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Architectures)
|
if(ws->lister_params.flags & RD_ListerFlag_Architectures)
|
||||||
{
|
{
|
||||||
for EachNonZeroEnumVal(Arch, arch)
|
for EachNonZeroEnumVal(Arch, arch)
|
||||||
@@ -4137,7 +4192,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather tex2dformats
|
//- rjf: gather tex2dformats
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Tex2DFormats)
|
if(ws->lister_params.flags & RD_ListerFlag_Tex2DFormats)
|
||||||
{
|
{
|
||||||
for EachEnumVal(R_Tex2DFormat, fmt)
|
for EachEnumVal(R_Tex2DFormat, fmt)
|
||||||
@@ -4155,7 +4212,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather view rule params
|
//- rjf: gather view rule params
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_ViewRuleParams)
|
if(ws->lister_params.flags & RD_ListerFlag_ViewRuleParams)
|
||||||
{
|
{
|
||||||
for(String8Node *n = ws->lister_params.strings.first; n != 0; n = n->next)
|
for(String8Node *n = ws->lister_params.strings.first; n != 0; n = n->next)
|
||||||
@@ -4173,7 +4232,9 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather files
|
//- rjf: gather files
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Files)
|
if(ws->lister_params.flags & RD_ListerFlag_Files)
|
||||||
{
|
{
|
||||||
// rjf: find containing directory in query_path
|
// rjf: find containing directory in query_path
|
||||||
@@ -4248,7 +4309,9 @@ rd_window_frame(void)
|
|||||||
os_file_iter_end(it);
|
os_file_iter_end(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////
|
||||||
//- rjf: gather commands
|
//- rjf: gather commands
|
||||||
|
//
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Commands)
|
if(ws->lister_params.flags & RD_ListerFlag_Commands)
|
||||||
{
|
{
|
||||||
for EachNonZeroEnumVal(RD_CmdKind, k)
|
for EachNonZeroEnumVal(RD_CmdKind, k)
|
||||||
@@ -4280,66 +4343,67 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
//- rjf: lister item list -> sorted array
|
//- rjf: lister item list -> sorted array
|
||||||
|
//
|
||||||
RD_ListerItemArray item_array = rd_lister_item_array_from_chunk_list(scratch.arena, &item_list);
|
RD_ListerItemArray item_array = rd_lister_item_array_from_chunk_list(scratch.arena, &item_list);
|
||||||
rd_lister_item_array_sort__in_place(&item_array);
|
rd_lister_item_array_sort__in_place(&item_array);
|
||||||
|
|
||||||
//- rjf: animate
|
//////////////////////////
|
||||||
{
|
//- rjf: animate values
|
||||||
// rjf: animate target # of rows
|
//
|
||||||
{
|
F32 fast_rate = 1 - pow_f32(2, (-40.f * rd_state->frame_dt));
|
||||||
F32 rate = rd_setting_val_from_code(RD_SettingCode_MenuAnimations).s32 ? (1 - pow_f32(2, (-60.f * rd_state->frame_dt))) : 1.f;
|
F32 lister_open_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "lister_open"), 1.f);
|
||||||
F32 target = Min((F32)item_array.count, 16.f);
|
F32 lister_num_of_rows_t = ui_anim(ui_key_from_stringf(ui_key_zero(), "lister_num_of_rows"), (F32)item_array.count);
|
||||||
if(abs_f32(target - ws->lister_num_visible_rows_t) > 0.01f)
|
ws->lister_scroll_pt.off -= ws->lister_scroll_pt.off*fast_rate;
|
||||||
{
|
|
||||||
rd_request_frame();
|
|
||||||
}
|
|
||||||
ws->lister_num_visible_rows_t += (target - ws->lister_num_visible_rows_t) * rate;
|
|
||||||
if(abs_f32(target - ws->lister_num_visible_rows_t) <= 0.02f)
|
|
||||||
{
|
|
||||||
ws->lister_num_visible_rows_t = target;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// rjf: animate open
|
//////////////////////////
|
||||||
{
|
//- rjf: unpack build parameters
|
||||||
F32 rate = rd_setting_val_from_code(RD_SettingCode_MenuAnimations).s32 ? 1 - pow_f32(2, (-60.f * rd_state->frame_dt)) : 1.f;
|
//
|
||||||
F32 diff = 1.f-ws->lister_open_t;
|
F32 squish = ((ws->lister_params.squish != 0.f) ? ws->lister_params.squish : (0.25f - 0.25f*lister_open_t));
|
||||||
ws->lister_open_t += diff*rate;
|
F32 transparency = ((ws->lister_params.transparency != 0.f) ? ws->lister_params.transparency : 1.f-lister_open_t);
|
||||||
if(abs_f32(diff) < 0.05f)
|
|
||||||
{
|
|
||||||
ws->lister_open_t = 1.f;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rd_request_frame();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//- rjf: build
|
|
||||||
if(item_array.count != 0)
|
|
||||||
{
|
|
||||||
F32 squish = ws->lister_params.squish;
|
|
||||||
F32 transparency = ws->lister_params.transparency;
|
|
||||||
if(squish == 0.f)
|
|
||||||
{
|
|
||||||
squish = 0.25f - 0.25f*ws->lister_open_t;
|
|
||||||
}
|
|
||||||
if(transparency == 0.f)
|
|
||||||
{
|
|
||||||
transparency = 1.f-ws->lister_open_t;
|
|
||||||
}
|
|
||||||
F32 width_px = ui_box_is_nil(lister_root_box) ? (ui_top_font_size()*30.f) : dim_2f32(lister_root_box->rect).x;
|
|
||||||
F32 row_height_px = floor_f32(ui_top_font_size()*2.5f);
|
F32 row_height_px = floor_f32(ui_top_font_size()*2.5f);
|
||||||
if(ws->lister_params.flags & RD_ListerFlag_Descriptions)
|
if(ws->lister_params.flags & RD_ListerFlag_Descriptions)
|
||||||
{
|
{
|
||||||
row_height_px += floor_f32(ui_top_font_size()*3.5f);
|
row_height_px += floor_f32(ui_top_font_size()*3.5f);
|
||||||
}
|
}
|
||||||
ui_set_next_fixed_x(lister_root_box->rect.x0 + ws->lister_params.anchor_off.x);
|
Vec2F32 content_rect_dim = dim_2f32(content_rect);
|
||||||
ui_set_next_fixed_y(lister_root_box->rect.y0 + ws->lister_params.anchor_off.y);
|
Vec2F32 content_rect_center = center_2f32(content_rect);
|
||||||
ui_set_next_pref_width(ui_px(width_px, 1.f));
|
F32 line_edit_height_px = 0;
|
||||||
ui_set_next_pref_height(ui_px(row_height_px*ws->lister_num_visible_rows_t + ui_top_font_size()*2.f, 1.f));
|
if(ws->lister_params.flags & RD_ListerFlag_LineEdit)
|
||||||
|
{
|
||||||
|
line_edit_height_px = floor_f32(ui_top_font_size()*3.f);
|
||||||
|
}
|
||||||
|
F32 lister_height_max = content_rect_dim.y*0.9f;
|
||||||
|
Vec2F32 lister_dim_px =
|
||||||
|
{
|
||||||
|
content_rect_dim.x*0.5f,
|
||||||
|
line_edit_height_px + lister_num_of_rows_t*row_height_px,
|
||||||
|
};
|
||||||
|
if(!ui_box_is_nil(lister_anchor_box))
|
||||||
|
{
|
||||||
|
lister_dim_px.x = dim_2f32(lister_anchor_box->rect).x;
|
||||||
|
}
|
||||||
|
lister_dim_px.x = Max(lister_dim_px.x, ui_top_font_size()*30.f);
|
||||||
|
lister_dim_px.y = Min(lister_dim_px.y, lister_height_max);
|
||||||
|
Vec2F32 lister_pos_px =
|
||||||
|
{
|
||||||
|
content_rect_center.x - lister_dim_px.x/2,
|
||||||
|
content_rect_center.y - content_rect_dim.y*0.9f/2,
|
||||||
|
};
|
||||||
|
if(!ui_box_is_nil(lister_anchor_box))
|
||||||
|
{
|
||||||
|
lister_pos_px = v2f32(lister_anchor_box->rect.x0 + ws->lister_params.anchor_off.x,
|
||||||
|
lister_anchor_box->rect.y0 + ws->lister_params.anchor_off.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
//- rjf: build top-level lister box
|
||||||
|
//
|
||||||
|
ui_set_next_fixed_x(lister_pos_px.x);
|
||||||
|
ui_set_next_fixed_y(lister_pos_px.y);
|
||||||
|
ui_set_next_pref_width(ui_px(lister_dim_px.x, 1.f));
|
||||||
|
ui_set_next_pref_height(ui_px(lister_dim_px.y, 1.f));
|
||||||
ui_set_next_child_layout_axis(Axis2_Y);
|
ui_set_next_child_layout_axis(Axis2_Y);
|
||||||
ui_set_next_corner_radius_01(ui_top_font_size()*0.25f);
|
ui_set_next_corner_radius_01(ui_top_font_size()*0.25f);
|
||||||
ui_set_next_corner_radius_11(ui_top_font_size()*0.25f);
|
ui_set_next_corner_radius_11(ui_top_font_size()*0.25f);
|
||||||
@@ -4348,8 +4412,7 @@ rd_window_frame(void)
|
|||||||
UI_Transparency(transparency)
|
UI_Transparency(transparency)
|
||||||
RD_Palette(RD_PaletteCode_Floating)
|
RD_Palette(RD_PaletteCode_Floating)
|
||||||
{
|
{
|
||||||
lister_box = ui_build_box_from_stringf(UI_BoxFlag_DefaultFocusNavY|
|
lister_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable|
|
||||||
UI_BoxFlag_Clickable|
|
|
||||||
UI_BoxFlag_Clip|
|
UI_BoxFlag_Clip|
|
||||||
UI_BoxFlag_RoundChildrenByParent|
|
UI_BoxFlag_RoundChildrenByParent|
|
||||||
UI_BoxFlag_DisableFocusOverlay|
|
UI_BoxFlag_DisableFocusOverlay|
|
||||||
@@ -4358,21 +4421,54 @@ rd_window_frame(void)
|
|||||||
UI_BoxFlag_DrawDropShadow|
|
UI_BoxFlag_DrawDropShadow|
|
||||||
UI_BoxFlag_DrawBackground,
|
UI_BoxFlag_DrawBackground,
|
||||||
"lister_box");
|
"lister_box");
|
||||||
if(ws->lister_input_dirty)
|
|
||||||
{
|
|
||||||
ws->lister_input_dirty = 0;
|
|
||||||
lister_box->default_nav_focus_hot_key = lister_box->default_nav_focus_active_key = lister_box->default_nav_focus_next_hot_key = lister_box->default_nav_focus_next_active_key = ui_key_zero();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
UI_Parent(lister_box)
|
//////////////////////////
|
||||||
|
//- rjf: build lister line edit
|
||||||
|
//
|
||||||
|
if(ws->lister_params.flags & RD_ListerFlag_LineEdit)
|
||||||
UI_WidthFill
|
UI_WidthFill
|
||||||
UI_PrefHeight(ui_px(row_height_px, 1.f))
|
UI_Parent(lister_box)
|
||||||
UI_HoverCursor(OS_Cursor_HandPoint)
|
UI_Focus(UI_FocusKind_On)
|
||||||
UI_Focus(UI_FocusKind_Null)
|
|
||||||
RD_Palette(RD_PaletteCode_ImplicitButton)
|
|
||||||
UI_Padding(ui_em(1.f, 1.f))
|
|
||||||
{
|
{
|
||||||
for(U64 idx = 0; idx < item_array.count; idx += 1)
|
UI_PrefHeight(ui_px(line_edit_height_px, 1.f))
|
||||||
|
{
|
||||||
|
UI_Signal sig = rd_line_edit(RD_LineEditFlag_Border,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
&ws->lister_input_cursor,
|
||||||
|
&ws->lister_input_mark,
|
||||||
|
ws->lister_input_buffer,
|
||||||
|
sizeof(ws->lister_input_buffer),
|
||||||
|
&ws->lister_input_size,
|
||||||
|
0,
|
||||||
|
str8(ws->lister_input_buffer, ws->lister_input_size),
|
||||||
|
str8_lit("###lister_text_input"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////
|
||||||
|
//- rjf: build lister contents
|
||||||
|
//
|
||||||
|
UI_ScrollListParams params =
|
||||||
|
{
|
||||||
|
.flags = UI_ScrollListFlag_All,
|
||||||
|
.dim_px = v2f32(lister_dim_px.x, lister_dim_px.y - line_edit_height_px),
|
||||||
|
.row_height_px = row_height_px,
|
||||||
|
.cursor_range = r2s64(v2s64(0, 0), v2s64(0, item_array.count)),
|
||||||
|
.item_range = r1s64(0, item_array.count),
|
||||||
|
.cursor_min_is_empty_selection[Axis2_Y] = 1,
|
||||||
|
};
|
||||||
|
Vec2S64 cursor = {0};
|
||||||
|
Rng1S64 visible_row_range = {0};
|
||||||
|
UI_ScrollListSignal scroll_list_signal = {0};
|
||||||
|
UI_WidthFill UI_HeightFill
|
||||||
|
UI_Parent(lister_box)
|
||||||
|
UI_ScrollList(¶ms, &ws->lister_scroll_pt, &cursor, 0, &visible_row_range, &scroll_list_signal)
|
||||||
|
RD_Palette(RD_PaletteCode_ImplicitButton)
|
||||||
|
{
|
||||||
|
UI_HoverCursor(OS_Cursor_HandPoint)
|
||||||
|
for(S64 idx = visible_row_range.min; 0 <= idx && idx < visible_row_range.max && idx < item_array.count; idx += 1)
|
||||||
{
|
{
|
||||||
RD_ListerItem *item = &item_array.v[idx];
|
RD_ListerItem *item = &item_array.v[idx];
|
||||||
|
|
||||||
@@ -4384,7 +4480,7 @@ rd_window_frame(void)
|
|||||||
{
|
{
|
||||||
// rjf: icon
|
// rjf: icon
|
||||||
if(item->icon_kind != RD_IconKind_Null)
|
if(item->icon_kind != RD_IconKind_Null)
|
||||||
UI_PrefWidth(ui_em(3.f, 1.f))
|
UI_PrefWidth(ui_em(2.f, 1.f))
|
||||||
UI_Column
|
UI_Column
|
||||||
UI_Padding(ui_pct(1, 0))
|
UI_Padding(ui_pct(1, 0))
|
||||||
RD_Font(RD_FontSlot_Icons)
|
RD_Font(RD_FontSlot_Icons)
|
||||||
@@ -4434,7 +4530,7 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rjf: bindings
|
// rjf: bindings
|
||||||
if(item->can_have_bindings)
|
if(item->can_have_bindings) RD_Palette(RD_PaletteCode_Base)
|
||||||
{
|
{
|
||||||
ui_set_next_flags(UI_BoxFlag_Clickable);
|
ui_set_next_flags(UI_BoxFlag_Clickable);
|
||||||
UI_PrefWidth(ui_children_sum(1.f)) UI_HeightFill UI_NamedColumn(str8_lit("binding_column")) UI_Padding(ui_em(1.5f, 1.f))
|
UI_PrefWidth(ui_children_sum(1.f)) UI_HeightFill UI_NamedColumn(str8_lit("binding_column")) UI_Padding(ui_em(1.5f, 1.f))
|
||||||
@@ -4472,13 +4568,12 @@ rd_window_frame(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
di_scope_close(di_scope);
|
di_scope_close(di_scope);
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
#if 0 // TODO(rjf): @cfg
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
//- rjf: prepare query state for the in-progress query command
|
//- rjf: prepare query state for the in-progress query command
|
||||||
//
|
//
|
||||||
@@ -4711,6 +4806,7 @@ rd_window_frame(void)
|
|||||||
{
|
{
|
||||||
ui_build_box_from_key(UI_BoxFlag_DrawBackground, ui_key_zero());
|
ui_build_box_from_key(UI_BoxFlag_DrawBackground, ui_key_zero());
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
//- rjf: top-level registers context menu
|
//- rjf: top-level registers context menu
|
||||||
@@ -6426,7 +6522,7 @@ rd_window_frame(void)
|
|||||||
|
|
||||||
//- rjf: build if good
|
//- rjf: build if good
|
||||||
if(!e_type_key_match(eval.type_key, e_type_key_zero()) && !ui_any_ctx_menu_is_open())
|
if(!e_type_key_match(eval.type_key, e_type_key_zero()) && !ui_any_ctx_menu_is_open())
|
||||||
UI_Focus((hover_eval_is_open && !ui_any_ctx_menu_is_open() && ws->hover_eval_focused && (!query_is_open || !ws->query_input_selected)) ? UI_FocusKind_Null : UI_FocusKind_Off)
|
UI_Focus((hover_eval_is_open && !ui_any_ctx_menu_is_open() && ws->hover_eval_focused && !lister_is_open) ? UI_FocusKind_Null : UI_FocusKind_Off)
|
||||||
{
|
{
|
||||||
//- rjf: eval -> viz artifacts
|
//- rjf: eval -> viz artifacts
|
||||||
F32 row_height = floor_f32(ui_top_font_size()*2.8f);
|
F32 row_height = floor_f32(ui_top_font_size()*2.8f);
|
||||||
@@ -7041,7 +7137,7 @@ rd_window_frame(void)
|
|||||||
if(panel->first != &rd_nil_panel_node) {continue;}
|
if(panel->first != &rd_nil_panel_node) {continue;}
|
||||||
B32 panel_is_focused = (window_is_focused &&
|
B32 panel_is_focused = (window_is_focused &&
|
||||||
!ws->menu_bar_focused &&
|
!ws->menu_bar_focused &&
|
||||||
(!query_is_open || !ws->query_input_selected) &&
|
!lister_is_open &&
|
||||||
!ui_any_ctx_menu_is_open() &&
|
!ui_any_ctx_menu_is_open() &&
|
||||||
!ws->hover_eval_focused &&
|
!ws->hover_eval_focused &&
|
||||||
panel_tree.focused == panel);
|
panel_tree.focused == panel);
|
||||||
@@ -10006,25 +10102,15 @@ rd_set_lister_query_(RD_ListerParams *params)
|
|||||||
{
|
{
|
||||||
RD_Cfg *window_cfg = rd_cfg_from_handle(rd_regs()->window);
|
RD_Cfg *window_cfg = rd_cfg_from_handle(rd_regs()->window);
|
||||||
RD_WindowState *ws = rd_window_state_from_cfg(window_cfg);
|
RD_WindowState *ws = rd_window_state_from_cfg(window_cfg);
|
||||||
if(params->cursor_off != ws->lister_params.cursor_off)
|
arena_clear(ws->lister_arena);
|
||||||
{
|
ws->lister_regs = rd_regs_copy(ws->lister_arena, rd_regs());
|
||||||
ws->lister_input_dirty = 1;
|
|
||||||
}
|
|
||||||
if(!ui_key_match(ws->lister_params.anchor_key, params->anchor_key))
|
|
||||||
{
|
|
||||||
ws->lister_num_visible_rows_t = 0;
|
|
||||||
ws->lister_open_t = 0;
|
|
||||||
}
|
|
||||||
if(ws->lister_last_frame_idx+1 < rd_state->frame_index)
|
|
||||||
{
|
|
||||||
ws->lister_num_visible_rows_t = 0;
|
|
||||||
ws->lister_open_t = 0;
|
|
||||||
}
|
|
||||||
arena_clear(ws->lister_params_arena);
|
|
||||||
MemoryCopyStruct(&ws->lister_params, params);
|
MemoryCopyStruct(&ws->lister_params, params);
|
||||||
ws->lister_params.strings = str8_list_copy(ws->lister_params_arena, &ws->lister_params.strings);
|
ws->lister_params.strings = str8_list_copy(ws->lister_arena, &ws->lister_params.strings);
|
||||||
|
if(!(params->flags & RD_ListerFlag_LineEdit))
|
||||||
|
{
|
||||||
ws->lister_input_size = Min(params->input.size, sizeof(ws->lister_input_buffer));
|
ws->lister_input_size = Min(params->input.size, sizeof(ws->lister_input_buffer));
|
||||||
MemoryCopy(ws->lister_input_buffer, params->input.str, ws->lister_input_size);
|
MemoryCopy(ws->lister_input_buffer, params->input.str, ws->lister_input_size);
|
||||||
|
}
|
||||||
ws->lister_last_frame_idx = rd_state->frame_index;
|
ws->lister_last_frame_idx = rd_state->frame_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11602,7 +11688,7 @@ rd_frame(void)
|
|||||||
arena_release(ws->ctx_menu_arena);
|
arena_release(ws->ctx_menu_arena);
|
||||||
arena_release(ws->drop_completion_arena);
|
arena_release(ws->drop_completion_arena);
|
||||||
arena_release(ws->hover_eval_arena);
|
arena_release(ws->hover_eval_arena);
|
||||||
arena_release(ws->lister_params_arena);
|
arena_release(ws->lister_arena);
|
||||||
arena_release(ws->arena);
|
arena_release(ws->arena);
|
||||||
DLLRemove_NPZ(&rd_nil_window_state, rd_state->first_window_state, rd_state->last_window_state, ws, order_next, order_prev);
|
DLLRemove_NPZ(&rd_nil_window_state, rd_state->first_window_state, rd_state->last_window_state, ws, order_next, order_prev);
|
||||||
DLLRemove_NP(rd_state->window_state_slots[slot_idx].first, rd_state->window_state_slots[slot_idx].last, ws, hash_next, hash_prev);
|
DLLRemove_NP(rd_state->window_state_slots[slot_idx].first, rd_state->window_state_slots[slot_idx].last, ws, hash_next, hash_prev);
|
||||||
@@ -12403,12 +12489,10 @@ rd_frame(void)
|
|||||||
RD_WindowState *ws = rd_window_state_from_cfg(wcfg);
|
RD_WindowState *ws = rd_window_state_from_cfg(wcfg);
|
||||||
if(ws != 0)
|
if(ws != 0)
|
||||||
{
|
{
|
||||||
ws->query_cmd_gen += 1;
|
|
||||||
arena_clear(ws->query_cmd_arena);
|
arena_clear(ws->query_cmd_arena);
|
||||||
ws->query_cmd_name = push_str8_copy(ws->query_cmd_arena, cmd->regs->cmd_name);
|
ws->query_cmd_name = push_str8_copy(ws->query_cmd_arena, cmd->regs->cmd_name);
|
||||||
ws->query_cmd_regs = rd_regs_copy(ws->query_cmd_arena, rd_regs());
|
ws->query_cmd_regs = rd_regs_copy(ws->query_cmd_arena, rd_regs());
|
||||||
MemoryZeroArray(ws->query_cmd_regs_mask);
|
MemoryZeroArray(ws->query_cmd_regs_mask);
|
||||||
ws->query_input_selected = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
@@ -13741,7 +13825,6 @@ rd_frame(void)
|
|||||||
RD_Cfg *window = rd_window_from_cfg(panel);
|
RD_Cfg *window = rd_window_from_cfg(panel);
|
||||||
RD_WindowState *ws = rd_window_state_from_cfg(window);
|
RD_WindowState *ws = rd_window_state_from_cfg(window);
|
||||||
ws->menu_bar_focused = 0;
|
ws->menu_bar_focused = 0;
|
||||||
ws->query_input_selected = 0;
|
|
||||||
}
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
|||||||
+33
-31
@@ -542,23 +542,24 @@ typedef U32 RD_ListerFlags;
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
//- rjf: lister visual settings
|
//- rjf: lister visual settings
|
||||||
RD_ListerFlag_Descriptions = (1<<0),
|
RD_ListerFlag_LineEdit = (1<<0), // determines whether or not the lister has its own line edit, or if the filtering string is sourced by a user
|
||||||
|
RD_ListerFlag_Descriptions = (1<<1), // determines whether or not the lister items have descriptions (taller & bigger buttons)
|
||||||
|
|
||||||
//- rjf: lister item sources
|
//- rjf: lister item sources
|
||||||
RD_ListerFlag_Locals = (1<<1),
|
RD_ListerFlag_Locals = (1<<2),
|
||||||
RD_ListerFlag_Registers = (1<<2),
|
RD_ListerFlag_Registers = (1<<3),
|
||||||
RD_ListerFlag_ViewRules = (1<<3),
|
RD_ListerFlag_ViewRules = (1<<4),
|
||||||
RD_ListerFlag_ViewRuleParams= (1<<4),
|
RD_ListerFlag_ViewRuleParams= (1<<5),
|
||||||
RD_ListerFlag_Members = (1<<5),
|
RD_ListerFlag_Members = (1<<6),
|
||||||
RD_ListerFlag_Globals = (1<<6),
|
RD_ListerFlag_Globals = (1<<7),
|
||||||
RD_ListerFlag_ThreadLocals = (1<<7),
|
RD_ListerFlag_ThreadLocals = (1<<8),
|
||||||
RD_ListerFlag_Procedures = (1<<8),
|
RD_ListerFlag_Procedures = (1<<9),
|
||||||
RD_ListerFlag_Types = (1<<9),
|
RD_ListerFlag_Types = (1<<10),
|
||||||
RD_ListerFlag_Languages = (1<<10),
|
RD_ListerFlag_Languages = (1<<11),
|
||||||
RD_ListerFlag_Architectures = (1<<11),
|
RD_ListerFlag_Architectures = (1<<12),
|
||||||
RD_ListerFlag_Tex2DFormats = (1<<12),
|
RD_ListerFlag_Tex2DFormats = (1<<13),
|
||||||
RD_ListerFlag_Files = (1<<13),
|
RD_ListerFlag_Files = (1<<14),
|
||||||
RD_ListerFlag_Commands = (1<<14),
|
RD_ListerFlag_Commands = (1<<15),
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct RD_ListerItem RD_ListerItem;
|
typedef struct RD_ListerItem RD_ListerItem;
|
||||||
@@ -619,6 +620,15 @@ struct RD_ListerParams
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Per-Window State
|
//~ rjf: Per-Window State
|
||||||
|
|
||||||
|
typedef struct RD_QueryMenu RD_QueryMenu;
|
||||||
|
struct RD_QueryMenu
|
||||||
|
{
|
||||||
|
RD_QueryMenu *next;
|
||||||
|
Arena *arena;
|
||||||
|
RD_Regs *regs;
|
||||||
|
RD_RegSlot slot;
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct RD_WindowState RD_WindowState;
|
typedef struct RD_WindowState RD_WindowState;
|
||||||
struct RD_WindowState
|
struct RD_WindowState
|
||||||
{
|
{
|
||||||
@@ -668,26 +678,23 @@ struct RD_WindowState
|
|||||||
|
|
||||||
// rjf: lister state
|
// rjf: lister state
|
||||||
U64 lister_last_frame_idx;
|
U64 lister_last_frame_idx;
|
||||||
B32 lister_input_dirty;
|
Arena *lister_arena;
|
||||||
Arena *lister_params_arena;
|
RD_Regs *lister_regs;
|
||||||
RD_ListerParams lister_params;
|
RD_ListerParams lister_params;
|
||||||
|
UI_ScrollPt lister_scroll_pt;
|
||||||
U8 lister_input_buffer[1024];
|
U8 lister_input_buffer[1024];
|
||||||
U64 lister_input_size;
|
U64 lister_input_size;
|
||||||
F32 lister_open_t;
|
TxtPt lister_input_cursor;
|
||||||
F32 lister_num_visible_rows_t;
|
TxtPt lister_input_mark;
|
||||||
|
|
||||||
|
// rjf: query menu stack
|
||||||
|
RD_QueryMenu *top_query_menu;
|
||||||
|
|
||||||
// rjf: query view stack
|
// rjf: query view stack
|
||||||
U64 query_cmd_gen;
|
|
||||||
Arena *query_cmd_arena;
|
Arena *query_cmd_arena;
|
||||||
String8 query_cmd_name;
|
String8 query_cmd_name;
|
||||||
RD_Regs *query_cmd_regs;
|
RD_Regs *query_cmd_regs;
|
||||||
U64 query_cmd_regs_mask[(RD_RegSlot_COUNT + 63) / 64];
|
U64 query_cmd_regs_mask[(RD_RegSlot_COUNT + 63) / 64];
|
||||||
U64 query_input_gen;
|
|
||||||
B32 query_input_selected;
|
|
||||||
U8 query_input_buffer[1024];
|
|
||||||
U64 query_input_string_size;
|
|
||||||
TxtPt query_input_cursor;
|
|
||||||
TxtPt query_input_mark;
|
|
||||||
|
|
||||||
// rjf: hover eval state
|
// rjf: hover eval state
|
||||||
B32 hover_eval_focused;
|
B32 hover_eval_focused;
|
||||||
@@ -1092,11 +1099,6 @@ internal RD_ViewRuleKind rd_view_rule_kind_from_string(String8 string);
|
|||||||
internal RD_ViewRuleInfo *rd_view_rule_info_from_kind(RD_ViewRuleKind kind);
|
internal RD_ViewRuleInfo *rd_view_rule_info_from_kind(RD_ViewRuleKind kind);
|
||||||
internal RD_ViewRuleInfo *rd_view_rule_info_from_string(String8 string);
|
internal RD_ViewRuleInfo *rd_view_rule_info_from_string(String8 string);
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
//~ rjf: Panel Type Functions
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Global Cross-Window UI Interaction State Functions
|
//~ rjf: Global Cross-Window UI Interaction State Functions
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user