mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-22 03:35:00 -07:00
more progress on entity simplification; df -> rd; eliminate dbg_frontend distinction from raddbg layer
This commit is contained in:
@@ -78,8 +78,8 @@ main_thread_base_entry_point(void (*entry_point)(CmdLine *cmdline), char **argum
|
||||
#if defined(DBG_ENGINE_CORE_H) && !defined(D_INIT_MANUAL)
|
||||
d_init();
|
||||
#endif
|
||||
#if defined(DBG_FRONTEND_CORE_H) && !defined(DF_INIT_MANUAL)
|
||||
df_init(&cmdline);
|
||||
#if defined(RADDBG_CORE_H) && !defined(RD_INIT_MANUAL)
|
||||
rd_init(&cmdline);
|
||||
#endif
|
||||
|
||||
//- rjf: call into entry point
|
||||
|
||||
@@ -101,7 +101,7 @@ D_ViewRuleTable:
|
||||
//~ rjf: Developer Toggles
|
||||
|
||||
@table(name)
|
||||
DF_DevToggleTable:
|
||||
D_DevToggleTable:
|
||||
{
|
||||
{telemetry_capture}
|
||||
{simulate_lag}
|
||||
@@ -117,13 +117,13 @@ DF_DevToggleTable:
|
||||
|
||||
@gen
|
||||
{
|
||||
@expand(DF_DevToggleTable a) `global B32 DEV_$(a.name) = 0;`
|
||||
@expand(D_DevToggleTable a) `global B32 DEV_$(a.name) = 0;`
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`struct {B32 *value_ptr; String8 name;} DEV_toggle_table[] =`;
|
||||
`{`;
|
||||
@expand(DF_DevToggleTable a) `{&DEV_$(a.name), str8_lit_comp("$(a.name)")},`
|
||||
@expand(D_DevToggleTable a) `{&DEV_$(a.name), str8_lit_comp("$(a.name)")},`
|
||||
`};`;
|
||||
}
|
||||
|
||||
@@ -951,7 +951,7 @@ d_lines_array_from_file_path_line_range(Arena *arena, String8 file_path, Rng1S64
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
DI_Scope *scope = di_scope_open();
|
||||
DI_KeyList dbgi_keys = d_push_active_dbgi_key_list(scratch.arena);
|
||||
String8List overrides = d_possible_overrides_from_file_path(scratch.arena, file_path);
|
||||
String8List overrides = rd_possible_overrides_from_file_path(scratch.arena, file_path);
|
||||
for(String8Node *override_n = overrides.first;
|
||||
override_n != 0;
|
||||
override_n = override_n->next)
|
||||
@@ -1536,7 +1536,7 @@ d_init(void)
|
||||
d_state = push_array(arena, D_State, 1);
|
||||
d_state->arena = arena;
|
||||
d_state->cmds_arena = arena_alloc();
|
||||
d_state->output_log_key = hs_hash_from_data(str8_lit("df_output_log_key"));
|
||||
d_state->output_log_key = hs_hash_from_data(str8_lit("output_log_key"));
|
||||
d_state->ctrl_entity_store = ctrl_entity_store_alloc();
|
||||
d_state->ctrl_stop_arena = arena_alloc();
|
||||
d_state->view_rule_spec_table_size = 1024;
|
||||
@@ -1632,16 +1632,16 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
|
||||
// rjf: kill all entities which are marked to die on stop
|
||||
{
|
||||
DF_Entity *request = df_entity_from_id(event->msg_id);
|
||||
if(df_entity_is_nil(request))
|
||||
RD_Entity *request = rd_entity_from_id(event->msg_id);
|
||||
if(rd_entity_is_nil(request))
|
||||
{
|
||||
for(DF_Entity *entity = df_entity_root();
|
||||
!df_entity_is_nil(entity);
|
||||
entity = df_entity_rec_depth_first_pre(entity, df_entity_root()).next)
|
||||
for(RD_Entity *entity = rd_entity_root();
|
||||
!rd_entity_is_nil(entity);
|
||||
entity = rd_entity_rec_depth_first_pre(entity, rd_entity_root()).next)
|
||||
{
|
||||
if(entity->flags & DF_EntityFlag_DiesOnRunStop)
|
||||
if(entity->flags & RD_EntityFlag_DiesOnRunStop)
|
||||
{
|
||||
df_entity_mark_for_deletion(entity);
|
||||
rd_entity_mark_for_deletion(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1685,8 +1685,8 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
MTX_Op op = {r1u64(0, 0xffffffffffffffffull), str8_lit("[new session]\n")};
|
||||
mtx_push_op(d_state->output_log_key, op);
|
||||
#if 0 // TODO(rjf): @msgs
|
||||
DF_EntityList bps = d_query_cached_entity_list_with_kind(DF_EntityKind_Breakpoint);
|
||||
for(DF_EntityNode *n = bps.first; n != 0; n = n->next)
|
||||
RD_EntityList bps = d_query_cached_entity_list_with_kind(RD_EntityKind_Breakpoint);
|
||||
for(RD_EntityNode *n = bps.first; n != 0; n = n->next)
|
||||
{
|
||||
n->entity->u64 = 0;
|
||||
}
|
||||
@@ -1694,39 +1694,39 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
}
|
||||
|
||||
// rjf: create entity
|
||||
DF_Entity *machine = df_machine_entity_from_machine_id(event->entity.machine_id);
|
||||
DF_Entity *entity = df_entity_alloc(machine, DF_EntityKind_Process);
|
||||
df_entity_equip_u64(entity, event->msg_id);
|
||||
df_entity_equip_ctrl_handle(entity, event->entity);
|
||||
df_entity_equip_ctrl_id(entity, event->entity_id);
|
||||
df_entity_equip_arch(entity, event->arch);
|
||||
RD_Entity *machine = rd_machine_entity_from_machine_id(event->entity.machine_id);
|
||||
RD_Entity *entity = rd_entity_alloc(machine, RD_EntityKind_Process);
|
||||
rd_entity_equip_u64(entity, event->msg_id);
|
||||
rd_entity_equip_ctrl_handle(entity, event->entity);
|
||||
rd_entity_equip_ctrl_id(entity, event->entity_id);
|
||||
rd_entity_equip_arch(entity, event->arch);
|
||||
}break;
|
||||
|
||||
case CTRL_EventKind_NewThread:
|
||||
{
|
||||
// rjf: create entity
|
||||
DF_Entity *parent = df_entity_from_ctrl_handle(event->parent);
|
||||
DF_Entity *entity = df_entity_alloc(parent, DF_EntityKind_Thread);
|
||||
df_entity_equip_ctrl_handle(entity, event->entity);
|
||||
df_entity_equip_arch(entity, event->arch);
|
||||
df_entity_equip_ctrl_id(entity, event->entity_id);
|
||||
df_entity_equip_stack_base(entity, event->stack_base);
|
||||
df_entity_equip_vaddr(entity, event->rip_vaddr);
|
||||
RD_Entity *parent = rd_entity_from_ctrl_handle(event->parent);
|
||||
RD_Entity *entity = rd_entity_alloc(parent, RD_EntityKind_Thread);
|
||||
rd_entity_equip_ctrl_handle(entity, event->entity);
|
||||
rd_entity_equip_arch(entity, event->arch);
|
||||
rd_entity_equip_ctrl_id(entity, event->entity_id);
|
||||
rd_entity_equip_stack_base(entity, event->stack_base);
|
||||
rd_entity_equip_vaddr(entity, event->rip_vaddr);
|
||||
if(event->string.size != 0)
|
||||
{
|
||||
df_entity_equip_name(entity, event->string);
|
||||
rd_entity_equip_name(entity, event->string);
|
||||
}
|
||||
|
||||
// rjf: find any pending thread names correllating with this TID -> equip name if found match
|
||||
{
|
||||
DF_EntityList pending_thread_names = d_query_cached_entity_list_with_kind(DF_EntityKind_PendingThreadName);
|
||||
for(DF_EntityNode *n = pending_thread_names.first; n != 0; n = n->next)
|
||||
RD_EntityList pending_thread_names = d_query_cached_entity_list_with_kind(RD_EntityKind_PendingThreadName);
|
||||
for(RD_EntityNode *n = pending_thread_names.first; n != 0; n = n->next)
|
||||
{
|
||||
DF_Entity *pending_thread_name = n->entity;
|
||||
RD_Entity *pending_thread_name = n->entity;
|
||||
if(event->entity.machine_id == pending_thread_name->ctrl_handle.machine_id && event->entity_id == pending_thread_name->ctrl_id)
|
||||
{
|
||||
df_entity_mark_for_deletion(pending_thread_name);
|
||||
df_entity_equip_name(entity, pending_thread_name->string);
|
||||
rd_entity_mark_for_deletion(pending_thread_name);
|
||||
rd_entity_equip_name(entity, pending_thread_name->string);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1734,13 +1734,13 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
|
||||
// rjf: determine index in process
|
||||
U64 thread_idx_in_process = 0;
|
||||
for(DF_Entity *child = parent->first; !df_entity_is_nil(child); child = child->next)
|
||||
for(RD_Entity *child = parent->first; !rd_entity_is_nil(child); child = child->next)
|
||||
{
|
||||
if(child == entity)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if(child->kind == DF_EntityKind_Thread)
|
||||
if(child->kind == RD_EntityKind_Thread)
|
||||
{
|
||||
thread_idx_in_process += 1;
|
||||
}
|
||||
@@ -1749,63 +1749,63 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
// rjf: build default thread color table
|
||||
Vec4F32 thread_colors[] =
|
||||
{
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread0),
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread1),
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread2),
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread3),
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread4),
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread5),
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread6),
|
||||
df_rgba_from_theme_color(DF_ThemeColor_Thread7),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread0),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread1),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread2),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread3),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread4),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread5),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread6),
|
||||
rd_rgba_from_theme_color(RD_ThemeColor_Thread7),
|
||||
};
|
||||
|
||||
// rjf: pick color
|
||||
Vec4F32 thread_color = thread_colors[thread_idx_in_process % ArrayCount(thread_colors)];
|
||||
|
||||
// rjf: equip color
|
||||
df_entity_equip_color_rgba(entity, thread_color);
|
||||
rd_entity_equip_color_rgba(entity, thread_color);
|
||||
}break;
|
||||
|
||||
case CTRL_EventKind_NewModule:
|
||||
{
|
||||
// rjf: grab process
|
||||
DF_Entity *parent = df_entity_from_ctrl_handle(event->parent);
|
||||
RD_Entity *parent = rd_entity_from_ctrl_handle(event->parent);
|
||||
|
||||
// rjf: determine if this is the first module
|
||||
B32 is_first = 0;
|
||||
if(df_entity_is_nil(df_entity_child_from_kind(parent, DF_EntityKind_Module)))
|
||||
if(rd_entity_is_nil(rd_entity_child_from_kind(parent, RD_EntityKind_Module)))
|
||||
{
|
||||
is_first = 1;
|
||||
}
|
||||
|
||||
// rjf: create module entity
|
||||
DF_Entity *module = df_entity_alloc(parent, DF_EntityKind_Module);
|
||||
df_entity_equip_ctrl_handle(module, event->entity);
|
||||
df_entity_equip_arch(module, event->arch);
|
||||
df_entity_equip_name(module, event->string);
|
||||
df_entity_equip_vaddr_rng(module, event->vaddr_rng);
|
||||
df_entity_equip_vaddr(module, event->rip_vaddr);
|
||||
df_entity_equip_timestamp(module, event->timestamp);
|
||||
RD_Entity *module = rd_entity_alloc(parent, RD_EntityKind_Module);
|
||||
rd_entity_equip_ctrl_handle(module, event->entity);
|
||||
rd_entity_equip_arch(module, event->arch);
|
||||
rd_entity_equip_name(module, event->string);
|
||||
rd_entity_equip_vaddr_rng(module, event->vaddr_rng);
|
||||
rd_entity_equip_vaddr(module, event->rip_vaddr);
|
||||
rd_entity_equip_timestamp(module, event->timestamp);
|
||||
|
||||
// rjf: is first -> find target, equip process & module & first thread with target color
|
||||
if(is_first)
|
||||
{
|
||||
DF_EntityList targets = d_query_cached_entity_list_with_kind(DF_EntityKind_Target);
|
||||
for(DF_EntityNode *n = targets.first; n != 0; n = n->next)
|
||||
RD_EntityList targets = d_query_cached_entity_list_with_kind(RD_EntityKind_Target);
|
||||
for(RD_EntityNode *n = targets.first; n != 0; n = n->next)
|
||||
{
|
||||
DF_Entity *target = n->entity;
|
||||
DF_Entity *exe = df_entity_child_from_kind(target, DF_EntityKind_Executable);
|
||||
RD_Entity *target = n->entity;
|
||||
RD_Entity *exe = rd_entity_child_from_kind(target, RD_EntityKind_Executable);
|
||||
String8 exe_name = exe->string;
|
||||
String8 exe_name_normalized = path_normalized_from_string(scratch.arena, exe_name);
|
||||
String8 module_name_normalized = path_normalized_from_string(scratch.arena, module->string);
|
||||
if(str8_match(exe_name_normalized, module_name_normalized, StringMatchFlag_CaseInsensitive) &&
|
||||
target->flags & DF_EntityFlag_HasColor)
|
||||
target->flags & RD_EntityFlag_HasColor)
|
||||
{
|
||||
DF_Entity *first_thread = df_entity_child_from_kind(parent, DF_EntityKind_Thread);
|
||||
Vec4F32 rgba = df_rgba_from_entity(target);
|
||||
df_entity_equip_color_rgba(parent, rgba);
|
||||
df_entity_equip_color_rgba(first_thread, rgba);
|
||||
df_entity_equip_color_rgba(module, rgba);
|
||||
RD_Entity *first_thread = rd_entity_child_from_kind(parent, RD_EntityKind_Thread);
|
||||
Vec4F32 rgba = rd_rgba_from_entity(target);
|
||||
rd_entity_equip_color_rgba(parent, rgba);
|
||||
rd_entity_equip_color_rgba(first_thread, rgba);
|
||||
rd_entity_equip_color_rgba(module, rgba);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -1815,34 +1815,34 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
case CTRL_EventKind_EndProc:
|
||||
{
|
||||
U32 pid = event->entity_id;
|
||||
DF_Entity *process = df_entity_from_ctrl_handle(event->entity);
|
||||
df_entity_mark_for_deletion(process);
|
||||
RD_Entity *process = rd_entity_from_ctrl_handle(event->entity);
|
||||
rd_entity_mark_for_deletion(process);
|
||||
}break;
|
||||
|
||||
case CTRL_EventKind_EndThread:
|
||||
{
|
||||
DF_Entity *thread = df_entity_from_ctrl_handle(event->entity);
|
||||
df_entity_mark_for_deletion(thread);
|
||||
RD_Entity *thread = rd_entity_from_ctrl_handle(event->entity);
|
||||
rd_entity_mark_for_deletion(thread);
|
||||
}break;
|
||||
|
||||
case CTRL_EventKind_EndModule:
|
||||
{
|
||||
DF_Entity *module = df_entity_from_ctrl_handle(event->entity);
|
||||
df_entity_mark_for_deletion(module);
|
||||
RD_Entity *module = rd_entity_from_ctrl_handle(event->entity);
|
||||
rd_entity_mark_for_deletion(module);
|
||||
}break;
|
||||
|
||||
//- rjf: debug info changes
|
||||
|
||||
case CTRL_EventKind_ModuleDebugInfoPathChange:
|
||||
{
|
||||
DF_Entity *module = df_entity_from_ctrl_handle(event->entity);
|
||||
DF_Entity *debug_info = df_entity_child_from_kind(module, DF_EntityKind_DebugInfoPath);
|
||||
if(df_entity_is_nil(debug_info))
|
||||
RD_Entity *module = rd_entity_from_ctrl_handle(event->entity);
|
||||
RD_Entity *debug_info = rd_entity_child_from_kind(module, RD_EntityKind_DebugInfoPath);
|
||||
if(rd_entity_is_nil(debug_info))
|
||||
{
|
||||
debug_info = df_entity_alloc(module, DF_EntityKind_DebugInfoPath);
|
||||
debug_info = rd_entity_alloc(module, RD_EntityKind_DebugInfoPath);
|
||||
}
|
||||
df_entity_equip_name(debug_info, event->string);
|
||||
df_entity_equip_timestamp(debug_info, event->timestamp);
|
||||
rd_entity_equip_name(debug_info, event->string);
|
||||
rd_entity_equip_timestamp(debug_info, event->timestamp);
|
||||
}break;
|
||||
|
||||
//- rjf: debug strings
|
||||
@@ -1856,25 +1856,25 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
case CTRL_EventKind_ThreadName:
|
||||
{
|
||||
String8 string = event->string;
|
||||
DF_Entity *entity = df_entity_from_ctrl_handle(event->entity);
|
||||
RD_Entity *entity = rd_entity_from_ctrl_handle(event->entity);
|
||||
if(event->entity_id != 0)
|
||||
{
|
||||
entity = df_entity_from_ctrl_id(event->entity.machine_id, event->entity_id);
|
||||
entity = rd_entity_from_ctrl_id(event->entity.machine_id, event->entity_id);
|
||||
}
|
||||
if(df_entity_is_nil(entity))
|
||||
if(rd_entity_is_nil(entity))
|
||||
{
|
||||
DF_Entity *process = df_entity_from_ctrl_handle(event->parent);
|
||||
if(!df_entity_is_nil(process))
|
||||
RD_Entity *process = rd_entity_from_ctrl_handle(event->parent);
|
||||
if(!rd_entity_is_nil(process))
|
||||
{
|
||||
entity = df_entity_alloc(process, DF_EntityKind_PendingThreadName);
|
||||
df_entity_equip_name(entity, string);
|
||||
df_entity_equip_ctrl_handle(entity, ctrl_handle_make(event->entity.machine_id, dmn_handle_zero()));
|
||||
df_entity_equip_ctrl_id(entity, event->entity_id);
|
||||
entity = rd_entity_alloc(process, RD_EntityKind_PendingThreadName);
|
||||
rd_entity_equip_name(entity, string);
|
||||
rd_entity_equip_ctrl_handle(entity, ctrl_handle_make(event->entity.machine_id, dmn_handle_zero()));
|
||||
rd_entity_equip_ctrl_id(entity, event->entity_id);
|
||||
}
|
||||
}
|
||||
if(!df_entity_is_nil(entity))
|
||||
if(!rd_entity_is_nil(entity))
|
||||
{
|
||||
df_entity_equip_name(entity, string);
|
||||
rd_entity_equip_name(entity, string);
|
||||
}
|
||||
}break;
|
||||
|
||||
@@ -2000,15 +2000,15 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
default:{}break;
|
||||
case DI_EventKind_ConversionStarted:
|
||||
{
|
||||
DF_Entity *task = df_entity_alloc(df_entity_root(), DF_EntityKind_ConversionTask);
|
||||
df_entity_equip_name(task, event->string);
|
||||
RD_Entity *task = rd_entity_alloc(rd_entity_root(), RD_EntityKind_ConversionTask);
|
||||
rd_entity_equip_name(task, event->string);
|
||||
}break;
|
||||
case DI_EventKind_ConversionEnded:
|
||||
{
|
||||
DF_Entity *task = df_entity_from_name_and_kind(event->string, DF_EntityKind_ConversionTask);
|
||||
if(!df_entity_is_nil(task))
|
||||
RD_Entity *task = rd_entity_from_name_and_kind(event->string, RD_EntityKind_ConversionTask);
|
||||
if(!rd_entity_is_nil(task))
|
||||
{
|
||||
df_entity_mark_for_deletion(task);
|
||||
rd_entity_mark_for_deletion(task);
|
||||
}
|
||||
}break;
|
||||
}
|
||||
@@ -2355,22 +2355,22 @@ d_tick(Arena *arena, D_TargetArray *targets, D_BreakpointArray *breakpoints, D_P
|
||||
|
||||
#if 0 // TODO(rjf): @msgs
|
||||
// rjf: gather targets corresponding to all launched processes
|
||||
DF_EntityList targets = {0};
|
||||
RD_EntityList targets = {0};
|
||||
{
|
||||
DF_EntityList processes = d_query_cached_entity_list_with_kind(DF_EntityKind_Process);
|
||||
for(DF_EntityNode *n = processes.first; n != 0; n = n->next)
|
||||
RD_EntityList processes = d_query_cached_entity_list_with_kind(RD_EntityKind_Process);
|
||||
for(RD_EntityNode *n = processes.first; n != 0; n = n->next)
|
||||
{
|
||||
DF_Entity *process = n->entity;
|
||||
DF_Entity *target = df_entity_from_handle(process->entity_handle);
|
||||
if(!df_entity_is_nil(target))
|
||||
RD_Entity *process = n->entity;
|
||||
RD_Entity *target = rd_entity_from_handle(process->entity_handle);
|
||||
if(!rd_entity_is_nil(target))
|
||||
{
|
||||
df_entity_list_push(scratch.arena, &targets, target);
|
||||
rd_entity_list_push(scratch.arena, &targets, target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: re-launch targets
|
||||
d_cmd(D_CmdKind_LaunchAndRun, .entity_list = df_handle_list_from_entity_list(scratch.arena, targets));
|
||||
d_cmd(D_CmdKind_LaunchAndRun, .entity_list = rd_handle_list_from_entity_list(scratch.arena, targets));
|
||||
#endif
|
||||
}break;
|
||||
case D_CmdKind_StepInto:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,7 +0,0 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#include "dbg_frontend_core.c"
|
||||
#include "dbg_frontend_widgets.c"
|
||||
#include "dbg_frontend_views.c"
|
||||
#include "dbg_frontend_view_rules.c"
|
||||
@@ -1,12 +0,0 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DBG_FRONTEND_INC_H
|
||||
#define DBG_FRONTEND_INC_H
|
||||
|
||||
#include "dbg_frontend_core.h"
|
||||
#include "dbg_frontend_widgets.h"
|
||||
#include "dbg_frontend_views.h"
|
||||
#include "dbg_frontend_view_rules.h"
|
||||
|
||||
#endif // DBG_GFX_INC_H
|
||||
@@ -1,219 +0,0 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "list"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(list){}
|
||||
DF_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(list){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "dec"
|
||||
|
||||
DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(dec){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "bin"
|
||||
|
||||
DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(bin){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "oct"
|
||||
|
||||
DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(oct){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "hex"
|
||||
|
||||
DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(hex){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "only"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(only){}
|
||||
DF_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(only){}
|
||||
DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(only){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "omit"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(omit){}
|
||||
DF_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(omit){}
|
||||
DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(omit){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "no_addr"
|
||||
|
||||
DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr){}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "checkbox"
|
||||
|
||||
DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||
if(ui_clicked(df_icon_buttonf(value_eval.value.u64 == 0 ? DF_IconKind_CheckHollow : DF_IconKind_CheckFilled, 0, "###check")))
|
||||
{
|
||||
d_commit_eval_value_string(eval, value_eval.value.u64 == 0 ? str8_lit("1") : str8_lit("0"));
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "rgba"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(color_rgba)
|
||||
{
|
||||
EV_Block *vb = ev_block_begin(arena, EV_BlockKind_Canvas, key, ev_key_make(ev_hash_from_key(key), 1), depth);
|
||||
vb->string = string;
|
||||
vb->expr = expr;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
vb->view_rules = view_rules;
|
||||
ev_block_end(out, vb);
|
||||
}
|
||||
|
||||
DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(color_rgba)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
Vec4F32 rgba = df_rgba_from_eval_params(eval, params);
|
||||
Vec4F32 hsva = hsva_from_rgba(rgba);
|
||||
|
||||
//- rjf: build text box
|
||||
UI_Box *text_box = &ui_g_nil_box;
|
||||
UI_WidthFill DF_Font(DF_FontSlot_Code)
|
||||
{
|
||||
text_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero());
|
||||
DR_FancyStringList fancy_strings = {0};
|
||||
{
|
||||
DR_FancyString open_paren = {ui_top_font(), str8_lit("("), ui_top_palette()->text, ui_top_font_size(), 0, 0};
|
||||
DR_FancyString comma = {ui_top_font(), str8_lit(", "), ui_top_palette()->text, ui_top_font_size(), 0, 0};
|
||||
DR_FancyString r_fstr = {ui_top_font(), push_str8f(scratch.arena, "%.2f", rgba.x), v4f32(1.f, 0.25f, 0.25f, 1.f), ui_top_font_size(), 4.f, 0};
|
||||
DR_FancyString g_fstr = {ui_top_font(), push_str8f(scratch.arena, "%.2f", rgba.y), v4f32(0.25f, 1.f, 0.25f, 1.f), ui_top_font_size(), 4.f, 0};
|
||||
DR_FancyString b_fstr = {ui_top_font(), push_str8f(scratch.arena, "%.2f", rgba.z), v4f32(0.25f, 0.25f, 1.f, 1.f), ui_top_font_size(), 4.f, 0};
|
||||
DR_FancyString a_fstr = {ui_top_font(), push_str8f(scratch.arena, "%.2f", rgba.w), v4f32(1.f, 1.f, 1.f, 1.f), ui_top_font_size(), 4.f, 0};
|
||||
DR_FancyString clse_paren = {ui_top_font(), str8_lit(")"), ui_top_palette()->text, ui_top_font_size(), 0, 0};
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &open_paren);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &r_fstr);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &comma);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &g_fstr);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &comma);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &b_fstr);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &comma);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &a_fstr);
|
||||
dr_fancy_string_list_push(scratch.arena, &fancy_strings, &clse_paren);
|
||||
}
|
||||
ui_box_equip_display_fancy_strings(text_box, &fancy_strings);
|
||||
}
|
||||
|
||||
//- rjf: build color box
|
||||
UI_Box *color_box = &ui_g_nil_box;
|
||||
UI_PrefWidth(ui_em(1.875f, 1.f)) UI_ChildLayoutAxis(Axis2_Y)
|
||||
{
|
||||
color_box = ui_build_box_from_stringf(UI_BoxFlag_Clickable, "color_box");
|
||||
UI_Parent(color_box) UI_PrefHeight(ui_em(1.875f, 1.f)) UI_Padding(ui_pct(1, 0))
|
||||
{
|
||||
UI_Palette(ui_build_palette(ui_top_palette(), .background = rgba)) UI_CornerRadius(ui_top_font_size()*0.5f)
|
||||
ui_build_box_from_key(UI_BoxFlag_DrawBackground|UI_BoxFlag_DrawBorder, ui_key_zero());
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: space
|
||||
ui_spacer(ui_em(0.375f, 1.f));
|
||||
|
||||
//- rjf: hover color box -> show components
|
||||
UI_Signal sig = ui_signal_from_box(color_box);
|
||||
if(ui_hovering(sig))
|
||||
{
|
||||
ui_do_color_tooltip_hsva(hsva);
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "text"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(text)
|
||||
{
|
||||
EV_Block *vb = ev_block_begin(arena, EV_BlockKind_Canvas, key, ev_key_make(ev_hash_from_key(key), 1), depth);
|
||||
vb->string = string;
|
||||
vb->expr = expr;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
vb->view_rules = view_rules;
|
||||
ev_block_end(out, vb);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "disasm"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(disasm)
|
||||
{
|
||||
EV_Block *vb = ev_block_begin(arena, EV_BlockKind_Canvas, key, ev_key_make(ev_hash_from_key(key), 1), depth);
|
||||
vb->string = string;
|
||||
vb->expr = expr;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
vb->view_rules = view_rules;
|
||||
ev_block_end(out, vb);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "memory"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(memory)
|
||||
{
|
||||
EV_Block *vb = ev_block_begin(arena, EV_BlockKind_Canvas, key, ev_key_make(ev_hash_from_key(key), 1), depth);
|
||||
vb->string = string;
|
||||
vb->expr = expr;
|
||||
vb->visual_idx_range = r1u64(0, 16);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
vb->view_rules = view_rules;
|
||||
ev_block_end(out, vb);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "graph"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(graph)
|
||||
{
|
||||
EV_Block *vb = ev_block_begin(arena, EV_BlockKind_Canvas, key, ev_key_make(ev_hash_from_key(key), 1), depth);
|
||||
vb->string = string;
|
||||
vb->expr = expr;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
vb->view_rules = view_rules;
|
||||
ev_block_end(out, vb);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "bitmap"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(bitmap)
|
||||
{
|
||||
EV_Block *vb = ev_block_begin(arena, EV_BlockKind_Canvas, key, ev_key_make(ev_hash_from_key(key), 1), depth);
|
||||
vb->string = string;
|
||||
vb->expr = expr;
|
||||
vb->visual_idx_range = r1u64(0, 8);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
vb->view_rules = view_rules;
|
||||
ev_block_end(out, vb);
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: "geo3d"
|
||||
|
||||
EV_VIEW_RULE_BLOCK_PROD_FUNCTION_DEF(geo3d)
|
||||
{
|
||||
EV_Block *vb = ev_block_begin(arena, EV_BlockKind_Canvas, key, ev_key_make(ev_hash_from_key(key), 1), depth);
|
||||
vb->string = string;
|
||||
vb->expr = expr;
|
||||
vb->visual_idx_range = r1u64(0, 16);
|
||||
vb->semantic_idx_range = r1u64(0, 1);
|
||||
vb->view_rules = view_rules;
|
||||
ev_block_end(out, vb);
|
||||
}
|
||||
@@ -1,190 +0,0 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DBG_FRONTEND_VIEWS_H
|
||||
#define DBG_FRONTEND_VIEWS_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Code View Types
|
||||
|
||||
typedef U32 DF_CodeViewFlags;
|
||||
enum
|
||||
{
|
||||
DF_CodeViewFlag_StickToBottom = (1<<0),
|
||||
};
|
||||
|
||||
typedef U32 DF_CodeViewBuildFlags;
|
||||
enum
|
||||
{
|
||||
DF_CodeViewBuildFlag_Margins = (1<<0),
|
||||
DF_CodeViewBuildFlag_All = 0xffffffff,
|
||||
};
|
||||
|
||||
typedef struct DF_CodeViewState DF_CodeViewState;
|
||||
struct DF_CodeViewState
|
||||
{
|
||||
// rjf: stable state
|
||||
B32 initialized;
|
||||
S64 preferred_column;
|
||||
B32 drifted_for_search;
|
||||
DF_CodeViewFlags flags;
|
||||
|
||||
// rjf: per-frame command info
|
||||
S64 goto_line_num;
|
||||
B32 center_cursor;
|
||||
B32 contain_cursor;
|
||||
B32 watch_expr_at_mouse;
|
||||
Arena *find_text_arena;
|
||||
String8 find_text_fwd;
|
||||
String8 find_text_bwd;
|
||||
};
|
||||
|
||||
typedef struct DF_CodeViewBuildResult DF_CodeViewBuildResult;
|
||||
struct DF_CodeViewBuildResult
|
||||
{
|
||||
DI_KeyList dbgi_keys;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Watch View Types
|
||||
|
||||
typedef enum DF_WatchViewColumnKind
|
||||
{
|
||||
DF_WatchViewColumnKind_Expr,
|
||||
DF_WatchViewColumnKind_Value,
|
||||
DF_WatchViewColumnKind_Type,
|
||||
DF_WatchViewColumnKind_ViewRule,
|
||||
DF_WatchViewColumnKind_Module,
|
||||
DF_WatchViewColumnKind_FrameSelection,
|
||||
DF_WatchViewColumnKind_Member,
|
||||
DF_WatchViewColumnKind_COUNT
|
||||
}
|
||||
DF_WatchViewColumnKind;
|
||||
|
||||
typedef struct DF_WatchViewColumnParams DF_WatchViewColumnParams;
|
||||
struct DF_WatchViewColumnParams
|
||||
{
|
||||
String8 string;
|
||||
String8 display_string;
|
||||
String8 view_rule;
|
||||
B32 is_non_code;
|
||||
B32 dequote_string;
|
||||
};
|
||||
|
||||
typedef struct DF_WatchViewColumn DF_WatchViewColumn;
|
||||
struct DF_WatchViewColumn
|
||||
{
|
||||
DF_WatchViewColumn *next;
|
||||
DF_WatchViewColumn *prev;
|
||||
DF_WatchViewColumnKind kind;
|
||||
F32 pct;
|
||||
U8 string_buffer[1024];
|
||||
U64 string_size;
|
||||
U8 display_string_buffer[1024];
|
||||
U64 display_string_size;
|
||||
U8 view_rule_buffer[1024];
|
||||
U64 view_rule_size;
|
||||
B32 is_non_code;
|
||||
B32 dequote_string;
|
||||
};
|
||||
|
||||
typedef enum DF_WatchViewFillKind
|
||||
{
|
||||
DF_WatchViewFillKind_Watch,
|
||||
DF_WatchViewFillKind_Breakpoints,
|
||||
DF_WatchViewFillKind_WatchPins,
|
||||
DF_WatchViewFillKind_CallStack,
|
||||
DF_WatchViewFillKind_Registers,
|
||||
DF_WatchViewFillKind_Locals,
|
||||
DF_WatchViewFillKind_Globals,
|
||||
DF_WatchViewFillKind_ThreadLocals,
|
||||
DF_WatchViewFillKind_Types,
|
||||
DF_WatchViewFillKind_Procedures,
|
||||
DF_WatchViewFillKind_COUNT
|
||||
}
|
||||
DF_WatchViewFillKind;
|
||||
|
||||
typedef struct DF_WatchViewPoint DF_WatchViewPoint;
|
||||
struct DF_WatchViewPoint
|
||||
{
|
||||
S64 x;
|
||||
EV_Key parent_key;
|
||||
EV_Key key;
|
||||
};
|
||||
|
||||
typedef struct DF_WatchViewTextEditState DF_WatchViewTextEditState;
|
||||
struct DF_WatchViewTextEditState
|
||||
{
|
||||
DF_WatchViewTextEditState *pt_hash_next;
|
||||
DF_WatchViewPoint pt;
|
||||
TxtPt cursor;
|
||||
TxtPt mark;
|
||||
U8 input_buffer[1024];
|
||||
U64 input_size;
|
||||
U8 initial_buffer[1024];
|
||||
U64 initial_size;
|
||||
};
|
||||
|
||||
typedef struct DF_WatchViewState DF_WatchViewState;
|
||||
struct DF_WatchViewState
|
||||
{
|
||||
B32 initialized;
|
||||
|
||||
// rjf: fill kinds (way that the contents of the watch view are computed)
|
||||
DF_WatchViewFillKind fill_kind;
|
||||
|
||||
// rjf: column state
|
||||
Arena *column_arena;
|
||||
DF_WatchViewColumn *first_column;
|
||||
DF_WatchViewColumn *last_column;
|
||||
DF_WatchViewColumn *free_column;
|
||||
U64 column_count;
|
||||
|
||||
// rjf; table cursor state
|
||||
DF_WatchViewPoint cursor;
|
||||
DF_WatchViewPoint mark;
|
||||
DF_WatchViewPoint next_cursor;
|
||||
DF_WatchViewPoint next_mark;
|
||||
|
||||
// rjf: text input state
|
||||
Arena *text_edit_arena;
|
||||
U64 text_edit_state_slots_count;
|
||||
DF_WatchViewTextEditState dummy_text_edit_state;
|
||||
DF_WatchViewTextEditState **text_edit_state_slots;
|
||||
B32 text_editing;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Code View Functions
|
||||
|
||||
internal void df_code_view_init(DF_CodeViewState *cv, DF_View *view);
|
||||
internal void df_code_view_cmds(DF_View *view, DF_CodeViewState *cv, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key);
|
||||
internal DF_CodeViewBuildResult df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeViewBuildFlags flags, Rng2F32 rect, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Watch View Functions
|
||||
|
||||
//- rjf: index -> column
|
||||
internal DF_WatchViewColumn *df_watch_view_column_from_x(DF_WatchViewState *wv, S64 index);
|
||||
|
||||
//- rjf: watch view points <-> table coordinates
|
||||
internal B32 df_watch_view_point_match(DF_WatchViewPoint a, DF_WatchViewPoint b);
|
||||
internal DF_WatchViewPoint df_watch_view_point_from_tbl(EV_BlockList *blocks, Vec2S64 tbl);
|
||||
internal Vec2S64 df_tbl_from_watch_view_point(EV_BlockList *blocks, DF_WatchViewPoint pt);
|
||||
|
||||
//- rjf: table coordinates -> strings
|
||||
internal String8 df_string_from_eval_viz_row_column(Arena *arena, EV_View *ev, EV_Row *row, DF_WatchViewColumn *col, B32 editable, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size_px);
|
||||
|
||||
//- rjf: table coordinates -> text edit state
|
||||
internal DF_WatchViewTextEditState *df_watch_view_text_edit_state_from_pt(DF_WatchViewState *wv, DF_WatchViewPoint pt);
|
||||
|
||||
//- rjf: watch view column state mutation
|
||||
internal DF_WatchViewColumn *df_watch_view_column_alloc_(DF_WatchViewState *wv, DF_WatchViewColumnKind kind, F32 pct, DF_WatchViewColumnParams *params);
|
||||
#define df_watch_view_column_alloc(wv, kind, pct, ...) df_watch_view_column_alloc_((wv), (kind), (pct), &(DF_WatchViewColumnParams){.string = str8_zero(), __VA_ARGS__})
|
||||
internal void df_watch_view_column_release(DF_WatchViewState *wv, DF_WatchViewColumn *col);
|
||||
|
||||
//- rjf: watch view main hooks
|
||||
internal void df_watch_view_init(DF_WatchViewState *ewv, DF_View *view, DF_WatchViewFillKind fill_kind);
|
||||
internal void df_watch_view_build(DF_View *view, DF_WatchViewState *ewv, B32 modifiable, U32 default_radix, Rng2F32 rect);
|
||||
|
||||
#endif // DBG_FRONTEND_VIEWS_H
|
||||
@@ -1,122 +0,0 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DBG_FRONTEND_WIDGETS_H
|
||||
#define DBG_FRONTEND_WIDGETS_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Line Edit Types
|
||||
|
||||
typedef U32 DF_LineEditFlags;
|
||||
enum
|
||||
{
|
||||
DF_LineEditFlag_Expander = (1<<0),
|
||||
DF_LineEditFlag_ExpanderSpace = (1<<1),
|
||||
DF_LineEditFlag_ExpanderPlaceholder = (1<<2),
|
||||
DF_LineEditFlag_DisableEdit = (1<<3),
|
||||
DF_LineEditFlag_CodeContents = (1<<4),
|
||||
DF_LineEditFlag_Border = (1<<5),
|
||||
DF_LineEditFlag_NoBackground = (1<<6),
|
||||
DF_LineEditFlag_PreferDisplayString = (1<<7),
|
||||
DF_LineEditFlag_DisplayStringIsCode = (1<<8),
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Code Slice Types
|
||||
|
||||
typedef U32 DF_CodeSliceFlags;
|
||||
enum
|
||||
{
|
||||
DF_CodeSliceFlag_Clickable = (1<<0),
|
||||
DF_CodeSliceFlag_PriorityMargin = (1<<1),
|
||||
DF_CodeSliceFlag_CatchallMargin = (1<<2),
|
||||
DF_CodeSliceFlag_LineNums = (1<<3),
|
||||
};
|
||||
|
||||
typedef struct DF_CodeSliceParams DF_CodeSliceParams;
|
||||
struct DF_CodeSliceParams
|
||||
{
|
||||
// rjf: content
|
||||
DF_CodeSliceFlags flags;
|
||||
Rng1S64 line_num_range;
|
||||
String8 *line_text;
|
||||
Rng1U64 *line_ranges;
|
||||
TXT_TokenArray *line_tokens;
|
||||
DF_EntityList *line_bps;
|
||||
CTRL_EntityList *line_ips;
|
||||
DF_EntityList *line_pins;
|
||||
U64 *line_vaddrs;
|
||||
D_LineList *line_infos;
|
||||
DI_KeyList relevant_dbgi_keys;
|
||||
|
||||
// rjf: visual parameters
|
||||
FNT_Tag font;
|
||||
F32 font_size;
|
||||
F32 tab_size;
|
||||
String8 search_query;
|
||||
F32 line_height_px;
|
||||
F32 priority_margin_width_px;
|
||||
F32 catchall_margin_width_px;
|
||||
F32 line_num_width_px;
|
||||
F32 line_text_max_width_px;
|
||||
F32 margin_float_off_px;
|
||||
};
|
||||
|
||||
typedef struct DF_CodeSliceSignal DF_CodeSliceSignal;
|
||||
struct DF_CodeSliceSignal
|
||||
{
|
||||
UI_Signal base;
|
||||
TxtPt mouse_pt;
|
||||
TxtRng mouse_expr_rng;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Building Helpers
|
||||
|
||||
#define DF_Palette(code) UI_Palette(df_palette_from_code(code))
|
||||
#define DF_Font(slot) UI_Font(df_font_from_slot(slot)) UI_TextRasterFlags(df_raster_flags_from_slot((slot)))
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Loading Overlay
|
||||
|
||||
internal void df_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U64 progress_v_target);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Fancy Buttons
|
||||
|
||||
internal void df_cmd_binding_buttons(String8 name);
|
||||
internal UI_Signal df_menu_bar_button(String8 string);
|
||||
internal UI_Signal df_cmd_spec_button(String8 name);
|
||||
internal void df_cmd_list_menu_buttons(U64 count, String8 *cmd_names, U32 *fastpath_codepoints);
|
||||
internal UI_Signal df_icon_button(DF_IconKind kind, FuzzyMatchRangeList *matches, String8 string);
|
||||
internal UI_Signal df_icon_buttonf(DF_IconKind kind, FuzzyMatchRangeList *matches, char *fmt, ...);
|
||||
internal void df_entity_tooltips(DF_Entity *entity);
|
||||
internal UI_Signal df_entity_desc_button(DF_Entity *entity, FuzzyMatchRangeList *name_matches, String8 fuzzy_query, B32 is_implicit);
|
||||
internal void df_src_loc_button(String8 file_path, TxtPt point);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Text View
|
||||
|
||||
internal UI_BOX_CUSTOM_DRAW(df_thread_box_draw_extensions);
|
||||
internal UI_BOX_CUSTOM_DRAW(df_bp_box_draw_extensions);
|
||||
internal DF_CodeSliceSignal df_code_slice(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *preferred_column, String8 string);
|
||||
internal DF_CodeSliceSignal df_code_slicef(DF_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *preferred_column, char *fmt, ...);
|
||||
|
||||
internal B32 df_do_txt_controls(TXT_TextInfo *info, String8 data, U64 line_count_per_page, TxtPt *cursor, TxtPt *mark, S64 *preferred_column);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Fancy Labels
|
||||
|
||||
internal UI_Signal df_label(String8 string);
|
||||
internal UI_Signal df_error_label(String8 string);
|
||||
internal B32 df_help_label(String8 string);
|
||||
internal DR_FancyStringList df_fancy_string_list_from_code_string(Arena *arena, F32 alpha, B32 indirection_size_change, Vec4F32 base_color, String8 string);
|
||||
internal UI_Box *df_code_label(F32 alpha, B32 indirection_size_change, Vec4F32 base_color, String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Line Edit
|
||||
|
||||
internal UI_Signal df_line_edit(DF_LineEditFlags flags, S32 depth, FuzzyMatchRangeList *matches, TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size, U64 *edit_string_size_out, B32 *expanded_out, String8 pre_edit_value, String8 string);
|
||||
internal UI_Signal df_line_editf(DF_LineEditFlags flags, S32 depth, FuzzyMatchRangeList *matches, TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size, U64 *edit_string_size_out, B32 *expanded_out, String8 pre_edit_value, char *fmt, ...);
|
||||
|
||||
#endif // DBG_FRONTEND_WIDGETS_H
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+757
-757
File diff suppressed because it is too large
Load Diff
@@ -4,17 +4,17 @@
|
||||
////////////////////////////////
|
||||
//~ rjf: Embedded Data
|
||||
|
||||
@embed_file df_g_icon_font_bytes: "../data/icons.ttf"
|
||||
@embed_file df_g_default_main_font_bytes: "../data/Roboto-Regular.ttf"
|
||||
@embed_file df_g_default_code_font_bytes: "../data/liberation-mono.ttf"
|
||||
//@embed_file df_g_default_code_font_bytes: "../data/Inconsolata-Regular.ttf"
|
||||
@embed_file df_g_icon_file_bytes: "../data/logo.ico"
|
||||
@embed_file rd_icon_font_bytes: "../data/icons.ttf"
|
||||
@embed_file rd_default_main_font_bytes: "../data/Roboto-Regular.ttf"
|
||||
@embed_file rd_default_code_font_bytes: "../data/liberation-mono.ttf"
|
||||
//@embed_file rd_default_code_font_bytes: "../data/Inconsolata-Regular.ttf"
|
||||
@embed_file rd_icon_file_bytes: "../data/logo.ico"
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Config Sources
|
||||
|
||||
@table(string, name, load_cmd, write_cmd, apply_cmd)
|
||||
DF_CfgSrcTable:
|
||||
RD_CfgSrcTable:
|
||||
{
|
||||
{"user" User OpenUser WriteUserData ApplyUserData }
|
||||
{"project" Project OpenProject WriteProjectData ApplyProjectData }
|
||||
@@ -22,30 +22,30 @@ DF_CfgSrcTable:
|
||||
{"transient" Transient Null Null Null }
|
||||
}
|
||||
|
||||
@enum DF_CfgSrc:
|
||||
@enum RD_CfgSrc:
|
||||
{
|
||||
@expand(DF_CfgSrcTable a) `$(a.name)`,
|
||||
@expand(RD_CfgSrcTable a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@data(String8) d_cfg_src_string_table:
|
||||
@data(String8) rd_cfg_src_string_table:
|
||||
{
|
||||
@expand(DF_CfgSrcTable a) `str8_lit_comp("$(a.string)")`,
|
||||
@expand(RD_CfgSrcTable a) `str8_lit_comp("$(a.string)")`,
|
||||
}
|
||||
|
||||
@data(DF_CmdKind) d_cfg_src_load_cmd_kind_table:
|
||||
@data(RD_CmdKind) rd_cfg_src_load_cmd_kind_table:
|
||||
{
|
||||
@expand(DF_CfgSrcTable a) `DF_CmdKind_$(a.load_cmd)`,
|
||||
@expand(RD_CfgSrcTable a) `RD_CmdKind_$(a.load_cmd)`,
|
||||
}
|
||||
|
||||
@data(DF_CmdKind) d_cfg_src_write_cmd_kind_table:
|
||||
@data(RD_CmdKind) rd_cfg_src_write_cmd_kind_table:
|
||||
{
|
||||
@expand(DF_CfgSrcTable a) `DF_CmdKind_$(a.write_cmd)`,
|
||||
@expand(RD_CfgSrcTable a) `RD_CmdKind_$(a.write_cmd)`,
|
||||
}
|
||||
|
||||
@data(DF_CmdKind) d_cfg_src_apply_cmd_kind_table:
|
||||
@data(RD_CmdKind) rd_cfg_src_apply_cmd_kind_table:
|
||||
{
|
||||
@expand(DF_CfgSrcTable a) `DF_CmdKind_$(a.apply_cmd)`;
|
||||
@expand(RD_CfgSrcTable a) `RD_CmdKind_$(a.apply_cmd)`;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -58,7 +58,7 @@ DF_CfgSrcTable:
|
||||
// operations________ names lt sz
|
||||
// /..................\ /...\ | |
|
||||
// dl fz ed rn en cn dp nc np ul iz
|
||||
DF_EntityKindTable:
|
||||
RD_EntityKindTable:
|
||||
{
|
||||
{Nil nil nils 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Nil" }
|
||||
{Root root roots 0 0 0 0 0 0 0 0 0 0 0 "Label" Null "Root" }
|
||||
@@ -120,55 +120,55 @@ DF_EntityKindTable:
|
||||
{ConversionFail conversion_fail conversion_fails 0 0 0 1 0 0 0 0 0 0 0 "Label" Null "Conversion Failure" }
|
||||
}
|
||||
|
||||
@enum DF_EntityKind:
|
||||
@enum RD_EntityKind:
|
||||
{
|
||||
@expand(DF_EntityKindTable a) `$(a.name)`,
|
||||
@expand(RD_EntityKindTable a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@data(String8) d_entity_kind_display_string_table:
|
||||
{
|
||||
@expand(DF_EntityKindTable a) `str8_lit_comp("$(a.display_string)")`,
|
||||
@expand(RD_EntityKindTable a) `str8_lit_comp("$(a.display_string)")`,
|
||||
}
|
||||
|
||||
@data(String8) d_entity_kind_name_lower_table:
|
||||
{
|
||||
@expand(DF_EntityKindTable a) `str8_lit_comp("$(a.name_lower)")`,
|
||||
@expand(RD_EntityKindTable a) `str8_lit_comp("$(a.name_lower)")`,
|
||||
}
|
||||
|
||||
@data(String8) d_entity_kind_name_lower_plural_table:
|
||||
{
|
||||
@expand(DF_EntityKindTable a) `str8_lit_comp("$(a.name_lower_plural)")`,
|
||||
@expand(RD_EntityKindTable a) `str8_lit_comp("$(a.name_lower_plural)")`,
|
||||
}
|
||||
|
||||
@data(String8) d_entity_kind_name_label_table:
|
||||
{
|
||||
@expand(DF_EntityKindTable a) `str8_lit_comp("$(a.name_label)")`,
|
||||
@expand(RD_EntityKindTable a) `str8_lit_comp("$(a.name_label)")`,
|
||||
}
|
||||
|
||||
@data(DF_EntityKindFlags) d_entity_kind_flags_table:
|
||||
@data(RD_EntityKindFlags) rd_entity_kind_flags_table:
|
||||
{
|
||||
@expand(DF_EntityKindTable a) `($(a.op_delete)*DF_EntityKindFlag_CanDelete) | ($(a.op_freeze)*DF_EntityKindFlag_CanFreeze) | ($(a.op_edit)*DF_EntityKindFlag_CanEdit) | ($(a.op_rename)*DF_EntityKindFlag_CanRename) | ($(a.op_enable)*DF_EntityKindFlag_CanEnable) | ($(a.op_cond)*DF_EntityKindFlag_CanCondition) | ($(a.op_dup)*DF_EntityKindFlag_CanDuplicate) | ($(a.name_is_code)*DF_EntityKindFlag_NameIsCode) | ($(a.name_is_path)*DF_EntityKindFlag_NameIsPath) | ($(a.user_lifetime)*DF_EntityKindFlag_UserDefinedLifetime) | ($(a.is_serialized)*DF_EntityKindFlag_IsSerializedToConfig)`,
|
||||
@expand(RD_EntityKindTable a) `($(a.op_delete)*RD_EntityKindFlag_CanDelete) | ($(a.op_freeze)*RD_EntityKindFlag_CanFreeze) | ($(a.op_edit)*RD_EntityKindFlag_CanEdit) | ($(a.op_rename)*RD_EntityKindFlag_CanRename) | ($(a.op_enable)*RD_EntityKindFlag_CanEnable) | ($(a.op_cond)*RD_EntityKindFlag_CanCondition) | ($(a.op_dup)*RD_EntityKindFlag_CanDuplicate) | ($(a.name_is_code)*RD_EntityKindFlag_NameIsCode) | ($(a.name_is_path)*RD_EntityKindFlag_NameIsPath) | ($(a.user_lifetime)*RD_EntityKindFlag_UserDefinedLifetime) | ($(a.is_serialized)*RD_EntityKindFlag_IsSerializedToConfig)`,
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Registers Type Table
|
||||
|
||||
@table(c_type name_lower name)
|
||||
DF_RegTable:
|
||||
RD_RegTable:
|
||||
{
|
||||
// rjf: entity slots
|
||||
{CTRL_Handle machine Machine }
|
||||
{CTRL_Handle module Module }
|
||||
{CTRL_Handle process Process }
|
||||
{CTRL_Handle thread Thread }
|
||||
{D_Handle window Window }
|
||||
{D_Handle panel Panel }
|
||||
{D_Handle view View }
|
||||
{D_Handle prev_view PrevView }
|
||||
{D_Handle dst_panel DstPanel }
|
||||
{D_Handle entity Entity }
|
||||
{D_HandleList entity_list EntityList }
|
||||
{RD_Handle window Window }
|
||||
{RD_Handle panel Panel }
|
||||
{RD_Handle view View }
|
||||
{RD_Handle prev_view PrevView }
|
||||
{RD_Handle dst_panel DstPanel }
|
||||
{RD_Handle entity Entity }
|
||||
{RD_HandleList entity_list EntityList }
|
||||
|
||||
// rjf: frame selection
|
||||
{U64 unwind_count UnwindCount }
|
||||
@@ -197,28 +197,28 @@ DF_RegTable:
|
||||
{`OS_Event *` os_event OSEvent }
|
||||
}
|
||||
|
||||
@enum DF_RegSlot:
|
||||
@enum RD_RegSlot:
|
||||
{
|
||||
Null,
|
||||
@expand(DF_RegTable a) `$(a.name)`,
|
||||
@expand(RD_RegTable a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@struct DF_Regs:
|
||||
@struct RD_Regs:
|
||||
{
|
||||
@expand(DF_RegTable a) `$(a.c_type) $(a.name_lower)`
|
||||
@expand(RD_RegTable a) `$(a.c_type) $(a.name_lower)`
|
||||
}
|
||||
|
||||
@data(Rng1U64) df_reg_slot_range_table:
|
||||
@data(Rng1U64) rd_reg_slot_range_table:
|
||||
{
|
||||
`{0}`,
|
||||
@expand(DF_RegTable a) `{OffsetOf(DF_Regs, $(a.name_lower)), OffsetOf(DF_Regs, $(a.name_lower)) + sizeof($(a.c_type))}`
|
||||
@expand(RD_RegTable a) `{OffsetOf(RD_Regs, $(a.name_lower)), OffsetOf(RD_Regs, $(a.name_lower)) + sizeof($(a.c_type))}`
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
`#define df_regs_lit_init_top \\`
|
||||
@expand(DF_RegTable a) `.$(a.name_lower) = df_regs()->$(a.name_lower),\\`
|
||||
`#define rd_regs_lit_init_top \\`
|
||||
@expand(RD_RegTable a) `.$(a.name_lower) = rd_regs()->$(a.name_lower),\\`
|
||||
``;
|
||||
}
|
||||
|
||||
@@ -228,7 +228,7 @@ DF_RegTable:
|
||||
@table(name ui_vis ipc_docs_vis q_slot q_view q_ent_kind q_allow_files q_allow_folders q_keep_oi q_select_oi q_is_code q_required canonical_icon string display_name desc search_tags )
|
||||
// / | | | \___ _____________________________________/ | | | | |
|
||||
// / | | | \ / | | | | |
|
||||
DF_CmdTable: // | | | | | | | | | |
|
||||
RD_CmdTable: // | | | | | | | | | |
|
||||
{
|
||||
//- rjf: exiting
|
||||
{Exit 1 1 Null null Nil 0 0 0 0 0 0 X "exit" "Exit" "Exits the debugger." "quit,close,abort" }
|
||||
@@ -500,47 +500,47 @@ DF_CmdTable: // | | | |
|
||||
{LogMarker 1 1 Null null Nil 0 0 0 0 0 0 Null "log_marker" "Log Marker" "Logs a marker in the application log, to denote specific points in time within the log." "" }
|
||||
}
|
||||
|
||||
@enum DF_CmdKind:
|
||||
@enum RD_CmdKind:
|
||||
{
|
||||
`Null`,
|
||||
@expand(D_CmdTable a) `$(a.name)`,
|
||||
@expand(DF_CmdTable, a) `$(a.name)`,
|
||||
@expand(RD_CmdTable, a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@struct DF_Query:
|
||||
@struct RD_Query:
|
||||
{
|
||||
`DF_QueryFlags flags`;
|
||||
`DF_RegSlot slot`;
|
||||
`RD_QueryFlags flags`;
|
||||
`RD_RegSlot slot`;
|
||||
`String8 view_name`;
|
||||
`DF_EntityKind entity_kind`;
|
||||
`RD_EntityKind entity_kind`;
|
||||
}
|
||||
|
||||
@struct DF_CmdKindInfo:
|
||||
@struct RD_CmdKindInfo:
|
||||
{
|
||||
`String8 string`;
|
||||
`String8 description`;
|
||||
`String8 search_tags`;
|
||||
`String8 display_name`;
|
||||
`DF_IconKind icon_kind`;
|
||||
`DF_CmdKindFlags flags`;
|
||||
`DF_Query query`;
|
||||
`RD_IconKind icon_kind`;
|
||||
`RD_CmdKindFlags flags`;
|
||||
`RD_Query query`;
|
||||
};
|
||||
|
||||
@data(DF_CmdKindInfo) @c_file df_cmd_kind_info_table:
|
||||
@data(RD_CmdKindInfo) @c_file rd_cmd_kind_info_table:
|
||||
{
|
||||
`{0}`,
|
||||
@expand(D_CmdTable, a)
|
||||
```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), DF_IconKind_$(a.canonical_icon), (DF_CmdKindFlag_ListInUI*$(a.ui_vis))|(DF_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis)), {(DF_QueryFlag_AllowFiles*$(a.q_allow_files))|(DF_QueryFlag_AllowFolders*$(a.q_allow_folders))|(DF_QueryFlag_CodeInput*$(a.q_is_code))|(DF_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(DF_QueryFlag_SelectOldInput*$(a.q_select_oi))|(DF_QueryFlag_Required*$(a.q_required)), DF_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), DF_EntityKind_$(a.q_ent_kind)}}```;
|
||||
@expand(DF_CmdTable, a)
|
||||
```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), DF_IconKind_$(a.canonical_icon), (DF_CmdKindFlag_ListInUI*$(a.ui_vis))|(DF_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis)), {(DF_QueryFlag_AllowFiles*$(a.q_allow_files))|(DF_QueryFlag_AllowFolders*$(a.q_allow_folders))|(DF_QueryFlag_CodeInput*$(a.q_is_code))|(DF_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(DF_QueryFlag_SelectOldInput*$(a.q_select_oi))|(DF_QueryFlag_Required*$(a.q_required)), DF_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), DF_EntityKind_$(a.q_ent_kind)}}```;
|
||||
```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), RD_IconKind_$(a.canonical_icon), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), RD_EntityKind_$(a.q_ent_kind)}}```;
|
||||
@expand(RD_CmdTable, a)
|
||||
```{ str8_lit_comp("$(a.string)"), str8_lit_comp("$(a.desc)"), str8_lit_comp("$(a.search_tags)"), str8_lit_comp("$(a.display_name)"), RD_IconKind_$(a.canonical_icon), (RD_CmdKindFlag_ListInUI*$(a.ui_vis))|(RD_CmdKindFlag_ListInIPCDocs*$(a.ipc_docs_vis)), {(RD_QueryFlag_AllowFiles*$(a.q_allow_files))|(RD_QueryFlag_AllowFolders*$(a.q_allow_folders))|(RD_QueryFlag_CodeInput*$(a.q_is_code))|(RD_QueryFlag_KeepOldInput*$(a.q_keep_oi))|(RD_QueryFlag_SelectOldInput*$(a.q_select_oi))|(RD_QueryFlag_Required*$(a.q_required)), RD_RegSlot_$(a.q_slot), str8_lit_comp("$(a.q_view != 'null' -> a.q_view)"), RD_EntityKind_$(a.q_ent_kind)}}```;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Default Bindings
|
||||
|
||||
@table(name key ctrl shift alt)
|
||||
DF_DefaultBindingTable:
|
||||
RD_DefaultBindingTable:
|
||||
{
|
||||
//- rjf: low-level target control operations
|
||||
{ "kill_all" F5 0 shift 0 }
|
||||
@@ -703,16 +703,16 @@ DF_DefaultBindingTable:
|
||||
{ "log_marker" M ctrl shift alt }
|
||||
}
|
||||
|
||||
@data(DF_StringBindingPair) df_g_default_binding_table:
|
||||
@data(RD_StringBindingPair) rd_default_binding_table:
|
||||
{
|
||||
@expand(DF_DefaultBindingTable a) ```{str8_lit_comp("$(a.name)"), {OS_Key_$(a.key), 0 $(a.ctrl != 0 -> `|OS_EventFlag_Ctrl`) $(a.shift != 0 -> `|OS_EventFlag_Shift`) $(a.alt != 0 -> `|OS_EventFlag_Alt`)}}```;
|
||||
@expand(RD_DefaultBindingTable a) ```{str8_lit_comp("$(a.name)"), {OS_Key_$(a.key), 0 $(a.ctrl != 0 -> `|OS_EventFlag_Ctrl`) $(a.shift != 0 -> `|OS_EventFlag_Shift`) $(a.alt != 0 -> `|OS_EventFlag_Alt`)}}```;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Binding Version Remap Table
|
||||
|
||||
@table(old_name new_name)
|
||||
DF_BindingVersionRemapTable:
|
||||
RD_BindingVersionRemapTable:
|
||||
{
|
||||
{"commands" "run_command"}
|
||||
{"load_user" "open_user"}
|
||||
@@ -723,21 +723,21 @@ DF_BindingVersionRemapTable:
|
||||
{"function_breakpoint" "add_function_breakpoint"}
|
||||
}
|
||||
|
||||
@data(String8) df_g_binding_version_remap_old_name_table:
|
||||
@data(String8) rd_binding_version_remap_old_name_table:
|
||||
{
|
||||
@expand(DF_BindingVersionRemapTable a) `str8_lit_comp("$(a.old_name)")`
|
||||
@expand(RD_BindingVersionRemapTable a) `str8_lit_comp("$(a.old_name)")`
|
||||
}
|
||||
|
||||
@data(String8) df_g_binding_version_remap_new_name_table:
|
||||
@data(String8) rd_binding_version_remap_new_name_table:
|
||||
{
|
||||
@expand(DF_BindingVersionRemapTable a) `str8_lit_comp("$(a.new_name)")`
|
||||
@expand(RD_BindingVersionRemapTable a) `str8_lit_comp("$(a.new_name)")`
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Icons
|
||||
|
||||
@table(name, text)
|
||||
DF_IconTable:
|
||||
RD_IconTable:
|
||||
{
|
||||
(Null "")
|
||||
(FolderOpenOutline "b")
|
||||
@@ -810,22 +810,22 @@ DF_IconTable:
|
||||
(Dot "c")
|
||||
}
|
||||
|
||||
@enum DF_IconKind:
|
||||
@enum RD_IconKind:
|
||||
{
|
||||
@expand(DF_IconTable a) `$(a.name)`,
|
||||
@expand(RD_IconTable a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@data(String8) df_g_icon_kind_text_table:
|
||||
@data(String8) rd_icon_kind_text_table:
|
||||
{
|
||||
@expand(DF_IconTable a) `str8_lit_comp("$(a.text)")`;
|
||||
@expand(RD_IconTable a) `str8_lit_comp("$(a.text)")`;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Built-In View Rules
|
||||
|
||||
@table(name name_lower display_name params_schema icon can_filter filter_is_code typing_automatically_filters show_in_docs description)
|
||||
DF_ViewRuleTable:
|
||||
RD_ViewRuleTable:
|
||||
{
|
||||
//- rjf: basics
|
||||
{ Empty empty "" "" Null 0 0 0 0 "" }
|
||||
@@ -876,34 +876,34 @@ DF_ViewRuleTable:
|
||||
{ Geo3D geo3d "Geometry (3D)" "x:{'count':expr, 'vtx':expr, 'vtx_size':expr}" Binoculars 0 0 0 1 "Visualizes memory as 3D geometry." }
|
||||
}
|
||||
|
||||
@enum DF_ViewRuleKind:
|
||||
@enum RD_ViewRuleKind:
|
||||
{
|
||||
Null,
|
||||
@expand(DF_ViewRuleTable a) `$(a.name)`,
|
||||
@expand(RD_ViewRuleTable a) `$(a.name)`,
|
||||
COUNT
|
||||
}
|
||||
|
||||
@struct DF_ViewRuleInfo:
|
||||
@struct RD_ViewRuleInfo:
|
||||
{
|
||||
`String8 string`;
|
||||
`String8 description`;
|
||||
`String8 display_name`;
|
||||
`String8 params_schema`;
|
||||
`DF_IconKind icon_kind`;
|
||||
`DF_ViewRuleInfoFlags flags`;
|
||||
`DF_ViewRuleUIFunctionType *ui`;
|
||||
`RD_IconKind icon_kind`;
|
||||
`RD_ViewRuleInfoFlags flags`;
|
||||
`RD_ViewRuleUIFunctionType *ui`;
|
||||
};
|
||||
|
||||
/*
|
||||
@gen
|
||||
{
|
||||
@expand(DF_ViewRuleTable a) `DF_VIEW_RULE_UI_FUNCTION_DEF($(a.name_lower));`
|
||||
@expand(RD_ViewRuleTable a) `RD_VIEW_RULE_UI_FUNCTION_DEF($(a.name_lower));`
|
||||
}
|
||||
|
||||
@data(DF_ViewRuleInfo) df_view_rule_kind_info_table:
|
||||
@data(RD_ViewRuleInfo) rd_view_rule_kind_info_table:
|
||||
{
|
||||
`{0}`,
|
||||
@expand(DF_ViewRuleTable a) `{str8_lit_comp("$(a.name_lower)"), str8_lit_comp("$(a.description)"), str8_lit_comp("$(a.display_name)"), str8_lit_comp("$(a.params_schema)"), DF_IconKind_$(a.icon), (DF_ViewRuleInfoFlag_ShowInDocs*$(a.show_in_docs)|DF_ViewRuleInfoFlag_CanFilter*$(a.can_filter)|DF_ViewRuleInfoFlag_FilterIsCode*$(a.filter_is_code)|DF_ViewRuleInfoFlag_TypingAutomaticallyFilters*$(a.typing_automatically_filters)), DF_VIEW_RULE_UI_FUNCTION_NAME($(a.name_lower))}`,
|
||||
@expand(RD_ViewRuleTable a) `{str8_lit_comp("$(a.name_lower)"), str8_lit_comp("$(a.description)"), str8_lit_comp("$(a.display_name)"), str8_lit_comp("$(a.params_schema)"), RD_IconKind_$(a.icon), (RD_ViewRuleInfoFlag_ShowInDocs*$(a.show_in_docs)|RD_ViewRuleInfoFlag_CanFilter*$(a.can_filter)|RD_ViewRuleInfoFlag_FilterIsCode*$(a.filter_is_code)|RD_ViewRuleInfoFlag_TypingAutomaticallyFilters*$(a.typing_automatically_filters)), RD_VIEW_RULE_UI_FUNCTION_NAME($(a.name_lower))}`,
|
||||
}
|
||||
*/
|
||||
|
||||
@@ -911,7 +911,7 @@ DF_ViewRuleTable:
|
||||
//~ rjf: Gfx Layer View Kinds
|
||||
|
||||
@table(name name_lower display_string icon parameterized_by_entity project_specific can_serialize can_filter filter_is_code typing_automatically_filters inc_in_docs docs_desc)
|
||||
DF_ViewTable:
|
||||
RD_ViewTable:
|
||||
{
|
||||
//- rjf: basics
|
||||
{ Null "null" "" Null 0 0 0 0 0 0 0 "" }
|
||||
@@ -964,35 +964,35 @@ DF_ViewTable:
|
||||
{ Settings "settings" "Settings" Gear 0 0 1 1 0 1 1 "An interface to modify general settings for the debugger's appearance and behavior." }
|
||||
}
|
||||
|
||||
@enum DF_ViewKind:
|
||||
@enum RD_ViewKind:
|
||||
{
|
||||
@expand(DF_ViewTable a) `$(a.name)`,
|
||||
@expand(RD_ViewTable a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@gen
|
||||
{
|
||||
@expand(DF_ViewTable a) `DF_VIEW_SETUP_FUNCTION_DEF($(a.name_lower));`;
|
||||
@expand(DF_ViewTable a) `DF_VIEW_CMD_FUNCTION_DEF($(a.name_lower));`;
|
||||
@expand(DF_ViewTable a) `DF_VIEW_UI_FUNCTION_DEF($(a.name_lower));`;
|
||||
@expand(RD_ViewTable a) `RD_VIEW_SETUP_FUNCTION_DEF($(a.name_lower));`;
|
||||
@expand(RD_ViewTable a) `RD_VIEW_CMD_FUNCTION_DEF($(a.name_lower));`;
|
||||
@expand(RD_ViewTable a) `RD_VIEW_UI_FUNCTION_DEF($(a.name_lower));`;
|
||||
}
|
||||
|
||||
@data(String8) df_view_kind_name_lower_table:
|
||||
@data(String8) rd_view_kind_name_lower_table:
|
||||
{
|
||||
@expand(DF_ViewTable a) `str8_lit_comp("$(a.name_lower)")`
|
||||
@expand(RD_ViewTable a) `str8_lit_comp("$(a.name_lower)")`
|
||||
}
|
||||
|
||||
@data(DF_ViewSpecInfo) df_g_gfx_view_kind_spec_info_table:
|
||||
@data(RD_ViewSpecInfo) rd_gfx_view_kind_spec_info_table:
|
||||
{
|
||||
@expand(DF_ViewTable a) ```{(0|$(a.parameterized_by_entity)*DF_ViewSpecFlag_ParameterizedByEntity|$(a.project_specific)*DF_ViewSpecFlag_ProjectSpecific|$(a.can_serialize)*DF_ViewSpecFlag_CanSerialize|$(a.can_filter)*DF_ViewSpecFlag_CanFilter|$(a.filter_is_code)*DF_ViewSpecFlag_FilterIsCode|$(a.typing_automatically_filters)*DF_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("$(a.name_lower)"), str8_lit_comp("$(a.display_string)"), DF_IconKind_$(a.icon), DF_VIEW_SETUP_FUNCTION_NAME($(a.name_lower)), DF_VIEW_CMD_FUNCTION_NAME($(a.name_lower)), DF_VIEW_UI_FUNCTION_NAME($(a.name_lower))}```;
|
||||
@expand(RD_ViewTable a) ```{(0|$(a.parameterized_by_entity)*RD_ViewSpecFlag_ParameterizedByEntity|$(a.project_specific)*RD_ViewSpecFlag_ProjectSpecific|$(a.can_serialize)*RD_ViewSpecFlag_CanSerialize|$(a.can_filter)*RD_ViewSpecFlag_CanFilter|$(a.filter_is_code)*RD_ViewSpecFlag_FilterIsCode|$(a.typing_automatically_filters)*RD_ViewSpecFlag_TypingAutomaticallyFilters), str8_lit_comp("$(a.name_lower)"), str8_lit_comp("$(a.display_string)"), RD_IconKind_$(a.icon), RD_VIEW_SETUP_FUNCTION_NAME($(a.name_lower)), RD_VIEW_CMD_FUNCTION_NAME($(a.name_lower)), RD_VIEW_UI_FUNCTION_NAME($(a.name_lower))}```;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Built-In Debug Engine Kind -> Icon Kind Table
|
||||
|
||||
@data(DF_IconKind) df_entity_kind_icon_kind_table:
|
||||
@data(RD_IconKind) rd_entity_kind_icon_kind_table:
|
||||
{
|
||||
@expand(DF_EntityKindTable a) `DF_IconKind_$(a.icon_kind)`,
|
||||
@expand(RD_EntityKindTable a) `RD_IconKind_$(a.icon_kind)`,
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -1001,7 +1001,7 @@ DF_ViewTable:
|
||||
// NOTE(rjf): see @view_rule_info
|
||||
|
||||
@table(string vr ls ru vu)
|
||||
DF_ViewRuleTable:
|
||||
RD_ViewRuleTable:
|
||||
{
|
||||
{"array" - - - - }
|
||||
{"list" x - - - }
|
||||
@@ -1024,27 +1024,25 @@ DF_ViewRuleTable:
|
||||
@gen
|
||||
{
|
||||
``;
|
||||
@expand(DF_ViewRuleTable a)
|
||||
`$(a.vr == "x" -> "DF_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(" .. a.name_lower .. ");")`;
|
||||
@expand(DF_ViewRuleTable a)
|
||||
`$(a.ls == "x" -> "DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(" .. a.name_lower .. ");")`;
|
||||
@expand(DF_ViewRuleTable a)
|
||||
`$(a.ru == "x" -> "DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(" .. a.name_lower .. ");")`;
|
||||
@expand(DF_ViewRuleTable a)
|
||||
`$(a.bu == "x" -> "DF_GFX_VIEW_RULE_BLOCK_UI_FUNCTION_DEF(" .. a.name_lower .. ");")`;
|
||||
@expand(RD_ViewRuleTable a)
|
||||
`$(a.vr == "x" -> "RD_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_DEF(" .. a.name_lower .. ");")`;
|
||||
@expand(RD_ViewRuleTable a)
|
||||
`$(a.ls == "x" -> "RD_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(" .. a.name_lower .. ");")`;
|
||||
@expand(RD_ViewRuleTable a)
|
||||
`$(a.ru == "x" -> "RD_VIEW_RULE_ROW_UI_FUNCTION_DEF(" .. a.name_lower .. ");")`;
|
||||
}
|
||||
|
||||
@data(DF_ViewRuleSpecInfo) @c_file df_g_gfx_view_rule_spec_info_table:
|
||||
@data(RD_ViewRuleSpecInfo) @c_file rd_gfx_view_rule_spec_info_table:
|
||||
{
|
||||
@expand(DF_ViewRuleTable a)
|
||||
```{ str8_lit_comp("$(a.string)"), (DF_ViewRuleSpecInfoFlag_VizRowProd*$(a.vr == "x"))|(DF_ViewRuleSpecInfoFlag_LineStringize*$(a.ls == "x"))|(DF_ViewRuleSpecInfoFlag_RowUI*$(a.ru == "x"))|(DF_ViewRuleSpecInfoFlag_ViewUI*$(a.vu == "x")), $(a.vr == "x" -> "DF_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME("..a.name_lower..")") $(a.vr != "x" -> 0), $(a.ls == "x" -> "DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME("..a.name_lower..")") $(a.ls != "x" -> 0), $(a.ru == "x" -> "DF_VIEW_RULE_ROW_UI_FUNCTION_NAME("..a.name_lower..")") $(a.ru != "x" -> 0) }```;
|
||||
@expand(RD_ViewRuleTable a)
|
||||
```{ str8_lit_comp("$(a.string)"), (RD_ViewRuleSpecInfoFlag_VizRowProd*$(a.vr == "x"))|(RD_ViewRuleSpecInfoFlag_LineStringize*$(a.ls == "x"))|(RD_ViewRuleSpecInfoFlag_RowUI*$(a.ru == "x"))|(RD_ViewRuleSpecInfoFlag_ViewUI*$(a.vu == "x")), $(a.vr == "x" -> "RD_VIEW_RULE_VIZ_ROW_PROD_FUNCTION_NAME("..a.name_lower..")") $(a.vr != "x" -> 0), $(a.ls == "x" -> "RD_VIEW_RULE_LINE_STRINGIZE_FUNCTION_NAME("..a.name_lower..")") $(a.ls != "x" -> 0), $(a.ru == "x" -> "RD_VIEW_RULE_ROW_UI_FUNCTION_NAME("..a.name_lower..")") $(a.ru != "x" -> 0) }```;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Theme Tables
|
||||
|
||||
@table(name_upper name_lower display_string)
|
||||
DF_ThemePresetTable:
|
||||
RD_ThemePresetTable:
|
||||
{
|
||||
{ DefaultDark default_dark "Default (Dark)" }
|
||||
{ DefaultLight default_light "Default (Light)" }
|
||||
@@ -1058,7 +1056,7 @@ DF_ThemePresetTable:
|
||||
}
|
||||
|
||||
@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)
|
||||
DF_ThemeColorTable:
|
||||
RD_ThemeColorTable:
|
||||
{
|
||||
{Null "Null" null 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff 0xff00ffff ""}
|
||||
|
||||
@@ -1152,7 +1150,7 @@ DF_ThemeColorTable:
|
||||
}
|
||||
|
||||
@table(old_name new_name)
|
||||
DF_ThemeColorVersionRemapTable:
|
||||
RD_ThemeColorVersionRemapTable:
|
||||
{
|
||||
{plain_text text}
|
||||
{plain_background base_background}
|
||||
@@ -1178,67 +1176,67 @@ DF_ThemeColorVersionRemapTable:
|
||||
{action_background neutral_pop_button_background}
|
||||
}
|
||||
|
||||
@enum DF_ThemeColor:
|
||||
@enum RD_ThemeColor:
|
||||
{
|
||||
@expand(DF_ThemeColorTable a) `$(a.name)`,
|
||||
@expand(RD_ThemeColorTable a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@enum DF_ThemePreset:
|
||||
@enum RD_ThemePreset:
|
||||
{
|
||||
@expand(DF_ThemePresetTable a) `$(a.name)`,
|
||||
@expand(RD_ThemePresetTable a) `$(a.name)`,
|
||||
COUNT,
|
||||
}
|
||||
|
||||
@data(String8) df_g_theme_preset_display_string_table:
|
||||
@data(String8) rd_theme_preset_display_string_table:
|
||||
{
|
||||
@expand(DF_ThemePresetTable a) `str8_lit_comp("$(a.display_string)")`,
|
||||
@expand(RD_ThemePresetTable a) `str8_lit_comp("$(a.display_string)")`,
|
||||
}
|
||||
|
||||
@data(String8) df_g_theme_preset_code_string_table:
|
||||
@data(String8) rd_theme_preset_code_string_table:
|
||||
{
|
||||
@expand(DF_ThemePresetTable a) `str8_lit_comp("$(a.name_lower)")`,
|
||||
@expand(RD_ThemePresetTable a) `str8_lit_comp("$(a.name_lower)")`,
|
||||
}
|
||||
|
||||
@data(String8) df_g_theme_color_version_remap_old_name_table:
|
||||
@data(String8) rd_theme_color_version_remap_old_name_table:
|
||||
{
|
||||
@expand(DF_ThemeColorVersionRemapTable a) `str8_lit_comp("$(a.old_name)")`
|
||||
@expand(RD_ThemeColorVersionRemapTable a) `str8_lit_comp("$(a.old_name)")`
|
||||
}
|
||||
|
||||
@data(String8) df_g_theme_color_version_remap_new_name_table:
|
||||
@data(String8) rd_theme_color_version_remap_new_name_table:
|
||||
{
|
||||
@expand(DF_ThemeColorVersionRemapTable a) `str8_lit_comp("$(a.new_name)")`
|
||||
@expand(RD_ThemeColorVersionRemapTable a) `str8_lit_comp("$(a.new_name)")`
|
||||
}
|
||||
|
||||
@data(Vec4F32) df_g_theme_preset_colors__default_dark: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.default_dark))`}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__default_light: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.default_light))`}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__vs_dark: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.vs_dark))`}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__vs_light: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.vs_light))`}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__solarized_dark: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.solarized_dark))`,}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__solarized_light:{@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.solarized_light))`,}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__handmade_hero: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.handmade_hero))`,}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__four_coder: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.four_coder))`,}
|
||||
@data(Vec4F32) df_g_theme_preset_colors__far_manager: {@expand(DF_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.far_manager))`;}
|
||||
@data(`Vec4F32*`) df_g_theme_preset_colors_table:
|
||||
@data(Vec4F32) rd_theme_preset_colors__default_dark: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.default_dark))`}
|
||||
@data(Vec4F32) rd_theme_preset_colors__default_light: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.default_light))`}
|
||||
@data(Vec4F32) rd_theme_preset_colors__vs_dark: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.vs_dark))`}
|
||||
@data(Vec4F32) rd_theme_preset_colors__vs_light: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.vs_light))`}
|
||||
@data(Vec4F32) rd_theme_preset_colors__solarized_dark: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.solarized_dark))`,}
|
||||
@data(Vec4F32) rd_theme_preset_colors__solarized_light:{@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.solarized_light))`,}
|
||||
@data(Vec4F32) rd_theme_preset_colors__handmade_hero: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.handmade_hero))`,}
|
||||
@data(Vec4F32) rd_theme_preset_colors__four_coder: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.four_coder))`,}
|
||||
@data(Vec4F32) rd_theme_preset_colors__far_manager: {@expand(RD_ThemeColorTable a) `rgba_from_u32_lit_comp($(a.far_manager))`;}
|
||||
@data(`Vec4F32*`) rd_theme_preset_colors_table:
|
||||
{
|
||||
@expand(DF_ThemePresetTable a) `df_g_theme_preset_colors__$(a.name_lower)`,
|
||||
@expand(RD_ThemePresetTable a) `rd_theme_preset_colors__$(a.name_lower)`,
|
||||
}
|
||||
|
||||
@data(String8) df_g_theme_color_display_string_table:
|
||||
@data(String8) rd_theme_color_display_string_table:
|
||||
{
|
||||
@expand(DF_ThemeColorTable a) `str8_lit_comp("$(a.display_name)")`
|
||||
@expand(RD_ThemeColorTable a) `str8_lit_comp("$(a.display_name)")`
|
||||
}
|
||||
|
||||
@data(String8) df_g_theme_color_cfg_string_table:
|
||||
@data(String8) rd_theme_color_cfg_string_table:
|
||||
{
|
||||
@expand(DF_ThemeColorTable a) `str8_lit_comp("$(a.name_lower)")`
|
||||
@expand(RD_ThemeColorTable a) `str8_lit_comp("$(a.name_lower)")`
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Settings
|
||||
|
||||
@table(name name_lower display_string default_per_window default_s32 s32_min s32_max)
|
||||
DF_SettingTable:
|
||||
RD_SettingTable:
|
||||
{
|
||||
{HoverAnimations hover_animations "Hover Animations" 0 1 0 1 }
|
||||
{PressAnimations press_animations "Press Animations" 0 1 0 1 }
|
||||
@@ -1261,35 +1259,35 @@ DF_SettingTable:
|
||||
{HintCodeText hint_code_text "Hint Code Text" 1 1 0 1 }
|
||||
}
|
||||
|
||||
@enum DF_SettingCode:
|
||||
@enum RD_SettingCode:
|
||||
{
|
||||
@expand(DF_SettingTable a) `$(a.name)`,
|
||||
@expand(RD_SettingTable a) `$(a.name)`,
|
||||
COUNT
|
||||
}
|
||||
|
||||
@data(String8) df_g_setting_code_display_string_table:
|
||||
@data(String8) rd_setting_code_display_string_table:
|
||||
{
|
||||
@expand(DF_SettingTable a) `str8_lit_comp("$(a.display_string)")`
|
||||
@expand(RD_SettingTable a) `str8_lit_comp("$(a.display_string)")`
|
||||
}
|
||||
|
||||
@data(String8) df_g_setting_code_lower_string_table:
|
||||
@data(String8) rd_setting_code_lower_string_table:
|
||||
{
|
||||
@expand(DF_SettingTable a) `str8_lit_comp("$(a.name_lower)")`
|
||||
@expand(RD_SettingTable a) `str8_lit_comp("$(a.name_lower)")`
|
||||
}
|
||||
|
||||
@data(B8) df_g_setting_code_default_is_per_window_table:
|
||||
@data(B8) rd_setting_code_default_is_per_window_table:
|
||||
{
|
||||
@expand(DF_SettingTable a) `$(a.default_per_window)`
|
||||
@expand(RD_SettingTable a) `$(a.default_per_window)`
|
||||
}
|
||||
|
||||
@data(DF_SettingVal) df_g_setting_code_default_val_table:
|
||||
@data(RD_SettingVal) rd_setting_code_default_val_table:
|
||||
{
|
||||
@expand(DF_SettingTable a) `{1, $(a.default_s32)}`
|
||||
@expand(RD_SettingTable a) `{1, $(a.default_s32)}`
|
||||
}
|
||||
|
||||
@data(Rng1S32) df_g_setting_code_s32_range_table:
|
||||
@data(Rng1S32) rd_setting_code_s32_range_table:
|
||||
{
|
||||
@expand(DF_SettingTable a) `{$(a.s32_min), $(a.s32_max)}`
|
||||
@expand(RD_SettingTable a) `{$(a.s32_min), $(a.s32_max)}`
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -1373,7 +1371,7 @@ raddbg_readme:
|
||||
@p "A list of debugger interfaces, which can occupy tabs, are below:";
|
||||
@unordered_list
|
||||
{
|
||||
@expand(DF_ViewTable a) @p "$(a.inc_in_docs -> '`'..a.display_string..'` '..a.docs_desc)";
|
||||
@expand(RD_ViewTable a) @p "$(a.inc_in_docs -> '`'..a.display_string..'` '..a.docs_desc)";
|
||||
}
|
||||
|
||||
@subtitle "Commands";
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,6 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef DBG_FRONTEND_VIEW_RULES_H
|
||||
#define DBG_FRONTEND_VIEW_RULES_H
|
||||
|
||||
#endif // DBG_FRONTEND_VIEW_RULES_H
|
||||
#include "raddbg_core.c"
|
||||
#include "raddbg_widgets.c"
|
||||
#include "raddbg_views.c"
|
||||
@@ -0,0 +1,11 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADDBG_INC_H
|
||||
#define RADDBG_INC_H
|
||||
|
||||
#include "raddbg_core.h"
|
||||
#include "raddbg_widgets.h"
|
||||
#include "raddbg_views.h"
|
||||
|
||||
#endif // RADDBG_INC_H
|
||||
+31
-31
@@ -50,7 +50,7 @@
|
||||
// [ ] transient view timeout releasing
|
||||
//
|
||||
// [ ] save view column pcts; generalize to being a first-class thing in
|
||||
// DF_View, e.g. by just having a string -> f32 store
|
||||
// RD_View, e.g. by just having a string -> f32 store
|
||||
// [ ] decay arrays to pointers in pointer/value comparison
|
||||
// [ ] EVAL LOOKUP RULES -> currently going 0 -> rdis_count, but we need
|
||||
// to prioritize the primary rdi
|
||||
@@ -471,7 +471,7 @@
|
||||
// "blocks" vs. "canvas" vs. "expansion" - etc.
|
||||
// [x] @cleanup collapse DF_CfgNodes into just being MD trees, find another way
|
||||
// to encode config source - don't need it at every node
|
||||
// [x] @cleanup in the frontend, we are starting to have to pass down "DF_Window"
|
||||
// [x] @cleanup in the frontend, we are starting to have to pass down "RD_Window"
|
||||
// everywhere, because of per-window parameters (e.g. font rendering settings).
|
||||
// this is really better solved by implicit thread-local parameters, similar to
|
||||
// interaction registers, so that one window can "pick" all of the implicit
|
||||
@@ -494,7 +494,7 @@
|
||||
#define GEO_INIT_MANUAL 1
|
||||
#define FNT_INIT_MANUAL 1
|
||||
#define D_INIT_MANUAL 1
|
||||
#define DF_INIT_MANUAL 1
|
||||
#define RD_INIT_MANUAL 1
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Includes
|
||||
@@ -543,7 +543,7 @@
|
||||
#include "draw/draw.h"
|
||||
#include "ui/ui_inc.h"
|
||||
#include "dbg_engine/dbg_engine_inc.h"
|
||||
#include "dbg_frontend/dbg_frontend_inc.h"
|
||||
#include "raddbg/raddbg_inc.h"
|
||||
|
||||
//- rjf: [c]
|
||||
#include "base/base_inc.c"
|
||||
@@ -583,7 +583,7 @@
|
||||
#include "draw/draw.c"
|
||||
#include "ui/ui_inc.c"
|
||||
#include "dbg_engine/dbg_engine_inc.c"
|
||||
#include "dbg_frontend/dbg_frontend_inc.c"
|
||||
#include "raddbg/raddbg_inc.c"
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Top-Level Execution Types
|
||||
@@ -668,8 +668,8 @@ internal CTRL_WAKEUP_FUNCTION_DEF(wakeup_hook_ctrl)
|
||||
internal B32
|
||||
frame(void)
|
||||
{
|
||||
df_frame();
|
||||
return df_state->quit;
|
||||
rd_frame();
|
||||
return rd_state->quit;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
@@ -766,7 +766,7 @@ entry_point(CmdLine *cmd_line)
|
||||
geo_init();
|
||||
fnt_init();
|
||||
d_init();
|
||||
df_init(cmd_line);
|
||||
rd_init(cmd_line);
|
||||
}
|
||||
|
||||
//- rjf: setup initial target from command line args
|
||||
@@ -775,8 +775,8 @@ entry_point(CmdLine *cmd_line)
|
||||
if(args.node_count > 0 && args.first->string.size != 0)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
DF_Entity *target = df_entity_alloc(df_entity_root(), DF_EntityKind_Target);
|
||||
df_entity_equip_cfg_src(target, DF_CfgSrc_CommandLine);
|
||||
RD_Entity *target = rd_entity_alloc(rd_entity_root(), RD_EntityKind_Target);
|
||||
rd_entity_equip_cfg_src(target, RD_CfgSrc_CommandLine);
|
||||
String8List passthrough_args_list = {0};
|
||||
for(String8Node *n = args.first->next; n != 0; n = n->next)
|
||||
{
|
||||
@@ -790,14 +790,14 @@ entry_point(CmdLine *cmd_line)
|
||||
if(args.first->string.size != 0)
|
||||
{
|
||||
String8 exe_name = args.first->string;
|
||||
DF_Entity *exe = df_entity_alloc(target, DF_EntityKind_Executable);
|
||||
RD_Entity *exe = rd_entity_alloc(target, RD_EntityKind_Executable);
|
||||
PathStyle style = path_style_from_str8(exe_name);
|
||||
if(style == PathStyle_Relative)
|
||||
{
|
||||
exe_name = push_str8f(scratch.arena, "%S/%S", current_path, exe_name);
|
||||
exe_name = path_normalized_from_string(scratch.arena, exe_name);
|
||||
}
|
||||
df_entity_equip_name(exe, exe_name);
|
||||
rd_entity_equip_name(exe, exe_name);
|
||||
}
|
||||
|
||||
// rjf: equip working directory
|
||||
@@ -805,8 +805,8 @@ entry_point(CmdLine *cmd_line)
|
||||
if(path_part_of_arg.size != 0)
|
||||
{
|
||||
String8 path = push_str8f(scratch.arena, "%S/", path_part_of_arg);
|
||||
DF_Entity *wdir = df_entity_alloc(target, DF_EntityKind_WorkingDirectory);
|
||||
df_entity_equip_name(wdir, path);
|
||||
RD_Entity *wdir = rd_entity_alloc(target, RD_EntityKind_WorkingDirectory);
|
||||
rd_entity_equip_name(wdir, path);
|
||||
}
|
||||
|
||||
// rjf: equip args
|
||||
@@ -814,8 +814,8 @@ entry_point(CmdLine *cmd_line)
|
||||
String8 args_str = str8_list_join(scratch.arena, &passthrough_args_list, &join);
|
||||
if(args_str.size != 0)
|
||||
{
|
||||
DF_Entity *args_entity = df_entity_alloc(target, DF_EntityKind_Arguments);
|
||||
df_entity_equip_name(args_entity, args_str);
|
||||
RD_Entity *args_entity = rd_entity_alloc(target, RD_EntityKind_Arguments);
|
||||
rd_entity_equip_name(args_entity, args_str);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
}
|
||||
@@ -868,8 +868,8 @@ entry_point(CmdLine *cmd_line)
|
||||
if(msg.size != 0)
|
||||
{
|
||||
log_infof("ipc_msg: \"%S\"", msg);
|
||||
DF_Window *dst_window = df_state->first_window;
|
||||
for(DF_Window *window = dst_window; window != 0; window = window->next)
|
||||
RD_Window *dst_window = rd_state->first_window;
|
||||
for(RD_Window *window = dst_window; window != 0; window = window->next)
|
||||
{
|
||||
if(os_window_is_focused(window->os))
|
||||
{
|
||||
@@ -883,23 +883,23 @@ entry_point(CmdLine *cmd_line)
|
||||
U64 first_space_pos = str8_find_needle(msg, 0, str8_lit(" "), 0);
|
||||
String8 cmd_kind_name_string = str8_prefix(msg, first_space_pos);
|
||||
String8 cmd_args_string = str8_skip_chop_whitespace(str8_skip(msg, first_space_pos));
|
||||
DF_CmdKindInfo *cmd_kind_info = df_cmd_kind_info_from_string(cmd_kind_name_string);
|
||||
if(cmd_kind_info != &df_nil_cmd_kind_info) DF_RegsScope()
|
||||
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(cmd_kind_name_string);
|
||||
if(cmd_kind_info != &rd_nil_cmd_kind_info) RD_RegsScope()
|
||||
{
|
||||
if(dst_window != df_window_from_handle(df_regs()->window))
|
||||
if(dst_window != rd_window_from_handle(rd_regs()->window))
|
||||
{
|
||||
df_regs()->window = df_handle_from_window(dst_window);
|
||||
df_regs()->panel = df_handle_from_panel(dst_window->focused_panel);
|
||||
df_regs()->view = dst_window->focused_panel->selected_tab_view;
|
||||
rd_regs()->window = rd_handle_from_window(dst_window);
|
||||
rd_regs()->panel = rd_handle_from_panel(dst_window->focused_panel);
|
||||
rd_regs()->view = dst_window->focused_panel->selected_tab_view;
|
||||
}
|
||||
df_regs_fill_slot_from_string(cmd_kind_info->query.slot, cmd_args_string);
|
||||
df_push_cmd(cmd_kind_name_string, df_regs());
|
||||
df_request_frame();
|
||||
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, cmd_args_string);
|
||||
rd_push_cmd(cmd_kind_name_string, rd_regs());
|
||||
rd_request_frame();
|
||||
}
|
||||
else
|
||||
{
|
||||
log_user_errorf("\"%S\" is not a command.", cmd_kind_name_string);
|
||||
df_request_frame();
|
||||
rd_request_frame();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -913,21 +913,21 @@ entry_point(CmdLine *cmd_line)
|
||||
if(auto_run)
|
||||
{
|
||||
auto_run = 0;
|
||||
df_cmd(DF_CmdKind_LaunchAndRun);
|
||||
rd_cmd(RD_CmdKind_LaunchAndRun);
|
||||
}
|
||||
|
||||
//- rjf: auto step
|
||||
if(auto_step)
|
||||
{
|
||||
auto_step = 0;
|
||||
df_cmd(DF_CmdKind_StepInto);
|
||||
rd_cmd(RD_CmdKind_StepInto);
|
||||
}
|
||||
|
||||
//- rjf: jit attach
|
||||
if(jit_attach)
|
||||
{
|
||||
jit_attach = 0;
|
||||
df_cmd(DF_CmdKind_Attach, .pid = jit_pid);
|
||||
rd_cmd(RD_CmdKind_Attach, .pid = jit_pid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,183 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADDBG_VIEWS_H
|
||||
#define RADDBG_VIEWS_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Code View Types
|
||||
|
||||
typedef U32 RD_CodeViewBuildFlags;
|
||||
enum
|
||||
{
|
||||
RD_CodeViewBuildFlag_Margins = (1<<0),
|
||||
RD_CodeViewBuildFlag_All = 0xffffffff,
|
||||
};
|
||||
|
||||
typedef struct RD_CodeViewState RD_CodeViewState;
|
||||
struct RD_CodeViewState
|
||||
{
|
||||
// rjf: stable state
|
||||
B32 initialized;
|
||||
S64 preferred_column;
|
||||
B32 drifted_for_search;
|
||||
|
||||
// rjf: per-frame command info
|
||||
S64 goto_line_num;
|
||||
B32 center_cursor;
|
||||
B32 contain_cursor;
|
||||
B32 watch_expr_at_mouse;
|
||||
Arena *find_text_arena;
|
||||
String8 find_text_fwd;
|
||||
String8 find_text_bwd;
|
||||
};
|
||||
|
||||
typedef struct RD_CodeViewBuildResult RD_CodeViewBuildResult;
|
||||
struct RD_CodeViewBuildResult
|
||||
{
|
||||
DI_KeyList dbgi_keys;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Watch View Types
|
||||
|
||||
typedef enum RD_WatchViewColumnKind
|
||||
{
|
||||
RD_WatchViewColumnKind_Expr,
|
||||
RD_WatchViewColumnKind_Value,
|
||||
RD_WatchViewColumnKind_Type,
|
||||
RD_WatchViewColumnKind_ViewRule,
|
||||
RD_WatchViewColumnKind_Module,
|
||||
RD_WatchViewColumnKind_FrameSelection,
|
||||
RD_WatchViewColumnKind_Member,
|
||||
RD_WatchViewColumnKind_COUNT
|
||||
}
|
||||
RD_WatchViewColumnKind;
|
||||
|
||||
typedef struct RD_WatchViewColumnParams RD_WatchViewColumnParams;
|
||||
struct RD_WatchViewColumnParams
|
||||
{
|
||||
String8 string;
|
||||
String8 display_string;
|
||||
String8 view_rule;
|
||||
B32 is_non_code;
|
||||
B32 dequote_string;
|
||||
};
|
||||
|
||||
typedef struct RD_WatchViewColumn RD_WatchViewColumn;
|
||||
struct RD_WatchViewColumn
|
||||
{
|
||||
RD_WatchViewColumn *next;
|
||||
RD_WatchViewColumn *prev;
|
||||
RD_WatchViewColumnKind kind;
|
||||
F32 pct;
|
||||
U8 string_buffer[1024];
|
||||
U64 string_size;
|
||||
U8 display_string_buffer[1024];
|
||||
U64 display_string_size;
|
||||
U8 view_rule_buffer[1024];
|
||||
U64 view_rule_size;
|
||||
B32 is_non_code;
|
||||
B32 dequote_string;
|
||||
};
|
||||
|
||||
typedef enum RD_WatchViewFillKind
|
||||
{
|
||||
RD_WatchViewFillKind_Watch,
|
||||
RD_WatchViewFillKind_Breakpoints,
|
||||
RD_WatchViewFillKind_WatchPins,
|
||||
RD_WatchViewFillKind_CallStack,
|
||||
RD_WatchViewFillKind_Registers,
|
||||
RD_WatchViewFillKind_Locals,
|
||||
RD_WatchViewFillKind_Globals,
|
||||
RD_WatchViewFillKind_ThreadLocals,
|
||||
RD_WatchViewFillKind_Types,
|
||||
RD_WatchViewFillKind_Procedures,
|
||||
RD_WatchViewFillKind_COUNT
|
||||
}
|
||||
RD_WatchViewFillKind;
|
||||
|
||||
typedef struct RD_WatchViewPoint RD_WatchViewPoint;
|
||||
struct RD_WatchViewPoint
|
||||
{
|
||||
S64 x;
|
||||
EV_Key parent_key;
|
||||
EV_Key key;
|
||||
};
|
||||
|
||||
typedef struct RD_WatchViewTextEditState RD_WatchViewTextEditState;
|
||||
struct RD_WatchViewTextEditState
|
||||
{
|
||||
RD_WatchViewTextEditState *pt_hash_next;
|
||||
RD_WatchViewPoint pt;
|
||||
TxtPt cursor;
|
||||
TxtPt mark;
|
||||
U8 input_buffer[1024];
|
||||
U64 input_size;
|
||||
U8 initial_buffer[1024];
|
||||
U64 initial_size;
|
||||
};
|
||||
|
||||
typedef struct RD_WatchViewState RD_WatchViewState;
|
||||
struct RD_WatchViewState
|
||||
{
|
||||
B32 initialized;
|
||||
|
||||
// rjf: fill kinds (way that the contents of the watch view are computed)
|
||||
RD_WatchViewFillKind fill_kind;
|
||||
|
||||
// rjf: column state
|
||||
Arena *column_arena;
|
||||
RD_WatchViewColumn *first_column;
|
||||
RD_WatchViewColumn *last_column;
|
||||
RD_WatchViewColumn *free_column;
|
||||
U64 column_count;
|
||||
|
||||
// rjf; table cursor state
|
||||
RD_WatchViewPoint cursor;
|
||||
RD_WatchViewPoint mark;
|
||||
RD_WatchViewPoint next_cursor;
|
||||
RD_WatchViewPoint next_mark;
|
||||
|
||||
// rjf: text input state
|
||||
Arena *text_edit_arena;
|
||||
U64 text_edit_state_slots_count;
|
||||
RD_WatchViewTextEditState dummy_text_edit_state;
|
||||
RD_WatchViewTextEditState **text_edit_state_slots;
|
||||
B32 text_editing;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Code View Functions
|
||||
|
||||
internal void rd_code_view_init(RD_CodeViewState *cv, RD_View *view);
|
||||
internal void rd_code_view_cmds(RD_View *view, RD_CodeViewState *cv, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key);
|
||||
internal RD_CodeViewBuildResult rd_code_view_build(Arena *arena, RD_View *view, RD_CodeViewState *cv, RD_CodeViewBuildFlags flags, Rng2F32 rect, String8 text_data, TXT_TextInfo *text_info, DASM_LineArray *dasm_lines, Rng1U64 dasm_vaddr_range, DI_Key dasm_dbgi_key);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Watch View Functions
|
||||
|
||||
//- rjf: index -> column
|
||||
internal RD_WatchViewColumn *rd_watch_view_column_from_x(RD_WatchViewState *wv, S64 index);
|
||||
|
||||
//- rjf: watch view points <-> table coordinates
|
||||
internal B32 rd_watch_view_point_match(RD_WatchViewPoint a, RD_WatchViewPoint b);
|
||||
internal RD_WatchViewPoint rd_watch_view_point_from_tbl(EV_BlockList *blocks, Vec2S64 tbl);
|
||||
internal Vec2S64 rd_tbl_from_watch_view_point(EV_BlockList *blocks, RD_WatchViewPoint pt);
|
||||
|
||||
//- rjf: table coordinates -> strings
|
||||
internal String8 rd_string_from_eval_viz_row_column(Arena *arena, EV_View *ev, EV_Row *row, RD_WatchViewColumn *col, B32 editable, U32 default_radix, FNT_Tag font, F32 font_size, F32 max_size_px);
|
||||
|
||||
//- rjf: table coordinates -> text edit state
|
||||
internal RD_WatchViewTextEditState *rd_watch_view_text_edit_state_from_pt(RD_WatchViewState *wv, RD_WatchViewPoint pt);
|
||||
|
||||
//- rjf: watch view column state mutation
|
||||
internal RD_WatchViewColumn *rd_watch_view_column_alloc_(RD_WatchViewState *wv, RD_WatchViewColumnKind kind, F32 pct, RD_WatchViewColumnParams *params);
|
||||
#define rd_watch_view_column_alloc(wv, kind, pct, ...) rd_watch_view_column_alloc_((wv), (kind), (pct), &(RD_WatchViewColumnParams){.string = str8_zero(), __VA_ARGS__})
|
||||
internal void rd_watch_view_column_release(RD_WatchViewState *wv, RD_WatchViewColumn *col);
|
||||
|
||||
//- rjf: watch view main hooks
|
||||
internal void rd_watch_view_init(RD_WatchViewState *ewv, RD_View *view, RD_WatchViewFillKind fill_kind);
|
||||
internal void rd_watch_view_build(RD_View *view, RD_WatchViewState *ewv, B32 modifiable, U32 default_radix, Rng2F32 rect);
|
||||
|
||||
#endif // RADDBG_VIEWS_H
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,122 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef RADDBG_WIDGETS_H
|
||||
#define RADDBG_WIDGETS_H
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Line Edit Types
|
||||
|
||||
typedef U32 RD_LineEditFlags;
|
||||
enum
|
||||
{
|
||||
RD_LineEditFlag_Expander = (1<<0),
|
||||
RD_LineEditFlag_ExpanderSpace = (1<<1),
|
||||
RD_LineEditFlag_ExpanderPlaceholder = (1<<2),
|
||||
RD_LineEditFlag_DisableEdit = (1<<3),
|
||||
RD_LineEditFlag_CodeContents = (1<<4),
|
||||
RD_LineEditFlag_Border = (1<<5),
|
||||
RD_LineEditFlag_NoBackground = (1<<6),
|
||||
RD_LineEditFlag_PreferDisplayString = (1<<7),
|
||||
RD_LineEditFlag_DisplayStringIsCode = (1<<8),
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Code Slice Types
|
||||
|
||||
typedef U32 RD_CodeSliceFlags;
|
||||
enum
|
||||
{
|
||||
RD_CodeSliceFlag_Clickable = (1<<0),
|
||||
RD_CodeSliceFlag_PriorityMargin = (1<<1),
|
||||
RD_CodeSliceFlag_CatchallMargin = (1<<2),
|
||||
RD_CodeSliceFlag_LineNums = (1<<3),
|
||||
};
|
||||
|
||||
typedef struct RD_CodeSliceParams RD_CodeSliceParams;
|
||||
struct RD_CodeSliceParams
|
||||
{
|
||||
// rjf: content
|
||||
RD_CodeSliceFlags flags;
|
||||
Rng1S64 line_num_range;
|
||||
String8 *line_text;
|
||||
Rng1U64 *line_ranges;
|
||||
TXT_TokenArray *line_tokens;
|
||||
RD_EntityList *line_bps;
|
||||
CTRL_EntityList *line_ips;
|
||||
RD_EntityList *line_pins;
|
||||
U64 *line_vaddrs;
|
||||
D_LineList *line_infos;
|
||||
DI_KeyList relevant_dbgi_keys;
|
||||
|
||||
// rjf: visual parameters
|
||||
FNT_Tag font;
|
||||
F32 font_size;
|
||||
F32 tab_size;
|
||||
String8 search_query;
|
||||
F32 line_height_px;
|
||||
F32 priority_margin_width_px;
|
||||
F32 catchall_margin_width_px;
|
||||
F32 line_num_width_px;
|
||||
F32 line_text_max_width_px;
|
||||
F32 margin_float_off_px;
|
||||
};
|
||||
|
||||
typedef struct RD_CodeSliceSignal RD_CodeSliceSignal;
|
||||
struct RD_CodeSliceSignal
|
||||
{
|
||||
UI_Signal base;
|
||||
TxtPt mouse_pt;
|
||||
TxtRng mouse_expr_rng;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Building Helpers
|
||||
|
||||
#define RD_Palette(code) UI_Palette(rd_palette_from_code(code))
|
||||
#define RD_Font(slot) UI_Font(rd_font_from_slot(slot)) UI_TextRasterFlags(rd_raster_flags_from_slot((slot)))
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Loading Overlay
|
||||
|
||||
internal void rd_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U64 progress_v_target);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Fancy Buttons
|
||||
|
||||
internal void rd_cmd_binding_buttons(String8 name);
|
||||
internal UI_Signal rd_menu_bar_button(String8 string);
|
||||
internal UI_Signal rd_cmd_spec_button(String8 name);
|
||||
internal void rd_cmd_list_menu_buttons(U64 count, String8 *cmd_names, U32 *fastpath_codepoints);
|
||||
internal UI_Signal rd_icon_button(RD_IconKind kind, FuzzyMatchRangeList *matches, String8 string);
|
||||
internal UI_Signal rd_icon_buttonf(RD_IconKind kind, FuzzyMatchRangeList *matches, char *fmt, ...);
|
||||
internal void rd_entity_tooltips(RD_Entity *entity);
|
||||
internal UI_Signal rd_entity_desc_button(RD_Entity *entity, FuzzyMatchRangeList *name_matches, String8 fuzzy_query, B32 is_implicit);
|
||||
internal void rd_src_loc_button(String8 file_path, TxtPt point);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Text View
|
||||
|
||||
internal UI_BOX_CUSTOM_DRAW(rd_thread_box_draw_extensions);
|
||||
internal UI_BOX_CUSTOM_DRAW(rd_bp_box_draw_extensions);
|
||||
internal RD_CodeSliceSignal rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *preferred_column, String8 string);
|
||||
internal RD_CodeSliceSignal rd_code_slicef(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *preferred_column, char *fmt, ...);
|
||||
|
||||
internal B32 rd_do_txt_controls(TXT_TextInfo *info, String8 data, U64 line_count_per_page, TxtPt *cursor, TxtPt *mark, S64 *preferred_column);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Fancy Labels
|
||||
|
||||
internal UI_Signal rd_label(String8 string);
|
||||
internal UI_Signal rd_error_label(String8 string);
|
||||
internal B32 rd_help_label(String8 string);
|
||||
internal DR_FancyStringList rd_fancy_string_list_from_code_string(Arena *arena, F32 alpha, B32 indirection_size_change, Vec4F32 base_color, String8 string);
|
||||
internal UI_Box *rd_code_label(F32 alpha, B32 indirection_size_change, Vec4F32 base_color, String8 string);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Line Edit
|
||||
|
||||
internal UI_Signal rd_line_edit(RD_LineEditFlags flags, S32 depth, FuzzyMatchRangeList *matches, TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size, U64 *edit_string_size_out, B32 *expanded_out, String8 pre_edit_value, String8 string);
|
||||
internal UI_Signal rd_line_editf(RD_LineEditFlags flags, S32 depth, FuzzyMatchRangeList *matches, TxtPt *cursor, TxtPt *mark, U8 *edit_buffer, U64 edit_buffer_size, U64 *edit_string_size_out, B32 *expanded_out, String8 pre_edit_value, char *fmt, ...);
|
||||
|
||||
#endif // RADDBG_WIDGETS_H
|
||||
Reference in New Issue
Block a user