Revert "yet another checkpoint"

This reverts commit 5ad8d523ba.
This commit is contained in:
Ryan Fleury
2024-09-07 14:48:29 -07:00
parent 30766f93ae
commit 6180da1b0f
11 changed files with 396 additions and 797 deletions
+4 -4
View File
@@ -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
+8 -14
View File
@@ -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);
+49 -45
View File
@@ -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
//
+1
View File
@@ -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}},
+11 -9
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
-53
View File
@@ -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