mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-07-09 11:01:37 -07:00
part 3: more progress on entity -> cfg frontend pass
This commit is contained in:
+1
-1
@@ -46,7 +46,7 @@ load_paths =
|
||||
commands =
|
||||
{
|
||||
//- rjf: fkey command slots (change locally but do not commit)
|
||||
.f1 = { .win = "build raddbg telemetry clang", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
.f1 = { .win = "build raddbg telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
.f2 = { .win = "build rdi_from_pdb", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
.f3 = { .win = "pushd build && raddbg.exe --user:local_dev.raddbg_user --project:local_dev.raddbg_project --xuto_run && popd",.linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
// .f1 = { .win = "build textperf release telemetry", .linux = "", .out = "*compilation*", .footer_panel = true, .save_dirty_files = true, .cursor_at_end = false, },
|
||||
|
||||
+443
-179
@@ -597,7 +597,7 @@ internal RD_Cfg *
|
||||
rd_cfg_from_handle(RD_Handle handle)
|
||||
{
|
||||
RD_Cfg *cfg = (RD_Cfg *)handle.u64[0];
|
||||
if(handle.u64[1] != cfg->gen)
|
||||
if(cfg == 0 || handle.u64[1] != cfg->gen)
|
||||
{
|
||||
cfg = &rd_nil_cfg;
|
||||
}
|
||||
@@ -959,13 +959,14 @@ rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
}
|
||||
|
||||
// rjf: extract cfg info
|
||||
B32 panel_has_tabs = 0;
|
||||
dst->cfg = src;
|
||||
dst->pct_of_parent = (F32)f64_from_str8(src->string);
|
||||
dst->tab_side = (rd_cfg_child_from_string(src, str8_lit("tabs_on_bottom")) != &rd_nil_cfg ? Side_Max : Side_Min);
|
||||
dst->split_axis = active_split_axis;
|
||||
for(RD_Cfg *src_child = src->first; src_child != &rd_nil_cfg; src_child = src_child->next)
|
||||
{
|
||||
MD_TokenizeResult tokenize = md_tokenize_from_text(scratch.arena, src->string);
|
||||
MD_TokenizeResult tokenize = md_tokenize_from_text(scratch.arena, src_child->string);
|
||||
if(tokenize.tokens.count == 1 && tokenize.tokens.v[0].flags & MD_TokenFlag_Numeric)
|
||||
{
|
||||
// NOTE(rjf): skip - this is a panel.
|
||||
@@ -976,8 +977,9 @@ rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
}
|
||||
else if(tokenize.tokens.count == 1 && tokenize.tokens.v[0].flags & MD_TokenFlag_Identifier)
|
||||
{
|
||||
panel_has_tabs = 1;
|
||||
rd_cfg_list_push(arena, &dst->tabs, src_child);
|
||||
if(rd_cfg_child_from_string(src_child, str8_lit("selected")))
|
||||
if(rd_cfg_child_from_string(src_child, str8_lit("selected")) != &rd_nil_cfg)
|
||||
{
|
||||
dst->selected_tab = src_child;
|
||||
}
|
||||
@@ -986,6 +988,19 @@ rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
|
||||
// rjf: recurse
|
||||
rec = rd_cfg_rec__depth_first(src_root, src);
|
||||
if(panel_has_tabs)
|
||||
{
|
||||
MemoryZeroStruct(&rec);
|
||||
rec.next = &rd_nil_cfg;
|
||||
for(RD_Cfg *p = src; p != src_root && p != &rd_nil_cfg; p = p->parent, rec.pop_count += 1)
|
||||
{
|
||||
if(p->next != &rd_nil_cfg)
|
||||
{
|
||||
rec.next = p->next;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(rec.push_count > 0)
|
||||
{
|
||||
dst_active_parent = dst;
|
||||
@@ -1018,9 +1033,9 @@ rd_panel_node_rec__depth_first(RD_PanelNode *root, RD_PanelNode *panel, U64 sib_
|
||||
}
|
||||
else for(RD_PanelNode *p = panel; p != &rd_nil_panel_node && p != root; p = p->parent, rec.pop_count += 1)
|
||||
{
|
||||
if(*MemberFromOffset(RD_PanelNode **, panel, sib_off) != &rd_nil_panel_node)
|
||||
if(*MemberFromOffset(RD_PanelNode **, p, sib_off) != &rd_nil_panel_node)
|
||||
{
|
||||
rec.next = *MemberFromOffset(RD_PanelNode **, panel, sib_off);
|
||||
rec.next = *MemberFromOffset(RD_PanelNode **, p, sib_off);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2668,7 +2683,7 @@ rd_view_state_from_cfg(RD_Cfg *cfg)
|
||||
U64 slot_idx = hash%rd_state->view_state_slots_count;
|
||||
RD_ViewStateSlot *slot = &rd_state->view_state_slots[slot_idx];
|
||||
RD_ViewState *view_state = &rd_nil_view_state;
|
||||
for(RD_ViewState *v = slot->first; v != &rd_nil_view_state; v = v->hash_next)
|
||||
for(RD_ViewState *v = slot->first; v != 0; v = v->hash_next)
|
||||
{
|
||||
if(rd_handle_match(v->cfg_handle, cfg_handle))
|
||||
{
|
||||
@@ -2679,7 +2694,7 @@ rd_view_state_from_cfg(RD_Cfg *cfg)
|
||||
if(view_state == &rd_nil_view_state)
|
||||
{
|
||||
view_state = rd_state->free_view_state;
|
||||
if(view_state != &rd_nil_view_state)
|
||||
if(view_state)
|
||||
{
|
||||
SLLStackPop_N(rd_state->free_view_state, hash_next);
|
||||
}
|
||||
@@ -2688,7 +2703,7 @@ rd_view_state_from_cfg(RD_Cfg *cfg)
|
||||
view_state = push_array(rd_state->arena, RD_ViewState, 1);
|
||||
}
|
||||
MemoryCopyStruct(view_state, &rd_nil_view_state);
|
||||
DLLPushBack_NPZ(&rd_nil_view_state, slot->first, slot->last, view_state, hash_next, hash_prev);
|
||||
DLLPushBack_NP(slot->first, slot->last, view_state, hash_next, hash_prev);
|
||||
view_state->cfg_handle = cfg_handle;
|
||||
view_state->arena = arena_alloc();
|
||||
}
|
||||
@@ -3005,7 +3020,7 @@ rd_window_state_from_cfg(RD_Cfg *cfg)
|
||||
|
||||
//- rjf: scan for existing window
|
||||
RD_WindowState *ws = &rd_nil_window_state;
|
||||
for(RD_WindowState *w = slot->first; w != &rd_nil_window_state; w = w->hash_next)
|
||||
for(RD_WindowState *w = slot->first; w != 0; w = w->hash_next)
|
||||
{
|
||||
if(rd_handle_match(w->cfg_handle, handle))
|
||||
{
|
||||
@@ -3052,6 +3067,7 @@ rd_window_state_from_cfg(RD_Cfg *cfg)
|
||||
MemoryZeroStruct(ws);
|
||||
|
||||
// rjf: fill out window
|
||||
ws->cfg_handle = handle;
|
||||
ws->arena = arena_alloc();
|
||||
{
|
||||
String8 title = str8_lit_comp(BUILD_TITLE_STRING_LITERAL);
|
||||
@@ -3094,53 +3110,9 @@ rd_window_state_from_cfg(RD_Cfg *cfg)
|
||||
os_window_set_maximized(ws->os, 1);
|
||||
}
|
||||
|
||||
// rjf: pre-emptively rasterize common glyphs
|
||||
if(rd_state->first_window_state == &rd_nil_window_state) RD_RegsScope(.window = handle)
|
||||
{
|
||||
RD_FontSlot english_font_slots[] = {RD_FontSlot_Main, RD_FontSlot_Code};
|
||||
RD_FontSlot icon_font_slot = RD_FontSlot_Icons;
|
||||
for(U64 idx = 0; idx < ArrayCount(english_font_slots); idx += 1)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
RD_FontSlot slot = english_font_slots[idx];
|
||||
String8 sample_text = str8_lit("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890~!@#$%^&*()-_+=[{]}\\|;:'\",<.>/?");
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Code),
|
||||
0, 0, 0,
|
||||
sample_text);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Main),
|
||||
0, 0, 0,
|
||||
sample_text);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
for(RD_IconKind icon_kind = RD_IconKind_Null; icon_kind < RD_IconKind_COUNT; icon_kind = (RD_IconKind)(icon_kind+1))
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(icon_font_slot),
|
||||
rd_font_size_from_slot(icon_font_slot),
|
||||
0, 0, FNT_RasterFlag_Smooth,
|
||||
rd_icon_kind_text_table[icon_kind]);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(icon_font_slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Main),
|
||||
0, 0, FNT_RasterFlag_Smooth,
|
||||
rd_icon_kind_text_table[icon_kind]);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(icon_font_slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Code),
|
||||
0, 0, FNT_RasterFlag_Smooth,
|
||||
rd_icon_kind_text_table[icon_kind]);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: hook up window links
|
||||
DLLPushBack_NPZ(&rd_nil_window_state, rd_state->first_window_state, rd_state->last_window_state, ws, order_next, order_prev);
|
||||
DLLPushBack_NPZ(&rd_nil_window_state, slot->first, slot->last, ws, hash_next, hash_prev);
|
||||
DLLPushBack_NP(slot->first, slot->last, ws, hash_next, hash_prev);
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
@@ -3158,9 +3130,8 @@ internal RD_WindowState *
|
||||
rd_window_state_from_os_handle(OS_Handle os)
|
||||
{
|
||||
RD_WindowState *ws = &rd_nil_window_state;
|
||||
for EachIndex(slot_idx, rd_state->window_state_slots_count)
|
||||
{
|
||||
for(RD_WindowState *w = rd_state->window_state_slots[slot_idx].first;
|
||||
for(RD_WindowState *w = rd_state->first_window_state;
|
||||
w != &rd_nil_window_state;
|
||||
w = w->order_next)
|
||||
{
|
||||
@@ -3204,6 +3175,52 @@ rd_window_frame(void)
|
||||
ws->window_temporarily_focused_ipc = 0;
|
||||
ui_select_state(ws->ui);
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: pre-emptively rasterize common glyphs on the first frame
|
||||
//
|
||||
if(rd_state->first_window_state == ws && rd_state->last_window_state == ws && ws->frames_alive == 0)
|
||||
{
|
||||
RD_FontSlot english_font_slots[] = {RD_FontSlot_Main, RD_FontSlot_Code};
|
||||
RD_FontSlot icon_font_slot = RD_FontSlot_Icons;
|
||||
for(U64 idx = 0; idx < ArrayCount(english_font_slots); idx += 1)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
RD_FontSlot slot = english_font_slots[idx];
|
||||
String8 sample_text = str8_lit("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890~!@#$%^&*()-_+=[{]}\\|;:'\",<.>/?");
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Code),
|
||||
0, 0, 0,
|
||||
sample_text);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Main),
|
||||
0, 0, 0,
|
||||
sample_text);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
for(RD_IconKind icon_kind = RD_IconKind_Null; icon_kind < RD_IconKind_COUNT; icon_kind = (RD_IconKind)(icon_kind+1))
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(icon_font_slot),
|
||||
rd_font_size_from_slot(icon_font_slot),
|
||||
0, 0, FNT_RasterFlag_Smooth,
|
||||
rd_icon_kind_text_table[icon_kind]);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(icon_font_slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Main),
|
||||
0, 0, FNT_RasterFlag_Smooth,
|
||||
rd_icon_kind_text_table[icon_kind]);
|
||||
fnt_push_run_from_string(scratch.arena,
|
||||
rd_font_from_slot(icon_font_slot),
|
||||
rd_font_size_from_slot(RD_FontSlot_Code),
|
||||
0, 0, FNT_RasterFlag_Smooth,
|
||||
rd_icon_kind_text_table[icon_kind]);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: fill panel/view interaction registers
|
||||
//
|
||||
@@ -5791,7 +5808,7 @@ rd_window_frame(void)
|
||||
|
||||
// rjf: close dropdown
|
||||
UI_Key close_ctx_menu_key = ui_key_from_stringf(ui_key_zero(), "###close_ctx_menu");
|
||||
UI_CtxMenu(close_ctx_menu_key)
|
||||
UI_CtxMenu(close_ctx_menu_key) RD_Palette(RD_PaletteCode_ImplicitButton)
|
||||
{
|
||||
if(ui_clicked(rd_icon_buttonf(RD_IconKind_Window, 0, "Close Window")))
|
||||
{
|
||||
@@ -7472,116 +7489,116 @@ rd_window_frame(void)
|
||||
drop_sites[view_idx].prev_view = prev_tab;
|
||||
drop_site_max_p = Max(tab_column_box->rect.x1, drop_site_max_p);
|
||||
}
|
||||
|
||||
// rjf: build add-new-tab button
|
||||
UI_TextAlignment(UI_TextAlign_Center)
|
||||
UI_PrefWidth(ui_px(tab_bar_vheight, 1.f))
|
||||
UI_PrefHeight(ui_px(tab_bar_vheight, 1.f))
|
||||
UI_Column
|
||||
}
|
||||
|
||||
// rjf: build add-new-tab button
|
||||
UI_TextAlignment(UI_TextAlign_Center)
|
||||
UI_PrefWidth(ui_px(tab_bar_vheight, 1.f))
|
||||
UI_PrefHeight(ui_px(tab_bar_vheight, 1.f))
|
||||
UI_Column
|
||||
{
|
||||
if(panel->tab_side == Side_Max)
|
||||
{
|
||||
if(panel->tab_side == Side_Max)
|
||||
ui_spacer(ui_px(tab_bar_rv_diff-1.f, 1.f));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui_spacer(ui_px(1.f, 1.f));
|
||||
}
|
||||
UI_CornerRadius00(panel->tab_side == Side_Min ? corner_radius : 0)
|
||||
UI_CornerRadius10(panel->tab_side == Side_Min ? corner_radius : 0)
|
||||
UI_CornerRadius01(panel->tab_side == Side_Max ? corner_radius : 0)
|
||||
UI_CornerRadius11(panel->tab_side == Side_Max ? corner_radius : 0)
|
||||
RD_Font(RD_FontSlot_Icons)
|
||||
UI_FontSize(ui_top_font_size())
|
||||
UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
|
||||
UI_HoverCursor(OS_Cursor_HandPoint)
|
||||
RD_Palette(RD_PaletteCode_ImplicitButton)
|
||||
{
|
||||
UI_Box *add_new_box = ui_build_box_from_stringf(UI_BoxFlag_DrawBackground|
|
||||
UI_BoxFlag_DrawText|
|
||||
UI_BoxFlag_DrawBorder|
|
||||
UI_BoxFlag_DrawHotEffects|
|
||||
UI_BoxFlag_DrawActiveEffects|
|
||||
UI_BoxFlag_Clickable|
|
||||
UI_BoxFlag_DisableTextTrunc,
|
||||
"%S##add_new_tab_button_%p",
|
||||
rd_icon_kind_text_table[RD_IconKind_Add],
|
||||
panel);
|
||||
UI_Signal sig = ui_signal_from_box(add_new_box);
|
||||
if(ui_clicked(sig))
|
||||
{
|
||||
ui_spacer(ui_px(tab_bar_rv_diff-1.f, 1.f));
|
||||
rd_cmd(RD_CmdKind_FocusPanel);
|
||||
UI_Key view_menu_key = ui_key_from_string(ui_key_zero(), str8_lit("_view_menu_key_"));
|
||||
ui_ctx_menu_open(view_menu_key, add_new_box->key, v2f32(0, tab_bar_vheight));
|
||||
}
|
||||
else
|
||||
}
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
// rjf: interact with tab bar
|
||||
ui_signal_from_box(tab_bar_box);
|
||||
|
||||
// rjf: fill out last drop site
|
||||
{
|
||||
drop_sites[drop_site_count-1].p = drop_site_max_p;
|
||||
drop_sites[drop_site_count-1].prev_view = rd_cfg_list_last(&panel->tabs);
|
||||
}
|
||||
|
||||
// rjf: more precise drop-sites on tab bar
|
||||
{
|
||||
Vec2F32 mouse = ui_mouse();
|
||||
RD_Cfg *drag_tab = rd_cfg_from_handle(rd_state->drag_drop_regs->view);
|
||||
if(rd_drag_is_active() && rd_state->drag_drop_regs_slot == RD_RegSlot_View && window_is_focused && contains_2f32(panel_rect, mouse) && drag_tab != &rd_nil_cfg)
|
||||
{
|
||||
// rjf: mouse => hovered drop site
|
||||
F32 min_distance = 0;
|
||||
DropSite *active_drop_site = 0;
|
||||
if(catchall_drop_site_hovered)
|
||||
{
|
||||
for(U64 drop_site_idx = 0; drop_site_idx < drop_site_count; drop_site_idx += 1)
|
||||
{
|
||||
ui_spacer(ui_px(1.f, 1.f));
|
||||
}
|
||||
UI_CornerRadius00(panel->tab_side == Side_Min ? corner_radius : 0)
|
||||
UI_CornerRadius10(panel->tab_side == Side_Min ? corner_radius : 0)
|
||||
UI_CornerRadius01(panel->tab_side == Side_Max ? corner_radius : 0)
|
||||
UI_CornerRadius11(panel->tab_side == Side_Max ? corner_radius : 0)
|
||||
RD_Font(RD_FontSlot_Icons)
|
||||
UI_FontSize(ui_top_font_size())
|
||||
UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
|
||||
UI_HoverCursor(OS_Cursor_HandPoint)
|
||||
RD_Palette(RD_PaletteCode_ImplicitButton)
|
||||
{
|
||||
UI_Box *add_new_box = ui_build_box_from_stringf(UI_BoxFlag_DrawBackground|
|
||||
UI_BoxFlag_DrawText|
|
||||
UI_BoxFlag_DrawBorder|
|
||||
UI_BoxFlag_DrawHotEffects|
|
||||
UI_BoxFlag_DrawActiveEffects|
|
||||
UI_BoxFlag_Clickable|
|
||||
UI_BoxFlag_DisableTextTrunc,
|
||||
"%S##add_new_tab_button_%p",
|
||||
rd_icon_kind_text_table[RD_IconKind_Add],
|
||||
panel);
|
||||
UI_Signal sig = ui_signal_from_box(add_new_box);
|
||||
if(ui_clicked(sig))
|
||||
F32 distance = abs_f32(drop_sites[drop_site_idx].p - mouse.x);
|
||||
if(drop_site_idx == 0 || distance < min_distance)
|
||||
{
|
||||
rd_cmd(RD_CmdKind_FocusPanel);
|
||||
UI_Key view_menu_key = ui_key_from_string(ui_key_zero(), str8_lit("_view_menu_key_"));
|
||||
ui_ctx_menu_open(view_menu_key, add_new_box->key, v2f32(0, tab_bar_vheight));
|
||||
active_drop_site = &drop_sites[drop_site_idx];
|
||||
min_distance = distance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
}
|
||||
|
||||
// rjf: interact with tab bar
|
||||
ui_signal_from_box(tab_bar_box);
|
||||
|
||||
// rjf: fill out last drop site
|
||||
{
|
||||
drop_sites[drop_site_count-1].p = drop_site_max_p;
|
||||
drop_sites[drop_site_count-1].prev_view = rd_cfg_list_last(&panel->tabs);
|
||||
}
|
||||
|
||||
// rjf: more precise drop-sites on tab bar
|
||||
{
|
||||
Vec2F32 mouse = ui_mouse();
|
||||
RD_Cfg *drag_tab = rd_cfg_from_handle(rd_state->drag_drop_regs->view);
|
||||
if(rd_drag_is_active() && rd_state->drag_drop_regs_slot == RD_RegSlot_View && window_is_focused && contains_2f32(panel_rect, mouse) && drag_tab != &rd_nil_cfg)
|
||||
// rjf: store closest prev-view
|
||||
if(active_drop_site != 0)
|
||||
{
|
||||
// rjf: mouse => hovered drop site
|
||||
F32 min_distance = 0;
|
||||
DropSite *active_drop_site = 0;
|
||||
if(catchall_drop_site_hovered)
|
||||
rd_last_drag_drop_prev_tab = rd_handle_from_cfg(active_drop_site->prev_view);
|
||||
}
|
||||
else
|
||||
{
|
||||
rd_last_drag_drop_prev_tab = rd_handle_zero();
|
||||
}
|
||||
|
||||
// rjf: vis
|
||||
if(drag_tab != &rd_nil_cfg && active_drop_site != 0)
|
||||
{
|
||||
RD_Palette(RD_PaletteCode_DropSiteOverlay) UI_Rect(tab_bar_rect)
|
||||
ui_build_box_from_key(UI_BoxFlag_DrawBackground, ui_key_zero());
|
||||
}
|
||||
|
||||
// rjf: drop
|
||||
if(catchall_drop_site_hovered && (active_drop_site != 0 && rd_drag_drop()))
|
||||
{
|
||||
RD_Cfg *drag_view = rd_cfg_from_handle(rd_state->drag_drop_regs->view);
|
||||
RD_Cfg *src_panel = rd_cfg_from_handle(rd_state->drag_drop_regs->panel);
|
||||
RD_Cfg *dst_panel = panel->cfg;
|
||||
if(dst_panel != &rd_nil_cfg && drag_view != &rd_nil_cfg)
|
||||
{
|
||||
for(U64 drop_site_idx = 0; drop_site_idx < drop_site_count; drop_site_idx += 1)
|
||||
{
|
||||
F32 distance = abs_f32(drop_sites[drop_site_idx].p - mouse.x);
|
||||
if(drop_site_idx == 0 || distance < min_distance)
|
||||
{
|
||||
active_drop_site = &drop_sites[drop_site_idx];
|
||||
min_distance = distance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: store closest prev-view
|
||||
if(active_drop_site != 0)
|
||||
{
|
||||
rd_last_drag_drop_prev_tab = rd_handle_from_cfg(active_drop_site->prev_view);
|
||||
}
|
||||
else
|
||||
{
|
||||
rd_last_drag_drop_prev_tab = rd_handle_zero();
|
||||
}
|
||||
|
||||
// rjf: vis
|
||||
if(drag_tab != &rd_nil_cfg && active_drop_site != 0)
|
||||
{
|
||||
RD_Palette(RD_PaletteCode_DropSiteOverlay) UI_Rect(tab_bar_rect)
|
||||
ui_build_box_from_key(UI_BoxFlag_DrawBackground, ui_key_zero());
|
||||
}
|
||||
|
||||
// rjf: drop
|
||||
if(catchall_drop_site_hovered && (active_drop_site != 0 && rd_drag_drop()))
|
||||
{
|
||||
RD_Cfg *drag_view = rd_cfg_from_handle(rd_state->drag_drop_regs->view);
|
||||
RD_Cfg *src_panel = rd_cfg_from_handle(rd_state->drag_drop_regs->panel);
|
||||
RD_Cfg *dst_panel = panel->cfg;
|
||||
if(dst_panel != &rd_nil_cfg && drag_view != &rd_nil_cfg)
|
||||
{
|
||||
rd_cmd(RD_CmdKind_MoveTab,
|
||||
.panel = rd_handle_from_cfg(src_panel),
|
||||
.dst_panel = rd_handle_from_cfg(dst_panel),
|
||||
.view = rd_handle_from_cfg(drag_view),
|
||||
.prev_view = rd_handle_from_cfg(active_drop_site->prev_view));
|
||||
}
|
||||
rd_cmd(RD_CmdKind_MoveTab,
|
||||
.panel = rd_handle_from_cfg(src_panel),
|
||||
.dst_panel = rd_handle_from_cfg(dst_panel),
|
||||
.view = rd_handle_from_cfg(drag_view),
|
||||
.prev_view = rd_handle_from_cfg(active_drop_site->prev_view));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10111,6 +10128,48 @@ rd_font_from_slot(RD_FontSlot slot)
|
||||
internal F32
|
||||
rd_font_size_from_slot(RD_FontSlot slot)
|
||||
{
|
||||
B32 explicit_config_found = 0;
|
||||
F32 result = 11.f;
|
||||
|
||||
// rjf: determine config key based on slot
|
||||
String8 key = {0};
|
||||
switch(slot)
|
||||
{
|
||||
default:{}break;
|
||||
case RD_FontSlot_Icons:
|
||||
case RD_FontSlot_Main:{key = str8_lit("main_font_size");}break;
|
||||
case RD_FontSlot_Code:{key = str8_lit("code_font_size");}break;
|
||||
}
|
||||
|
||||
// rjf: find most-granular config scope to begin looking for the setting
|
||||
RD_Cfg *start_cfg = rd_cfg_from_handle(rd_regs()->view);
|
||||
if(start_cfg == &rd_nil_cfg) { start_cfg = rd_cfg_from_handle(rd_regs()->panel); }
|
||||
if(start_cfg == &rd_nil_cfg) { start_cfg = rd_cfg_from_handle(rd_regs()->window); }
|
||||
|
||||
// rjf: scan upwards the config tree until we find the setting
|
||||
for(RD_Cfg *parent = start_cfg; parent != &rd_nil_cfg; parent = parent->parent)
|
||||
{
|
||||
RD_Cfg *child = rd_cfg_child_from_string(parent, key);
|
||||
if(child != &rd_nil_cfg)
|
||||
{
|
||||
result = (F32)f64_from_str8(child->first->string);
|
||||
explicit_config_found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: if we haven't found any explicit config, then use the window's monitor's DPI
|
||||
// based on some default size.
|
||||
if(explicit_config_found == 0)
|
||||
{
|
||||
RD_Cfg *window_cfg = rd_cfg_from_handle(rd_regs()->window);
|
||||
RD_WindowState *ws = rd_window_state_from_cfg(window_cfg);
|
||||
F32 dpi = os_dpi_from_window(ws->os);
|
||||
result *= (dpi / 96.f);
|
||||
}
|
||||
return result;
|
||||
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
F32 result = 0;
|
||||
RD_Cfg *wcfg = rd_cfg_from_handle(rd_regs()->window);
|
||||
RD_WindowState *ws = rd_window_state_from_cfg(wcfg);
|
||||
@@ -10146,6 +10205,7 @@ rd_font_size_from_slot(RD_FontSlot slot)
|
||||
}break;
|
||||
}
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
|
||||
internal FNT_RasterFlags
|
||||
@@ -11247,6 +11307,19 @@ rd_init(CmdLine *cmdln)
|
||||
RD_Cfg *transient = rd_cfg_new(rd_state->root_cfg, str8_lit("transient"));
|
||||
}
|
||||
|
||||
// rjf: set up window cache
|
||||
{
|
||||
rd_state->window_state_slots_count = 64;
|
||||
rd_state->window_state_slots = push_array(arena, RD_WindowStateSlot, rd_state->window_state_slots_count);
|
||||
rd_state->first_window_state = rd_state->last_window_state = &rd_nil_window_state;
|
||||
}
|
||||
|
||||
// rjf: set up view cache
|
||||
{
|
||||
rd_state->view_state_slots_count = 4096;
|
||||
rd_state->view_state_slots = push_array(arena, RD_ViewStateSlot, rd_state->view_state_slots_count);
|
||||
}
|
||||
|
||||
// rjf: set up user / project paths
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
@@ -11452,7 +11525,7 @@ rd_frame(void)
|
||||
for(RD_WindowState *ws = rd_state->window_state_slots[slot_idx].first, *next; ws != 0; ws = next)
|
||||
{
|
||||
next = ws->hash_next;
|
||||
if(ws->last_frame_index_touched+1 < rd_state->frame_index)
|
||||
if(ws->last_frame_index_touched+2 < rd_state->frame_index)
|
||||
{
|
||||
ui_state_release(ws->ui);
|
||||
r_window_unequip(ws->os, ws->r);
|
||||
@@ -11463,7 +11536,7 @@ rd_frame(void)
|
||||
arena_release(ws->hover_eval_arena);
|
||||
arena_release(ws->autocomp_lister_params_arena);
|
||||
arena_release(ws->arena);
|
||||
DLLRemove_NP(rd_state->first_window_state, rd_state->last_window_state, ws, order_next, order_prev);
|
||||
DLLRemove_NPZ(&rd_nil_window_state, rd_state->first_window_state, rd_state->last_window_state, ws, order_next, order_prev);
|
||||
DLLRemove_NP(rd_state->window_state_slots[slot_idx].first, rd_state->window_state_slots[slot_idx].last, ws, hash_next, hash_prev);
|
||||
SLLStackPush_N(rd_state->free_window_state, ws, order_next);
|
||||
}
|
||||
@@ -11481,13 +11554,14 @@ rd_frame(void)
|
||||
for(RD_ViewState *vs = rd_state->view_state_slots[slot_idx].first, *next; vs != 0; vs = next)
|
||||
{
|
||||
next = vs->hash_next;
|
||||
if(vs->last_frame_index_touched+1 < rd_state->frame_index)
|
||||
if(vs->last_frame_index_touched+2 < rd_state->frame_index)
|
||||
{
|
||||
for(RD_ArenaExt *ext = vs->first_arena_ext; ext != 0; ext = ext->next)
|
||||
{
|
||||
arena_release(ext->arena);
|
||||
}
|
||||
arena_release(vs->arena);
|
||||
SLLStackPush_N(rd_state->free_view_state, vs, hash_next);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12068,7 +12142,6 @@ rd_frame(void)
|
||||
////////////////////////////
|
||||
//- rjf: process top-level graphical commands
|
||||
//
|
||||
B32 panel_reset_done = 0;
|
||||
if(depth == 0)
|
||||
{
|
||||
for(;rd_next_cmd(&cmd);) RD_RegsScope()
|
||||
@@ -14064,7 +14137,200 @@ rd_frame(void)
|
||||
case RD_CmdKind_ResetToDefaultPanels:
|
||||
case RD_CmdKind_ResetToCompactPanels:
|
||||
{
|
||||
panel_reset_done = 1;
|
||||
RD_Cfg *window = rd_cfg_from_handle(rd_regs()->window);
|
||||
RD_Cfg *panels = rd_cfg_child_from_string(window, str8_lit("panels"));
|
||||
RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, window);
|
||||
|
||||
//- rjf: define all of the "fixed" tabs we care about
|
||||
#define FixedTab_XList \
|
||||
X(watch)\
|
||||
X(locals)\
|
||||
X(regs)\
|
||||
X(globals)\
|
||||
X(tlocals)\
|
||||
X(types)\
|
||||
X(procs)\
|
||||
X(call_stack)\
|
||||
X(breakpoints)\
|
||||
X(watch_pins)\
|
||||
X(output)\
|
||||
X(targets)\
|
||||
X(scheduler)\
|
||||
X(modules)\
|
||||
X(disasm)\
|
||||
X(memory)\
|
||||
X(getting_started)
|
||||
#define X(name) RD_Cfg *name = &rd_nil_cfg;
|
||||
FixedTab_XList
|
||||
#undef X
|
||||
|
||||
//- rjf: find all the fixed tabs, and all text viewers
|
||||
RD_CfgList texts = {0};
|
||||
for(RD_PanelNode *panel = panel_tree.root;
|
||||
panel != &rd_nil_panel_node;
|
||||
panel = rd_panel_node_rec__depth_first_pre(panel_tree.root, panel).next)
|
||||
{
|
||||
for(RD_CfgNode *n = panel->tabs.first; n != 0; n = n->next)
|
||||
{
|
||||
RD_Cfg *tab = n->v;
|
||||
B32 need_unhook = 1;
|
||||
if(0){}
|
||||
#define X(name) else if(str8_match(tab->string, str8_lit(#name), 0)) {name = tab;}
|
||||
FixedTab_XList
|
||||
#undef X
|
||||
else if(str8_match(tab->string, str8_lit("text"), 0)) {rd_cfg_list_push(scratch.arena, &texts, tab);}
|
||||
else
|
||||
{
|
||||
need_unhook = 0;
|
||||
}
|
||||
if(need_unhook)
|
||||
{
|
||||
rd_cfg_unhook(panel->cfg, tab);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: release the old panel tree
|
||||
rd_cfg_release(panels);
|
||||
|
||||
//- rjf: allocate any missing tabs
|
||||
#define X(name) if(name == &rd_nil_cfg) {name = rd_cfg_alloc(); rd_cfg_equip_string(name, str8_lit(#name));}
|
||||
FixedTab_XList
|
||||
#undef X
|
||||
|
||||
//- rjf: eliminate all tab selections
|
||||
#define X(name) if(name != &rd_nil_cfg) {rd_cfg_release(rd_cfg_child_from_string(name, str8_lit("selected")));}
|
||||
FixedTab_XList
|
||||
#undef X
|
||||
for(RD_CfgNode *n = texts.first; n != 0; n = n->next)
|
||||
{
|
||||
rd_cfg_release(rd_cfg_child_from_string(n->v, str8_lit("selected")));
|
||||
}
|
||||
|
||||
//- rjf: create the panel root
|
||||
panels = rd_cfg_new(window, str8_lit("panels"));
|
||||
|
||||
//- rjf: rebuild the new panel tree
|
||||
switch(kind)
|
||||
{
|
||||
default:{}break;
|
||||
|
||||
//- rjf: (default layout)
|
||||
case RD_CmdKind_ResetToDefaultPanels:
|
||||
{
|
||||
// rjf: root split
|
||||
rd_cfg_child_from_string_or_alloc(window, str8_lit("split_x"));
|
||||
RD_Cfg *root_0 = rd_cfg_new(panels, str8_lit("0.85"));
|
||||
RD_Cfg *root_1 = rd_cfg_new(panels, str8_lit("0.15"));
|
||||
|
||||
// rjf: root_0 split
|
||||
RD_Cfg *root_0_0 = rd_cfg_new(root_0, str8_lit("0.80"));
|
||||
RD_Cfg *root_0_1 = rd_cfg_new(root_0, str8_lit("0.20"));
|
||||
|
||||
// rjf: root_1 split
|
||||
RD_Cfg *root_1_0 = rd_cfg_new(root_1, str8_lit("0.50"));
|
||||
RD_Cfg *root_1_1 = rd_cfg_new(root_1, str8_lit("0.50"));
|
||||
rd_cfg_insert_child(root_1_0, root_1_0->last, targets);
|
||||
rd_cfg_insert_child(root_1_1, root_1_1->last, scheduler);
|
||||
rd_cfg_new(targets, str8_lit("selected"));
|
||||
rd_cfg_new(scheduler, str8_lit("selected"));
|
||||
|
||||
// rjf: root 0_0 split
|
||||
RD_Cfg *root_0_0_0 = rd_cfg_new(root_0_0, str8_lit("0.25"));
|
||||
RD_Cfg *root_0_0_1 = rd_cfg_new(root_0_0, str8_lit("0.75"));
|
||||
|
||||
// rjf: root_0_0_0 split
|
||||
RD_Cfg *root_0_0_0_0 = rd_cfg_new(root_0_0_0, str8_lit("0.50"));
|
||||
RD_Cfg *root_0_0_0_1 = rd_cfg_new(root_0_0_0, str8_lit("0.50"));
|
||||
rd_cfg_insert_child(root_0_0_0_0, root_0_0_0_0->last, disasm);
|
||||
rd_cfg_new(disasm, str8_lit("selected"));
|
||||
|
||||
// rjf: root_0_1 split
|
||||
RD_Cfg *root_0_1_0 = rd_cfg_new(root_0_1, str8_lit("0.60"));
|
||||
RD_Cfg *root_0_1_1 = rd_cfg_new(root_0_1, str8_lit("0.40"));
|
||||
rd_cfg_insert_child(root_0_1_0, root_0_1_0->last, watch);
|
||||
rd_cfg_insert_child(root_0_1_0, root_0_1_0->last, locals);
|
||||
rd_cfg_insert_child(root_0_1_0, root_0_1_0->last, regs);
|
||||
rd_cfg_insert_child(root_0_1_0, root_0_1_0->last, globals);
|
||||
rd_cfg_insert_child(root_0_1_0, root_0_1_0->last, tlocals);
|
||||
rd_cfg_insert_child(root_0_1_0, root_0_1_0->last, types);
|
||||
rd_cfg_insert_child(root_0_1_0, root_0_1_0->last, procs);
|
||||
rd_cfg_new(watch, str8_lit("selected"));
|
||||
rd_cfg_new(root_0_1_0, str8_lit("tabs_on_bottom"));
|
||||
rd_cfg_insert_child(root_0_1_1, root_0_1_1->last, call_stack);
|
||||
rd_cfg_insert_child(root_0_1_1, root_0_1_1->last, modules);
|
||||
rd_cfg_new(call_stack, str8_lit("selected"));
|
||||
rd_cfg_new(root_0_1_1, str8_lit("tabs_on_bottom"));
|
||||
|
||||
// rjf: fill main panel with getting started, OR all collected code views
|
||||
RD_Cfg *main_panel = root_0_0_1;
|
||||
if(getting_started != &rd_nil_cfg)
|
||||
{
|
||||
rd_cfg_insert_child(main_panel, main_panel->last, getting_started);
|
||||
rd_cfg_new(getting_started, str8_lit("selected"));
|
||||
}
|
||||
else if(texts.first)
|
||||
{
|
||||
rd_cfg_new(texts.first->v, str8_lit("selected"));
|
||||
}
|
||||
for(RD_CfgNode *n = texts.first; n != 0; n = n->next)
|
||||
{
|
||||
rd_cfg_insert_child(main_panel, main_panel->last, n->v);
|
||||
}
|
||||
|
||||
// rjf: set main panel as selected
|
||||
rd_cfg_new(main_panel, str8_lit("selected"));
|
||||
}break;
|
||||
|
||||
//- rjf: (compact layout)
|
||||
case RD_CmdKind_ResetToCompactPanels:
|
||||
{
|
||||
// rjf: root split
|
||||
rd_cfg_child_from_string_or_alloc(window, str8_lit("split_x"));
|
||||
RD_Cfg *root_0 = rd_cfg_new(panels, str8_lit("0.25"));
|
||||
RD_Cfg *root_1 = rd_cfg_new(panels, str8_lit("0.75"));
|
||||
|
||||
// rjf: root_0 split
|
||||
RD_Cfg *root_0_0 = rd_cfg_new(root_0, str8_lit("0.25"));
|
||||
RD_Cfg *root_0_1 = rd_cfg_new(root_0, str8_lit("0.25"));
|
||||
RD_Cfg *root_0_2 = rd_cfg_new(root_0, str8_lit("0.25"));
|
||||
RD_Cfg *root_0_3 = rd_cfg_new(root_0, str8_lit("0.25"));
|
||||
rd_cfg_insert_child(root_0_0, root_0_0->last, watch);
|
||||
rd_cfg_insert_child(root_0_0, root_0_0->last, types);
|
||||
rd_cfg_new(watch, str8_lit("selected"));
|
||||
rd_cfg_insert_child(root_0_1, root_0_1->last, scheduler);
|
||||
rd_cfg_insert_child(root_0_1, root_0_1->last, targets);
|
||||
rd_cfg_insert_child(root_0_1, root_0_1->last, breakpoints);
|
||||
rd_cfg_insert_child(root_0_1, root_0_1->last, watch_pins);
|
||||
rd_cfg_new(scheduler, str8_lit("selected"));
|
||||
rd_cfg_insert_child(root_0_2, root_0_2->last, disasm);
|
||||
rd_cfg_insert_child(root_0_2, root_0_2->last, output);
|
||||
rd_cfg_new(disasm, str8_lit("selected"));
|
||||
rd_cfg_insert_child(root_0_3, root_0_3->last, call_stack);
|
||||
rd_cfg_insert_child(root_0_3, root_0_3->last, modules);
|
||||
rd_cfg_new(call_stack, str8_lit("selected"));
|
||||
|
||||
// rjf: fill main panel with getting started, OR all collected code views
|
||||
RD_Cfg *main_panel = root_1;
|
||||
if(getting_started != &rd_nil_cfg)
|
||||
{
|
||||
rd_cfg_insert_child(main_panel, main_panel->last, getting_started);
|
||||
rd_cfg_new(getting_started, str8_lit("selected"));
|
||||
}
|
||||
else if(texts.first)
|
||||
{
|
||||
rd_cfg_new(texts.first->v, str8_lit("selected"));
|
||||
}
|
||||
for(RD_CfgNode *n = texts.first; n != 0; n = n->next)
|
||||
{
|
||||
rd_cfg_insert_child(main_panel, main_panel->last, n->v);
|
||||
}
|
||||
|
||||
// rjf: set main panel as selected
|
||||
rd_cfg_new(main_panel, str8_lit("selected"));
|
||||
}break;
|
||||
}
|
||||
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
RD_Window *ws = rd_window_from_handle(rd_regs()->window);
|
||||
|
||||
@@ -16639,26 +16905,24 @@ rd_frame(void)
|
||||
//
|
||||
{
|
||||
dr_begin_frame();
|
||||
for EachIndex(slot_idx, rd_state->window_state_slots_count)
|
||||
RD_CfgList windows = rd_cfg_top_level_list_from_string(scratch.arena, str8_lit("window"));
|
||||
for(RD_CfgNode *n = windows.first; n != 0; n = n->next)
|
||||
{
|
||||
for(RD_WindowState *w = rd_state->first_window_state;
|
||||
w != &rd_nil_window_state;
|
||||
w = w->order_next)
|
||||
RD_Cfg *window = n->v;
|
||||
RD_WindowState *w = rd_window_state_from_cfg(window);
|
||||
B32 window_is_focused = os_window_is_focused(w->os);
|
||||
if(window_is_focused)
|
||||
{
|
||||
B32 window_is_focused = os_window_is_focused(w->os);
|
||||
if(window_is_focused)
|
||||
{
|
||||
rd_state->last_focused_window = w->cfg_handle;
|
||||
}
|
||||
rd_push_regs();
|
||||
rd_regs()->window = w->cfg_handle;
|
||||
rd_window_frame();
|
||||
MemoryZeroStruct(&w->ui_events);
|
||||
RD_Regs *window_regs = rd_pop_regs();
|
||||
if(rd_handle_match(rd_state->last_focused_window, w->cfg_handle))
|
||||
{
|
||||
MemoryCopyStruct(rd_regs(), window_regs);
|
||||
}
|
||||
rd_state->last_focused_window = w->cfg_handle;
|
||||
}
|
||||
rd_push_regs();
|
||||
rd_regs()->window = w->cfg_handle;
|
||||
rd_window_frame();
|
||||
MemoryZeroStruct(&w->ui_events);
|
||||
RD_Regs *window_regs = rd_pop_regs();
|
||||
if(rd_handle_match(rd_state->last_focused_window, w->cfg_handle))
|
||||
{
|
||||
MemoryCopyStruct(rd_regs(), window_regs);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -933,6 +933,7 @@ read_only global RD_PanelNode rd_nil_panel_node =
|
||||
&rd_nil_panel_node,
|
||||
0,
|
||||
&rd_nil_cfg,
|
||||
.selected_tab = &rd_nil_cfg,
|
||||
};
|
||||
|
||||
read_only global RD_Entity rd_nil_entity =
|
||||
|
||||
+13
-10
@@ -750,29 +750,32 @@ entry_point(CmdLine *cmd_line)
|
||||
if(msg.size != 0)
|
||||
{
|
||||
log_infof("ipc_msg: \"%S\"", msg);
|
||||
RD_Window *dst_window = rd_state->first_window;
|
||||
for(RD_Window *window = dst_window; window != 0; window = window->next)
|
||||
RD_WindowState *dst_ws = rd_state->first_window_state;
|
||||
for(RD_WindowState *ws = dst_ws; ws != &rd_nil_window_state; ws = ws->order_next)
|
||||
{
|
||||
if(os_window_is_focused(window->os))
|
||||
if(os_window_is_focused(ws->os))
|
||||
{
|
||||
dst_window = window;
|
||||
dst_ws = ws;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(dst_window != 0)
|
||||
if(dst_ws != &rd_nil_window_state)
|
||||
{
|
||||
dst_window->window_temporarily_focused_ipc = 1;
|
||||
dst_ws->window_temporarily_focused_ipc = 1;
|
||||
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));
|
||||
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 != rd_window_from_handle(rd_regs()->window))
|
||||
if(!rd_handle_match(dst_ws->cfg_handle, rd_regs()->window))
|
||||
{
|
||||
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;
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
RD_PanelTree panel_tree = rd_panel_tree_from_cfg(scratch.arena, rd_cfg_from_handle(dst_ws->cfg_handle));
|
||||
rd_regs()->window = dst_ws->cfg_handle;
|
||||
rd_regs()->panel = rd_handle_from_cfg(panel_tree.focused->cfg);
|
||||
rd_regs()->view = rd_handle_from_cfg(panel_tree.focused->selected_tab);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
rd_regs_fill_slot_from_string(cmd_kind_info->query.slot, cmd_args_string);
|
||||
rd_push_cmd(cmd_kind_name_string, rd_regs());
|
||||
|
||||
+35
-24
@@ -5106,9 +5106,11 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(ctrl_entity_lister)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
RD_Window *window = rd_window_from_handle(rd_regs()->window);
|
||||
RD_CmdKindInfo *cmd_kind_info = rd_cmd_kind_info_from_string(window->query_cmd_name);
|
||||
CTRL_EntityKind entity_kind = cmd_kind_info->query.ctrl_entity_kind;
|
||||
#endif
|
||||
CTRL_EntityKind entity_kind = CTRL_EntityKind_Null; // cmd_kind_info->query.ctrl_entity_kind;
|
||||
F32 row_height_px = floor_f32(ui_top_font_size()*2.5f);
|
||||
F32 scroll_bar_dim = floor_f32(ui_top_font_size()*1.5f);
|
||||
|
||||
@@ -5779,6 +5781,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(pending_file)
|
||||
}
|
||||
|
||||
//- rjf: if file is ready, move params tree to scratch for new command
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
MD_Node *params_copy = &md_nil_node;
|
||||
if(file_is_ready)
|
||||
{
|
||||
@@ -5793,6 +5796,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(pending_file)
|
||||
RD_View *view = rd_view_from_handle(rd_regs()->view);
|
||||
rd_view_equip_spec(view, view_rule_info, query, params_copy);
|
||||
}
|
||||
#endif
|
||||
|
||||
//- rjf: if entity is ready, but we have no viewer for it, then just close this tab
|
||||
if(file_is_ready && viewer_kind == RD_ViewRuleKind_Null)
|
||||
@@ -5870,18 +5874,20 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(text)
|
||||
rd_regs()->file_path = path;
|
||||
rd_regs()->vaddr = 0;
|
||||
rd_regs()->prefer_disasm = 0;
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
rd_regs()->cursor.line = rd_value_from_params_key(params, str8_lit("cursor_line")).s64;
|
||||
rd_regs()->cursor.column = rd_value_from_params_key(params, str8_lit("cursor_column")).s64;
|
||||
rd_regs()->mark.line = rd_value_from_params_key(params, str8_lit("mark_line")).s64;
|
||||
rd_regs()->mark.column = rd_value_from_params_key(params, str8_lit("mark_column")).s64;
|
||||
#endif
|
||||
if(rd_regs()->cursor.line == 0) { rd_regs()->cursor.line = 1; }
|
||||
if(rd_regs()->cursor.column == 0) { rd_regs()->cursor.column = 1; }
|
||||
if(rd_regs()->mark.line == 0) { rd_regs()->mark.line = 1; }
|
||||
if(rd_regs()->mark.column == 0) { rd_regs()->mark.column = 1; }
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
Rng1U64 range = rd_range_from_eval_params(eval, params);
|
||||
Rng1U64 range = {0}; // TODO(rjf): @cfg rd_range_from_eval_params(eval, params);
|
||||
rd_regs()->text_key = rd_key_from_eval_space_range(eval.space, range, 1);
|
||||
rd_regs()->lang_kind = rd_lang_kind_from_eval_params(eval, params);
|
||||
rd_regs()->lang_kind = TXT_LangKind_Null; // TODO(rjf): @cfg rd_lang_kind_from_eval_params(eval, params);
|
||||
U128 hash = {0};
|
||||
TXT_TextInfo info = txt_text_info_from_key_lang(txt_scope, rd_regs()->text_key, rd_regs()->lang_kind, &hash);
|
||||
String8 data = hs_data_from_hash(hs_scope, hash);
|
||||
@@ -6151,8 +6157,8 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(disasm)
|
||||
{
|
||||
space = auto_space;
|
||||
}
|
||||
Rng1U64 range = rd_range_from_eval_params(eval, params);
|
||||
Arch arch = rd_arch_from_eval_params(eval, params);
|
||||
Rng1U64 range = {0}; // TODO(rjf): @cfg rd_range_from_eval_params(eval, params);
|
||||
Arch arch = Arch_Null; // TODO(rjf): @cfg rd_arch_from_eval_params(eval, params);
|
||||
CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(space);
|
||||
CTRL_Entity *dasm_module = &ctrl_entity_nil;
|
||||
DI_Key dbgi_key = {0};
|
||||
@@ -6301,10 +6307,12 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(output)
|
||||
//
|
||||
rd_regs()->file_path = str8_zero();
|
||||
rd_regs()->vaddr = 0;
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
rd_regs()->cursor.line = rd_value_from_params_key(params, str8_lit("cursor_line")).s64;
|
||||
rd_regs()->cursor.column = rd_value_from_params_key(params, str8_lit("cursor_column")).s64;
|
||||
rd_regs()->mark.line = rd_value_from_params_key(params, str8_lit("mark_line")).s64;
|
||||
rd_regs()->mark.column = rd_value_from_params_key(params, str8_lit("mark_column")).s64;
|
||||
#endif
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: unpack text info
|
||||
@@ -6400,7 +6408,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
||||
//- rjf: unpack parameterization info
|
||||
//
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
Rng1U64 space_range = rd_range_from_eval_params(eval, params);
|
||||
Rng1U64 space_range = {0}; // TODO(rjf): @cfg rd_range_from_eval_params(eval, params);
|
||||
if(eval.space.kind == 0)
|
||||
{
|
||||
eval.space = rd_eval_space_from_ctrl_entity(ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->process), RD_EvalSpaceKind_CtrlEntity);
|
||||
@@ -6410,10 +6418,10 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(memory)
|
||||
space_range = r1u64(0, 0x7FFFFFFFFFFFull);
|
||||
}
|
||||
}
|
||||
U64 cursor = rd_value_from_params_key(params, str8_lit("cursor_vaddr")).u64;
|
||||
U64 mark = rd_value_from_params_key(params, str8_lit("mark_vaddr")).u64;
|
||||
U64 bytes_per_cell = rd_value_from_params_key(params, str8_lit("bytes_per_cell")).u64;
|
||||
U64 num_columns = rd_value_from_params_key(params, str8_lit("num_columns")).u64;
|
||||
U64 cursor = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("cursor_vaddr")).u64;
|
||||
U64 mark = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("mark_vaddr")).u64;
|
||||
U64 bytes_per_cell = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("bytes_per_cell")).u64;
|
||||
U64 num_columns = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("num_columns")).u64;
|
||||
if(num_columns == 0)
|
||||
{
|
||||
num_columns = 16;
|
||||
@@ -7326,8 +7334,8 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(bitmap)
|
||||
//- rjf: evaluate expression
|
||||
//
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
Vec2S32 dim = rd_dim2s32_from_eval_params(eval, params);
|
||||
R_Tex2DFormat fmt = rd_tex2dformat_from_eval_params(eval, params);
|
||||
Vec2S32 dim = {0}; // TODO(rjf): @cfg rd_dim2s32_from_eval_params(eval, params);
|
||||
R_Tex2DFormat fmt = R_Tex2DFormat_RGBA8; // TODO(rjf): @cfg rd_tex2dformat_from_eval_params(eval, params);
|
||||
U64 base_offset = rd_base_offset_from_eval(eval);
|
||||
U64 expected_size = dim.x*dim.y*r_tex2d_format_bytes_per_pixel_table[fmt];
|
||||
Rng1U64 offset_range = r1u64(base_offset, base_offset + expected_size);
|
||||
@@ -7335,11 +7343,11 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(bitmap)
|
||||
//////////////////////////////
|
||||
//- rjf: unpack params
|
||||
//
|
||||
F32 zoom = rd_value_from_params_key(params, str8_lit("zoom")).f32;
|
||||
F32 zoom = 1.f; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("zoom")).f32;
|
||||
Vec2F32 view_center_pos =
|
||||
{
|
||||
rd_value_from_params_key(params, str8_lit("x")).f32,
|
||||
rd_value_from_params_key(params, str8_lit("y")).f32,
|
||||
0.f, // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("x")).f32,
|
||||
0.f, // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("y")).f32,
|
||||
};
|
||||
if(zoom == 0)
|
||||
{
|
||||
@@ -7570,7 +7578,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(color_rgba)
|
||||
Vec2F32 dim = dim_2f32(rect);
|
||||
F32 padding = ui_top_font_size()*3.f;
|
||||
E_Eval eval = e_eval_from_string(scratch.arena, string);
|
||||
Vec4F32 rgba = rd_rgba_from_eval_params(eval, params);
|
||||
Vec4F32 rgba = {0}; // TODO(rjf): @cfg rd_rgba_from_eval_params(eval, params);
|
||||
Vec4F32 hsva = hsva_from_rgba(rgba);
|
||||
|
||||
//- rjf: too small -> just show components
|
||||
@@ -7734,12 +7742,12 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(geo3d)
|
||||
//////////////////////////////
|
||||
//- rjf: unpack parameters
|
||||
//
|
||||
U64 count = rd_value_from_params_key(params, str8_lit("count")).u64;
|
||||
U64 vtx_base_off = rd_value_from_params_key(params, str8_lit("vtx")).u64;
|
||||
U64 vtx_size = rd_value_from_params_key(params, str8_lit("vtx_size")).u64;
|
||||
F32 yaw_target = rd_value_from_params_key(params, str8_lit("yaw")).f32;
|
||||
F32 pitch_target = rd_value_from_params_key(params, str8_lit("pitch")).f32;
|
||||
F32 zoom_target = rd_value_from_params_key(params, str8_lit("zoom")).f32;
|
||||
U64 count = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("count")).u64;
|
||||
U64 vtx_base_off = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("vtx")).u64;
|
||||
U64 vtx_size = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("vtx_size")).u64;
|
||||
F32 yaw_target = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("yaw")).f32;
|
||||
F32 pitch_target = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("pitch")).f32;
|
||||
F32 zoom_target = 0; // TODO(rjf): @cfg rd_value_from_params_key(params, str8_lit("zoom")).f32;
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: evaluate & unpack expression
|
||||
@@ -8056,7 +8064,7 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(settings)
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
F32 row_height_px = floor_f32(ui_top_font_size()*2.5f);
|
||||
String8 query = string;
|
||||
RD_Window *window = rd_window_from_handle(rd_regs()->window);
|
||||
RD_Cfg *window = rd_cfg_from_handle(rd_regs()->window);
|
||||
UI_ScrollPt2 scroll_pos = rd_view_scroll_pos();
|
||||
|
||||
//////////////////////////////
|
||||
@@ -8520,7 +8528,10 @@ RD_VIEW_RULE_UI_FUNCTION_DEF(settings)
|
||||
{
|
||||
rgba = rd_rgba_from_theme_color(item->color);
|
||||
}break;
|
||||
case RD_SettingsItemKind_WindowSetting: {val_table = &window->setting_vals[0];}goto setting;
|
||||
case RD_SettingsItemKind_WindowSetting:
|
||||
{
|
||||
// TODO(rjf): @cfg val_table = &window->setting_vals[0];
|
||||
}goto setting;
|
||||
case RD_SettingsItemKind_GlobalSetting:{}goto setting;
|
||||
setting:;
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user