mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-16 00:52:23 -07:00
@@ -14,10 +14,11 @@ DF_RegTable:
|
||||
{DMN_Handle thread Thread }
|
||||
{DF_Handle window Window }
|
||||
{DF_Handle panel Panel }
|
||||
{DF_Handle tab Tab }
|
||||
{DF_Handle view View }
|
||||
{DF_Handle prev_view PrevView }
|
||||
{DF_Handle dst_panel DstPanel }
|
||||
{DF_Handle cfg_tree CfgTree }
|
||||
{DF_HandleList cfg_tree_list CfgTreeList }
|
||||
{DF_Handle prev_cfg_child PrevCfgChild }
|
||||
|
||||
// rjf: frame selection
|
||||
{U64 unwind_count UnwindCount }
|
||||
@@ -174,8 +175,7 @@ DF_MsgKindTable:
|
||||
{GoBack "" go_back 0 0 Null Nil 0 0 0 0 0 0 Null ""}
|
||||
{GoForward "" go_forward 0 0 Null Nil 0 0 0 0 0 0 Null ""}
|
||||
|
||||
//- rjf: tab selection
|
||||
{SelectTab "" select_tab 0 0 Null Nil 0 0 0 0 0 0 Null ""}
|
||||
//- rjf: tab selection
|
||||
{NextTab "" next_tab 0 0 Null Nil 0 0 0 0 0 0 Null ""}
|
||||
{PrevTab "" prev_tab 0 0 Null Nil 0 0 0 0 0 0 Null ""}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -232,7 +232,6 @@ struct DF_View
|
||||
U64 generation;
|
||||
|
||||
// rjf: loading animation state
|
||||
B32 is_loading;
|
||||
F32 loading_t;
|
||||
F32 loading_t_target;
|
||||
U64 loading_progress_v;
|
||||
@@ -343,6 +342,7 @@ DF_DragDropState;
|
||||
typedef struct DF_DragDropPayload DF_DragDropPayload;
|
||||
struct DF_DragDropPayload
|
||||
{
|
||||
UI_Key key__;
|
||||
DF_Handle cfg_tree;
|
||||
D_Handle entity;
|
||||
TxtPt text_point;
|
||||
@@ -825,10 +825,8 @@ struct DF_State
|
||||
U64 free_view_count;
|
||||
U64 allocated_view_count;
|
||||
|
||||
// rjf: drag/drop state
|
||||
Arena *drag_drop_arena;
|
||||
// rjf: drag/drop state machine
|
||||
DF_DragDropState drag_drop_state;
|
||||
DF_Regs *drag_drop_regs;
|
||||
|
||||
// rjf: rich hover info
|
||||
Arena *rich_hover_info_next_arena;
|
||||
@@ -985,9 +983,8 @@ internal D_CmdParams df_cmd_params_copy(Arena *arena, D_CmdParams *src);
|
||||
//~ rjf: Global Cross-Window UI Interaction State Functions
|
||||
|
||||
internal B32 df_drag_is_active(void);
|
||||
internal void df_drag_begin_(DF_Regs *regs);
|
||||
#define df_drag_begin(...) df_drag_begin_(&(DF_Regs){df_regs_lit_init_top __VA_ARGS__})
|
||||
internal B32 df_drag_drop(void);
|
||||
internal void df_drag_begin(DF_DragDropPayload *payload);
|
||||
internal B32 df_drag_drop(DF_DragDropPayload *out_payload);
|
||||
internal void df_drag_kill(void);
|
||||
internal void df_queue_drag_drop(void);
|
||||
|
||||
@@ -1056,7 +1053,7 @@ internal DF_Window *df_window_open(Vec2F32 size, OS_Handle preferred_monitor, D_
|
||||
|
||||
internal DF_Window *df_window_from_os_handle(OS_Handle os);
|
||||
|
||||
internal void df_window_frame(MD_Node *window_cfg);
|
||||
internal void df_window_frame(Arena *arena, MD_Node *window_cfg);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Eval Viz
|
||||
@@ -1105,20 +1102,17 @@ internal String8 df_key_from_cfg_tree(Arena *arena, MD_Node *node);
|
||||
|
||||
//- rjf: config tree mutations
|
||||
internal DF_CfgSlot df_cfg_slot_from_tree(MD_Node *node);
|
||||
internal MD_Node *df_cfg_tree_store(MD_Node *parent, MD_Node *prev_child, String8 string);
|
||||
internal MD_Node *df_cfg_tree_storef(MD_Node *parent, MD_Node *prev_child, char *fmt, ...);
|
||||
internal MD_Node *df_cfg_tree_store(MD_Node *parent, MD_Node *replace_node, String8 string);
|
||||
internal MD_Node *df_cfg_tree_storef(MD_Node *parent, MD_Node *replace_node, char *fmt, ...);
|
||||
internal void df_cfg_tree_set_string(MD_Node *node, String8 string);
|
||||
internal void df_cfg_tree_set_stringf(MD_Node *node, char *fmt, ...);
|
||||
internal void df_cfg_tree_insert_child(MD_Node *parent, MD_Node *prev_child, MD_Node *node);
|
||||
internal void df_cfg_tree_release(MD_Node *node);
|
||||
#define df_cfg_tree_set_key(parent, key, val) df_cfg_tree_store((parent), md_child_from_string((parent), (key), 0), (val))
|
||||
#define df_cfg_tree_set_keyf(parent, key, fmt, ...) df_cfg_tree_storef((parent), md_child_from_string((parent), (key), 0), (fmt), __VA_ARGS__)
|
||||
#define df_cfg_tree_remove(node) df_cfg_tree_store((node)->parent, (node), str8_zero())
|
||||
|
||||
//- rjf: config tree lookups
|
||||
internal Axis2 df_split_axis_from_panel_cfg(MD_Node *panel);
|
||||
internal Rng2F32 df_target_rect_from_panel_child_cfg(Rng2F32 parent_rect, Axis2 parent_split_axis, MD_Node *panel);
|
||||
internal Rng2F32 df_target_rect_from_panel_cfg(Rng2F32 root_rect, MD_Node *panel);
|
||||
internal B32 df_tab_cfg_is_project_filtered(MD_Node *cfg);
|
||||
|
||||
//- rjf: keybindings
|
||||
internal void df_clear_bindings(void);
|
||||
|
||||
@@ -18,6 +18,55 @@ df_code_view_init(DF_CodeViewState *cv, DF_View *view)
|
||||
view->loading_t = view->loading_t_target = 1.f;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
for(D_CmdNode *n = cmds->first; n != 0; n = n->next)
|
||||
{
|
||||
D_Cmd *cmd = &n->cmd;
|
||||
|
||||
// rjf: mismatched window/panel => skip
|
||||
if(!d_handle_match(d_regs()->window, cmd->params.window) ||
|
||||
!d_handle_match(d_regs()->panel, cmd->params.panel))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// rjf: process
|
||||
D_CmdKind core_cmd_kind = d_cmd_kind_from_string(cmd->spec->info.string);
|
||||
switch(core_cmd_kind)
|
||||
{
|
||||
default: break;
|
||||
case D_CmdKind_GoToLine:
|
||||
{
|
||||
cv->goto_line_num = cmd->params.text_point.line;
|
||||
}break;
|
||||
case D_CmdKind_CenterCursor:
|
||||
{
|
||||
cv->center_cursor = 1;
|
||||
}break;
|
||||
case D_CmdKind_ContainCursor:
|
||||
{
|
||||
cv->contain_cursor = 1;
|
||||
}break;
|
||||
case D_CmdKind_FindTextForward:
|
||||
{
|
||||
arena_clear(cv->find_text_arena);
|
||||
cv->find_text_fwd = push_str8_copy(cv->find_text_arena, cmd->params.string);
|
||||
}break;
|
||||
case D_CmdKind_FindTextBackward:
|
||||
{
|
||||
arena_clear(cv->find_text_arena);
|
||||
cv->find_text_bwd = push_str8_copy(cv->find_text_arena, cmd->params.string);
|
||||
}break;
|
||||
case D_CmdKind_ToggleWatchExpressionAtMouse:
|
||||
{
|
||||
cv->watch_expr_at_mouse = 1;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
@@ -26,51 +75,6 @@ df_code_view_build(Arena *arena, DF_View *view, DF_CodeViewState *cv, DF_CodeVie
|
||||
HS_Scope *hs_scope = hs_scope_open();
|
||||
TXT_Scope *txt_scope = txt_scope_open();
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: process messages
|
||||
//
|
||||
for(DF_Msg *msg = 0; df_next_msg(&msg);)
|
||||
{
|
||||
// rjf: mismatched window/panel => skip
|
||||
if(!df_handle_match(df_regs()->window, msg->regs->window) ||
|
||||
!df_handle_match(df_regs()->panel, msg->regs->panel))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// rjf: process
|
||||
switch(msg->kind)
|
||||
{
|
||||
default: break;
|
||||
case DF_MsgKind_GoToLine:
|
||||
{
|
||||
cv->goto_line_num = msg->regs.cursor.line;
|
||||
}break;
|
||||
case DF_MsgKind_CenterCursor:
|
||||
{
|
||||
cv->center_cursor = 1;
|
||||
}break;
|
||||
case DF_MsgKind_ContainCursor:
|
||||
{
|
||||
cv->contain_cursor = 1;
|
||||
}break;
|
||||
case DF_MsgKind_FindTextForward:
|
||||
{
|
||||
arena_clear(cv->find_text_arena);
|
||||
cv->find_text_fwd = push_str8_copy(cv->find_text_arena, msg->regs->string);
|
||||
}break;
|
||||
case DF_MsgKind_FindTextBackward:
|
||||
{
|
||||
arena_clear(cv->find_text_arena);
|
||||
cv->find_text_bwd = push_str8_copy(cv->find_text_arena, msg->regs->string);
|
||||
}break;
|
||||
case DF_MsgKind_ToggleWatchExpressionAtMouse:
|
||||
{
|
||||
cv->watch_expr_at_mouse = 1;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: extract invariants
|
||||
//
|
||||
|
||||
@@ -155,6 +155,7 @@ struct DF_WatchViewState
|
||||
//~ 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);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
//- GENERATED CODE
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
Rng1U64 df_reg_slot_range_table[29] =
|
||||
Rng1U64 df_reg_slot_range_table[30] =
|
||||
{
|
||||
{0},
|
||||
{OffsetOf(DF_Regs, machine_id), OffsetOf(DF_Regs, machine_id) + sizeof(CTRL_MachineID)},
|
||||
@@ -13,10 +13,11 @@ Rng1U64 df_reg_slot_range_table[29] =
|
||||
{OffsetOf(DF_Regs, thread), OffsetOf(DF_Regs, thread) + sizeof(DMN_Handle)},
|
||||
{OffsetOf(DF_Regs, window), OffsetOf(DF_Regs, window) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, panel), OffsetOf(DF_Regs, panel) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, tab), OffsetOf(DF_Regs, tab) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, view), OffsetOf(DF_Regs, view) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, prev_view), OffsetOf(DF_Regs, prev_view) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, dst_panel), OffsetOf(DF_Regs, dst_panel) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, cfg_tree), OffsetOf(DF_Regs, cfg_tree) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, cfg_tree_list), OffsetOf(DF_Regs, cfg_tree_list) + sizeof(DF_HandleList)},
|
||||
{OffsetOf(DF_Regs, prev_cfg_child), OffsetOf(DF_Regs, prev_cfg_child) + sizeof(DF_Handle)},
|
||||
{OffsetOf(DF_Regs, unwind_count), OffsetOf(DF_Regs, unwind_count) + sizeof(U64)},
|
||||
{OffsetOf(DF_Regs, inline_depth), OffsetOf(DF_Regs, inline_depth) + sizeof(U64)},
|
||||
{OffsetOf(DF_Regs, file_path), OffsetOf(DF_Regs, file_path) + sizeof(String8)},
|
||||
@@ -37,7 +38,7 @@ Rng1U64 df_reg_slot_range_table[29] =
|
||||
{OffsetOf(DF_Regs, os_event), OffsetOf(DF_Regs, os_event) + sizeof(OS_Event *)},
|
||||
};
|
||||
|
||||
DF_MsgKindInfo df_msg_kind_info_table[135] =
|
||||
DF_MsgKindInfo df_msg_kind_info_table[134] =
|
||||
{
|
||||
{0},
|
||||
{str8_lit_comp("exit"), str8_lit_comp("Exit"), str8_lit_comp(""), str8_lit_comp("Exit"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
@@ -105,7 +106,6 @@ DF_MsgKindInfo df_msg_kind_info_table[135] =
|
||||
{str8_lit_comp("focus_panel_down"), str8_lit_comp("FocusPanelDown"), str8_lit_comp(""), str8_lit_comp("FocusPanelDown"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
{str8_lit_comp("go_back"), str8_lit_comp("GoBack"), str8_lit_comp(""), str8_lit_comp("GoBack"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
{str8_lit_comp("go_forward"), str8_lit_comp("GoForward"), str8_lit_comp(""), str8_lit_comp("GoForward"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
{str8_lit_comp("select_tab"), str8_lit_comp("SelectTab"), str8_lit_comp(""), str8_lit_comp("SelectTab"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
{str8_lit_comp("next_tab"), str8_lit_comp("NextTab"), str8_lit_comp(""), str8_lit_comp("NextTab"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
{str8_lit_comp("prev_tab"), str8_lit_comp("PrevTab"), str8_lit_comp(""), str8_lit_comp("PrevTab"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
{str8_lit_comp("move_tab_right"), str8_lit_comp("MoveTabRight"), str8_lit_comp(""), str8_lit_comp("MoveTabRight"), ((0*DF_MsgKindFlag_ListInUI)|(0*DF_MsgKindFlag_ListInIPCDocs)), {(0*DF_MsgQueryFlag_AllowFiles)|(0*DF_MsgQueryFlag_AllowFolders)|(0*DF_MsgQueryFlag_KeepOldInput)|(0*DF_MsgQueryFlag_SelectOldInput)|(0*DF_MsgQueryFlag_CodeInput)|(0*DF_MsgQueryFlag_Required), D_RegSlot_Null, D_EntityKind_Nil}},
|
||||
|
||||
@@ -15,10 +15,11 @@ DF_RegSlot_Module,
|
||||
DF_RegSlot_Thread,
|
||||
DF_RegSlot_Window,
|
||||
DF_RegSlot_Panel,
|
||||
DF_RegSlot_Tab,
|
||||
DF_RegSlot_View,
|
||||
DF_RegSlot_PrevView,
|
||||
DF_RegSlot_DstPanel,
|
||||
DF_RegSlot_CfgTree,
|
||||
DF_RegSlot_CfgTreeList,
|
||||
DF_RegSlot_PrevCfgChild,
|
||||
DF_RegSlot_UnwindCount,
|
||||
DF_RegSlot_InlineDepth,
|
||||
DF_RegSlot_FilePath,
|
||||
@@ -143,7 +144,6 @@ DF_MsgKind_FocusPanelUp,
|
||||
DF_MsgKind_FocusPanelDown,
|
||||
DF_MsgKind_GoBack,
|
||||
DF_MsgKind_GoForward,
|
||||
DF_MsgKind_SelectTab,
|
||||
DF_MsgKind_NextTab,
|
||||
DF_MsgKind_PrevTab,
|
||||
DF_MsgKind_MoveTabRight,
|
||||
@@ -454,10 +454,11 @@ DMN_Handle module;
|
||||
DMN_Handle thread;
|
||||
DF_Handle window;
|
||||
DF_Handle panel;
|
||||
DF_Handle tab;
|
||||
DF_Handle view;
|
||||
DF_Handle prev_view;
|
||||
DF_Handle dst_panel;
|
||||
DF_Handle cfg_tree;
|
||||
DF_HandleList cfg_tree_list;
|
||||
DF_Handle prev_cfg_child;
|
||||
U64 unwind_count;
|
||||
U64 inline_depth;
|
||||
String8 file_path;
|
||||
@@ -485,10 +486,11 @@ OS_Event * os_event;
|
||||
.thread = df_regs()->thread,\
|
||||
.window = df_regs()->window,\
|
||||
.panel = df_regs()->panel,\
|
||||
.tab = df_regs()->tab,\
|
||||
.view = df_regs()->view,\
|
||||
.prev_view = df_regs()->prev_view,\
|
||||
.dst_panel = df_regs()->dst_panel,\
|
||||
.cfg_tree = df_regs()->cfg_tree,\
|
||||
.cfg_tree_list = df_regs()->cfg_tree_list,\
|
||||
.prev_cfg_child = df_regs()->prev_cfg_child,\
|
||||
.unwind_count = df_regs()->unwind_count,\
|
||||
.inline_depth = df_regs()->inline_depth,\
|
||||
.file_path = df_regs()->file_path,\
|
||||
@@ -621,8 +623,8 @@ DF_VIEW_RULE_LINE_STRINGIZE_FUNCTION_DEF(no_addr);
|
||||
DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(checkbox);
|
||||
DF_VIEW_RULE_ROW_UI_FUNCTION_DEF(color_rgba);
|
||||
C_LINKAGE_BEGIN
|
||||
extern Rng1U64 df_reg_slot_range_table[29];
|
||||
extern DF_MsgKindInfo df_msg_kind_info_table[135];
|
||||
extern Rng1U64 df_reg_slot_range_table[30];
|
||||
extern DF_MsgKindInfo df_msg_kind_info_table[134];
|
||||
extern DF_StringBindingPair df_g_default_binding_table[110];
|
||||
extern String8 df_g_binding_version_remap_old_name_table[7];
|
||||
extern String8 df_g_binding_version_remap_new_name_table[7];
|
||||
|
||||
+4
-12
@@ -212,13 +212,9 @@ md_node_push_child(MD_Node *parent, MD_Node *node)
|
||||
}
|
||||
|
||||
internal void
|
||||
md_node_unhook_child(MD_Node *node)
|
||||
md_node_remove_child(MD_Node *parent, MD_Node *node)
|
||||
{
|
||||
MD_Node *parent = node->parent;
|
||||
if(!md_node_is_nil(parent))
|
||||
{
|
||||
DLLRemove_NPZ(&md_nil_node, parent->first, parent->last, node, next, prev);
|
||||
}
|
||||
DLLRemove_NPZ(&md_nil_node, parent->first, parent->last, node, next, prev);
|
||||
}
|
||||
|
||||
internal void
|
||||
@@ -236,13 +232,9 @@ md_node_push_tag(MD_Node *parent, MD_Node *node)
|
||||
}
|
||||
|
||||
internal void
|
||||
md_node_unhook_tag(MD_Node *node)
|
||||
md_node_remove_tag(MD_Node *parent, MD_Node *node)
|
||||
{
|
||||
MD_Node *parent = node->parent;
|
||||
if(!md_node_is_nil(parent))
|
||||
{
|
||||
DLLRemove_NPZ(&md_nil_node, parent->first_tag, parent->last_tag, node, next, prev);
|
||||
}
|
||||
DLLRemove_NPZ(&md_nil_node, parent->first_tag, parent->last_tag, node, next, prev);
|
||||
}
|
||||
|
||||
//- rjf: tree building helpers
|
||||
|
||||
+2
-2
@@ -263,10 +263,10 @@ internal MD_NodeRec md_node_rec_depth_first(MD_Node *node, MD_Node *subtree_root
|
||||
internal MD_Node *md_push_node(Arena *arena, MD_NodeKind kind, MD_NodeFlags flags, String8 string, String8 raw_string, U64 src_offset);
|
||||
internal void md_node_insert_child(MD_Node *parent, MD_Node *prev_child, MD_Node *node);
|
||||
internal void md_node_push_child(MD_Node *parent, MD_Node *node);
|
||||
internal void md_node_unhook_child(MD_Node *node);
|
||||
internal void md_node_remove_child(MD_Node *parent, MD_Node *node);
|
||||
internal void md_node_insert_tag(MD_Node *parent, MD_Node *prev_child, MD_Node *node);
|
||||
internal void md_node_push_tag(MD_Node *parent, MD_Node *node);
|
||||
internal void md_node_unhook_tag(MD_Node *node);
|
||||
internal void md_node_remove_tag(MD_Node *parent, MD_Node *node);
|
||||
|
||||
//- rjf: tree building helpers
|
||||
internal MD_Node *md_push_list(Arena *arena);
|
||||
|
||||
+2
-84
@@ -430,8 +430,6 @@ ui_state_alloc(void)
|
||||
ui->string_hover_arena = arena_alloc();
|
||||
ui->box_table_size = 4096;
|
||||
ui->box_table = push_array(arena, UI_BoxHashSlot, ui->box_table_size);
|
||||
ui->anim_slots_count = 4096;
|
||||
ui->anim_slots = push_array(arena, UI_AnimSlot, ui->anim_slots_count);
|
||||
UI_InitStackNils(ui);
|
||||
return ui;
|
||||
}
|
||||
@@ -799,25 +797,6 @@ ui_begin_build(OS_Handle window, UI_EventList *events, UI_IconInfo *icon_info, U
|
||||
ui_state->build_box_count = 0;
|
||||
ui_state->tooltip_open = 0;
|
||||
ui_state->ctx_menu_changed = 0;
|
||||
ui_state->default_animation_rate = 1 - pow_f32(2, (-50.f * ui_state->animation_dt));
|
||||
}
|
||||
|
||||
//- rjf: prune unused animation nodes
|
||||
ProfScope("ui prune unused animation nodes")
|
||||
{
|
||||
for(UI_AnimNode *n = ui_state->lru_anim_node, *next = &ui_nil_anim_node; n != &ui_nil_anim_node; n = next)
|
||||
{
|
||||
next = n->lru_next;
|
||||
if(n->last_touched_build_index+1 < ui_state->build_index)
|
||||
{
|
||||
DLLRemove_NPZ(&ui_nil_anim_node, ui_state->lru_anim_node, ui_state->mru_anim_node, n, lru_next, lru_prev);
|
||||
SLLStackPush_N(ui_state->free_anim_node, n, slot_next);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: detect mouse-moves
|
||||
@@ -1276,18 +1255,8 @@ ui_end_build(void)
|
||||
}
|
||||
|
||||
//- rjf: animate
|
||||
ProfScope("animate")
|
||||
{
|
||||
for(U64 slot_idx = 0; slot_idx < ui_state->anim_slots_count; slot_idx += 1)
|
||||
{
|
||||
for(UI_AnimNode *n = ui_state->anim_slots[slot_idx].first;
|
||||
n != &ui_nil_anim_node && n != 0;
|
||||
n = n->slot_next)
|
||||
{
|
||||
n->current += (n->params.target - n->current) * n->params.rate;
|
||||
ui_state->is_animating = (ui_state->is_animating || abs_f32(n->params.target - n->current) > n->params.epsilon);
|
||||
}
|
||||
}
|
||||
ProfBegin("ui animate");
|
||||
F32 vast_rate = 1 - pow_f32(2, (-60.f * ui_state->animation_dt));
|
||||
F32 fast_rate = 1 - pow_f32(2, (-50.f * ui_state->animation_dt));
|
||||
F32 fish_rate = 1 - pow_f32(2, (-40.f * ui_state->animation_dt));
|
||||
@@ -1403,6 +1372,7 @@ ui_end_build(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
ProfEnd();
|
||||
}
|
||||
|
||||
//- rjf: animate context menu
|
||||
@@ -2947,58 +2917,6 @@ ui_signal_from_box(UI_Box *box)
|
||||
return sig;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Animation Cache Interaction API
|
||||
|
||||
internal F32
|
||||
ui_anim_(UI_Key key, UI_AnimParams *params)
|
||||
{
|
||||
// rjf: get animation cache node
|
||||
UI_AnimNode *node = &ui_nil_anim_node;
|
||||
{
|
||||
U64 slot_idx = key.u64[0]%ui_state->anim_slots_count;
|
||||
UI_AnimSlot *slot = &ui_state->anim_slots[slot_idx];
|
||||
for(UI_AnimNode *n = slot->first; n != &ui_nil_anim_node; n = n->slot_next)
|
||||
{
|
||||
if(ui_key_match(n->key, key))
|
||||
{
|
||||
node = n;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(node == &ui_nil_anim_node)
|
||||
{
|
||||
node = ui_state->free_anim_node;
|
||||
if(node != 0)
|
||||
{
|
||||
SLLStackPop_N(ui_state->free_anim_node, slot_next);
|
||||
}
|
||||
else
|
||||
{
|
||||
node = push_array(ui_state->arena, UI_AnimNode, 1);
|
||||
}
|
||||
node->first_touched_build_index = ui_state->build_index;
|
||||
node->key = key;
|
||||
MemoryCopyStruct(&node->params, params);
|
||||
DLLPushBack_NPZ(&ui_nil_anim_node, slot->first, slot->last, node, slot_next, slot_prev);
|
||||
}
|
||||
else
|
||||
{
|
||||
DLLRemove_NPZ(&ui_nil_anim_node, ui_state->lru_anim_node, ui_state->mru_anim_node, node, lru_next, lru_prev);
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: touch node & update parameters - grab current
|
||||
node->last_touched_build_index = ui_state->build_index;
|
||||
DLLPushBack_NPZ(&ui_nil_anim_node, ui_state->lru_anim_node, ui_state->mru_anim_node, node, lru_next, lru_prev);
|
||||
MemoryCopyStruct(&node->params, params);
|
||||
if(node->params.epsilon == 0)
|
||||
{
|
||||
node->params.epsilon = (node->params.target - node->params.initial) / 10000.f;
|
||||
}
|
||||
return node->current;;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Stacks
|
||||
|
||||
|
||||
@@ -571,39 +571,6 @@ struct UI_Nav
|
||||
Vec2S64 new_p;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Animation State Types
|
||||
|
||||
typedef struct UI_AnimParams UI_AnimParams;
|
||||
struct UI_AnimParams
|
||||
{
|
||||
F32 initial;
|
||||
F32 target;
|
||||
F32 rate;
|
||||
F32 epsilon;
|
||||
};
|
||||
|
||||
typedef struct UI_AnimNode UI_AnimNode;
|
||||
struct UI_AnimNode
|
||||
{
|
||||
UI_AnimNode *slot_next;
|
||||
UI_AnimNode *slot_prev;
|
||||
UI_AnimNode *lru_next;
|
||||
UI_AnimNode *lru_prev;
|
||||
U64 first_touched_build_index;
|
||||
U64 last_touched_build_index;
|
||||
UI_Key key;
|
||||
UI_AnimParams params;
|
||||
F32 current;
|
||||
};
|
||||
|
||||
typedef struct UI_AnimSlot UI_AnimSlot;
|
||||
struct UI_AnimSlot
|
||||
{
|
||||
UI_AnimNode *first;
|
||||
UI_AnimNode *last;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Generated Code
|
||||
|
||||
@@ -634,13 +601,6 @@ struct UI_State
|
||||
U64 box_table_size;
|
||||
UI_BoxHashSlot *box_table;
|
||||
|
||||
//- rjf: anim cache
|
||||
UI_AnimNode *free_anim_node;
|
||||
UI_AnimNode *lru_anim_node;
|
||||
UI_AnimNode *mru_anim_node;
|
||||
U64 anim_slots_count;
|
||||
UI_AnimSlot *anim_slots;
|
||||
|
||||
//- rjf: build state machine state
|
||||
B32 is_in_open_ctx_menu;
|
||||
|
||||
@@ -662,7 +622,6 @@ struct UI_State
|
||||
UI_EventList *events;
|
||||
Vec2F32 mouse;
|
||||
F32 animation_dt;
|
||||
F32 default_animation_rate;
|
||||
|
||||
//- rjf: user interaction state
|
||||
UI_Key hot_box_key;
|
||||
@@ -893,18 +852,6 @@ internal U64 ui_box_char_pos_from_xy(UI_Box *box, Vec2F32 xy);
|
||||
|
||||
internal UI_Signal ui_signal_from_box(UI_Box *box);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Animation Cache Interaction API
|
||||
|
||||
read_only global UI_AnimNode ui_nil_anim_node =
|
||||
{
|
||||
&ui_nil_anim_node,
|
||||
&ui_nil_anim_node,
|
||||
};
|
||||
|
||||
internal F32 ui_anim_(UI_Key key, UI_AnimParams *params);
|
||||
#define ui_anim(key, target_val, ...) ui_anim_((key), &(UI_AnimParams){.target = (target_val), __VA_ARGS__, .rate = (ui_state->default_animation_rate)})
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Stacks
|
||||
|
||||
|
||||
Reference in New Issue
Block a user