mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-08 14:58:08 +00:00
more block tree / eval visualization integration work with watch views
This commit is contained in:
@@ -809,6 +809,10 @@ internal EV_Key
|
||||
ev2_key_from_num(EV2_BlockRangeList *block_ranges, U64 num)
|
||||
{
|
||||
EV_Key key = {0};
|
||||
if(block_ranges->first)
|
||||
{
|
||||
key = ev_key_make(ev_hash_from_key(ev_key_root()), 1);
|
||||
}
|
||||
U64 base_num = 1;
|
||||
for(EV2_BlockRangeNode *n = block_ranges->first; n != 0; n = n->next)
|
||||
{
|
||||
@@ -830,7 +834,7 @@ ev2_key_from_num(EV2_BlockRangeList *block_ranges, U64 num)
|
||||
internal U64
|
||||
ev2_num_from_key(EV2_BlockRangeList *block_ranges, EV_Key key)
|
||||
{
|
||||
U64 result = 0;
|
||||
U64 result = 1;
|
||||
U64 base_num = 1;
|
||||
for(EV2_BlockRangeNode *n = block_ranges->first; n != 0; n = n->next)
|
||||
{
|
||||
|
||||
+167
-134
@@ -797,8 +797,8 @@ rd_watch_view_point_from_tbl(EV2_BlockRangeList *block_ranges, Vec2S64 tbl)
|
||||
{
|
||||
RD_WatchViewPoint pt = zero_struct;
|
||||
pt.x = tbl.x;
|
||||
pt.key = ev2_key_from_num(block_ranges, tbl.y);
|
||||
pt.parent_key = ev2_block_range_from_num(block_ranges, tbl.y).block->key;
|
||||
pt.key = ev2_key_from_num(block_ranges, (U64)tbl.y + 1);
|
||||
pt.parent_key = ev2_block_range_from_num(block_ranges, (U64)tbl.y + 1).block->key;
|
||||
return pt;
|
||||
}
|
||||
|
||||
@@ -807,7 +807,7 @@ rd_tbl_from_watch_view_point(EV2_BlockRangeList *block_ranges, RD_WatchViewPoint
|
||||
{
|
||||
Vec2S64 tbl = {0};
|
||||
tbl.x = pt.x;
|
||||
tbl.y = ev2_num_from_key(block_ranges, pt.key);
|
||||
tbl.y = (S64)ev2_num_from_key(block_ranges, pt.key) - 1;
|
||||
return tbl;
|
||||
}
|
||||
|
||||
@@ -1237,8 +1237,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
ewv->text_edit_state_slots_count = u64_up_to_pow2(selection_dim.y+1);
|
||||
ewv->text_edit_state_slots_count = Max(ewv->text_edit_state_slots_count, 64);
|
||||
ewv->text_edit_state_slots = push_array(ewv->text_edit_arena, RD_WatchViewTextEditState*, ewv->text_edit_state_slots_count);
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y-1)+1));
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y)+1));
|
||||
EV2_Row *row = rows.first;
|
||||
for(S64 y = selection_tbl.min.y; y <= selection_tbl.max.y; y += 1, row = row->next)
|
||||
{
|
||||
@@ -1268,8 +1268,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
//
|
||||
if(!ewv->text_editing && evt->slot == UI_EventActionSlot_Accept)
|
||||
{
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y-1)+1));
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y)+1));
|
||||
EV2_Row *row = rows.first;
|
||||
for(S64 y = selection_tbl.min.y; y <= selection_tbl.max.y && row != 0; y += 1, row = row->next)
|
||||
{
|
||||
@@ -1448,8 +1448,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
case RD_WatchViewColumnKind_Value:
|
||||
if(editing_complete && evt->slot != UI_EventActionSlot_Cancel)
|
||||
{
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, y-1)+1));
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, y),
|
||||
ui_scroll_list_row_from_item(&row_blocks, y)+1));
|
||||
B32 success = 0;
|
||||
if(rows.first != 0)
|
||||
{
|
||||
@@ -1506,8 +1506,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
{
|
||||
taken = 1;
|
||||
String8List strs = {0};
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y-1),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y-1)+1));
|
||||
EV2_WindowedRowList rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(ui_scroll_list_row_from_item(&row_blocks, selection_tbl.min.y),
|
||||
ui_scroll_list_row_from_item(&row_blocks, selection_tbl.max.y)+1));
|
||||
EV2_Row *row = rows.first;
|
||||
for(S64 y = selection_tbl.min.y; y <= selection_tbl.max.y && row != 0; y += 1, row = row->next)
|
||||
{
|
||||
@@ -1602,7 +1602,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
if(!ewv->text_editing && !(evt->flags & UI_EventFlag_Delete) && !(evt->flags & UI_EventFlag_Reorder))
|
||||
{
|
||||
B32 cursor_tbl_min_is_empty_selection[Axis2_COUNT] = {0, 1};
|
||||
Rng2S64 cursor_tbl_range = r2s64(v2s64(0, 0), v2s64(ewv->column_count-1, block_tree.total_row_count));
|
||||
Rng2S64 cursor_tbl_range = r2s64(v2s64(0, 0), v2s64(ewv->column_count-1, block_tree.total_row_count-1));
|
||||
Vec2S32 delta = evt->delta_2s32;
|
||||
if(evt->flags & UI_EventFlag_PickSelectSide && !MemoryMatchStruct(&selection_tbl.min, &selection_tbl.max))
|
||||
{
|
||||
@@ -1764,7 +1764,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
scroll_list_params.dim_px = dim_2f32(rect);
|
||||
scroll_list_params.cursor_range = r2s64(v2s64(0, 0), v2s64(3, block_tree.total_item_count));
|
||||
scroll_list_params.item_range = r1s64(0, block_tree.total_row_count);
|
||||
scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 1;
|
||||
scroll_list_params.cursor_min_is_empty_selection[Axis2_Y] = 0;
|
||||
scroll_list_params.row_blocks = row_blocks;
|
||||
}
|
||||
UI_BoxFlags disabled_flags = ui_top_flags();
|
||||
@@ -1785,9 +1785,146 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
Vec2F32 scroll_list_view_off_px = ui_top_parent()->parent->view_off;
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: build table header
|
||||
//- rjf: viz blocks -> rows
|
||||
//
|
||||
if(0) UI_TableVector UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
|
||||
EV2_WindowedRowList rows = {0};
|
||||
{
|
||||
rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(visible_row_rng.min, visible_row_rng.max+1));
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: build table
|
||||
//
|
||||
ProfScope("build table")
|
||||
{
|
||||
U64 global_row_idx = rows.count_before_semantic;
|
||||
U64 global_row_num = global_row_idx+1;
|
||||
for(EV2_Row *row = rows.first; row != 0; row = row->next, global_row_idx += 1, global_row_num += 1)
|
||||
{
|
||||
////////////////////////
|
||||
//- rjf: unpack row info
|
||||
//
|
||||
U64 row_hash = ev_hash_from_key(row->key);
|
||||
U64 row_depth = ev2_depth_from_block(row->block);
|
||||
if(row_depth > 0)
|
||||
{
|
||||
row_depth -= 1;
|
||||
}
|
||||
B32 row_selected = (selection_tbl.min.y <= global_row_idx && global_row_idx <= selection_tbl.max.y);
|
||||
B32 row_expanded = ev_expansion_from_key(eval_view, row->key);
|
||||
E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr);
|
||||
E_Type *row_type = e_type_from_key(scratch.arena, row_eval.type_key);
|
||||
B32 row_is_expandable = ev2_row_is_expandable(row);
|
||||
B32 row_is_editable = ev2_row_is_editable(row);
|
||||
B32 next_row_expanded = row_expanded;
|
||||
RD_ViewRuleInfo *ui_view_rule_info = rd_view_rule_info_from_string(row->block->expand_view_rule_info->string);
|
||||
MD_Node *ui_view_rule_params_root = row->block->expand_view_rule_params;
|
||||
if(ui_view_rule_info->ui == 0)
|
||||
{
|
||||
ui_view_rule_info = &rd_nil_view_rule_info;
|
||||
ui_view_rule_params_root = &md_nil_node;
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
//- rjf: choose kind of row
|
||||
//
|
||||
typedef enum RowKind
|
||||
{
|
||||
RowKind_Normal,
|
||||
RowKind_Header,
|
||||
RowKind_Canvas,
|
||||
}
|
||||
RowKind;
|
||||
RowKind row_kind = RowKind_Normal;
|
||||
if(ev_key_match(row->block->key, ev_key_root()))
|
||||
{
|
||||
row_kind = RowKind_Header;
|
||||
}
|
||||
else if(ui_view_rule_info != &rd_nil_view_rule_info && ui_view_rule_info->ui != 0)
|
||||
{
|
||||
row_kind = RowKind_Canvas;
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
//- rjf: determine if row's data is fresh and/or bad
|
||||
//
|
||||
B32 row_is_fresh = 0;
|
||||
B32 row_is_bad = 0;
|
||||
switch(row_eval.mode)
|
||||
{
|
||||
default:{}break;
|
||||
case E_Mode_Offset:
|
||||
{
|
||||
CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(row_eval.space);
|
||||
if(space_entity->kind == CTRL_EntityKind_Process)
|
||||
{
|
||||
U64 size = e_type_byte_size_from_key(row_eval.type_key);
|
||||
size = Min(size, 64);
|
||||
Rng1U64 vaddr_rng = r1u64(row_eval.value.u64, row_eval.value.u64+size);
|
||||
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, space_entity->handle, vaddr_rng, 0);
|
||||
for(U64 idx = 0; idx < (slice.data.size+63)/64; idx += 1)
|
||||
{
|
||||
if(slice.byte_changed_flags[idx] != 0)
|
||||
{
|
||||
row_is_fresh = 1;
|
||||
}
|
||||
if(slice.byte_bad_flags[idx] != 0)
|
||||
{
|
||||
row_is_bad = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}break;
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
//- rjf: determine row's flags & color palette
|
||||
//
|
||||
UI_BoxFlags row_flags = 0;
|
||||
UI_Palette *palette = ui_top_palette();
|
||||
{
|
||||
if(row_is_fresh)
|
||||
{
|
||||
palette = ui_build_palette(ui_top_palette(), .background = rd_rgba_from_theme_color(RD_ThemeColor_HighlightOverlay));
|
||||
row_flags |= UI_BoxFlag_DrawBackground;
|
||||
}
|
||||
else if(global_row_idx & 1)
|
||||
{
|
||||
palette = ui_build_palette(ui_top_palette(), .background = rd_rgba_from_theme_color(RD_ThemeColor_BaseBackgroundAlt));
|
||||
row_flags |= UI_BoxFlag_DrawBackground;
|
||||
}
|
||||
switch(row_kind)
|
||||
{
|
||||
default:{}break;
|
||||
case RowKind_Normal:{row_flags |= UI_BoxFlag_DisableFocusOverlay;}break;
|
||||
case RowKind_Header:{row_flags |= UI_BoxFlag_DrawSideBottom|UI_BoxFlag_DisableFocusOverlay;}break;
|
||||
case RowKind_Canvas:{row_flags |= UI_BoxFlag_Clip;}break;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
//- rjf: build row box
|
||||
//
|
||||
ui_set_next_palette(palette);
|
||||
ui_set_next_flags(disabled_flags);
|
||||
ui_set_next_pref_width(ui_pct(1, 0));
|
||||
ui_set_next_pref_height(ui_px(scroll_list_params.row_height_px*row->visual_size, 1.f));
|
||||
ui_set_next_focus_hot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off);
|
||||
UI_Box *row_box = ui_build_box_from_stringf(row_flags|(!row->next)*UI_BoxFlag_DrawSideBottom|UI_BoxFlag_Clickable, "row_%I64x", row_hash);
|
||||
ui_ts_vector_idx += 1;
|
||||
ui_ts_cell_idx = 0;
|
||||
|
||||
//////////////////////
|
||||
//- rjf: build row contents
|
||||
//
|
||||
UI_Parent(row_box) switch(row_kind)
|
||||
{
|
||||
////////////////////
|
||||
//- rjf: header row
|
||||
//
|
||||
case RowKind_Header:
|
||||
{
|
||||
UI_FlagsAdd(UI_BoxFlag_DrawTextWeak)
|
||||
{
|
||||
for(RD_WatchViewColumn *col = ewv->first_column; col != 0; col = col->next)
|
||||
UI_TableCell
|
||||
@@ -1853,122 +1990,14 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: viz blocks -> rows
|
||||
//
|
||||
EV2_WindowedRowList rows = {0};
|
||||
{
|
||||
rows = ev2_windowed_row_list_from_block_range_list(scratch.arena, eval_view, filter, &block_ranges, r1u64(visible_row_rng.min, visible_row_rng.max+1));
|
||||
}
|
||||
|
||||
////////////////////////////
|
||||
//- rjf: build table
|
||||
//
|
||||
ProfScope("build table")
|
||||
{
|
||||
U64 semantic_num = rows.count_before_semantic + 1;
|
||||
for(EV2_Row *row = rows.first; row != 0; row = row->next, semantic_num += 1)
|
||||
{
|
||||
////////////////////////
|
||||
//- rjf: unpack row info
|
||||
//
|
||||
U64 row_hash = ev_hash_from_key(row->key);
|
||||
U64 row_depth = ev2_depth_from_block(row->block);
|
||||
B32 row_selected = (selection_tbl.min.y <= semantic_num && semantic_num <= selection_tbl.max.y);
|
||||
B32 row_expanded = ev_expansion_from_key(eval_view, row->key);
|
||||
E_Eval row_eval = e_eval_from_expr(scratch.arena, row->expr);
|
||||
E_Type *row_type = e_type_from_key(scratch.arena, row_eval.type_key);
|
||||
B32 row_is_expandable = ev2_row_is_expandable(row);
|
||||
B32 row_is_editable = ev2_row_is_editable(row);
|
||||
B32 next_row_expanded = row_expanded;
|
||||
RD_ViewRuleInfo *ui_view_rule_info = rd_view_rule_info_from_string(row->block->expand_view_rule_info->string);
|
||||
MD_Node *ui_view_rule_params_root = row->block->expand_view_rule_params;
|
||||
if(ui_view_rule_info->ui == 0)
|
||||
{
|
||||
ui_view_rule_info = &rd_nil_view_rule_info;
|
||||
ui_view_rule_params_root = &md_nil_node;
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
//- rjf: determine if row's data is fresh and/or bad
|
||||
//
|
||||
B32 row_is_fresh = 0;
|
||||
B32 row_is_bad = 0;
|
||||
switch(row_eval.mode)
|
||||
{
|
||||
default:{}break;
|
||||
case E_Mode_Offset:
|
||||
{
|
||||
CTRL_Entity *space_entity = rd_ctrl_entity_from_eval_space(row_eval.space);
|
||||
if(space_entity->kind == CTRL_EntityKind_Process)
|
||||
{
|
||||
U64 size = e_type_byte_size_from_key(row_eval.type_key);
|
||||
size = Min(size, 64);
|
||||
Rng1U64 vaddr_rng = r1u64(row_eval.value.u64, row_eval.value.u64+size);
|
||||
CTRL_ProcessMemorySlice slice = ctrl_query_cached_data_from_process_vaddr_range(scratch.arena, space_entity->handle, vaddr_rng, 0);
|
||||
for(U64 idx = 0; idx < (slice.data.size+63)/64; idx += 1)
|
||||
{
|
||||
if(slice.byte_changed_flags[idx] != 0)
|
||||
{
|
||||
row_is_fresh = 1;
|
||||
}
|
||||
if(slice.byte_bad_flags[idx] != 0)
|
||||
{
|
||||
row_is_bad = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}break;
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
//- rjf: determine row's color palette
|
||||
////////////////////
|
||||
//- rjf: canvas row
|
||||
//
|
||||
UI_BoxFlags row_flags = 0;
|
||||
UI_Palette *palette = ui_top_palette();
|
||||
case RowKind_Canvas:
|
||||
UI_FocusHot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off)
|
||||
{
|
||||
if(row_is_fresh)
|
||||
{
|
||||
palette = ui_build_palette(ui_top_palette(), .background = rd_rgba_from_theme_color(RD_ThemeColor_HighlightOverlay));
|
||||
row_flags |= UI_BoxFlag_DrawBackground;
|
||||
}
|
||||
else if(semantic_num & 1)
|
||||
{
|
||||
palette = ui_build_palette(ui_top_palette(), .background = rd_rgba_from_theme_color(RD_ThemeColor_BaseBackgroundAlt));
|
||||
row_flags |= UI_BoxFlag_DrawBackground;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////
|
||||
//- rjf: build row box
|
||||
//
|
||||
ui_set_next_palette(palette);
|
||||
ui_set_next_flags(disabled_flags);
|
||||
ui_set_next_pref_width(ui_pct(1, 0));
|
||||
ui_set_next_pref_height(ui_px(scroll_list_params.row_height_px*row->visual_size, 1.f));
|
||||
ui_set_next_focus_hot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off);
|
||||
UI_Box *row_box = ui_build_box_from_stringf(row_flags|
|
||||
(!row->next) * UI_BoxFlag_DrawSideBottom|
|
||||
UI_BoxFlag_Clickable|
|
||||
((ui_view_rule_info == &rd_nil_view_rule_info) * UI_BoxFlag_DisableFocusOverlay)|
|
||||
((ui_view_rule_info != &rd_nil_view_rule_info) * UI_BoxFlag_Clip),
|
||||
"row_%I64x", row_hash);
|
||||
ui_ts_vector_idx += 1;
|
||||
ui_ts_cell_idx = 0;
|
||||
|
||||
////////////////////////
|
||||
//- rjf: canvas block row -> build singular row for "escape hatch" ui
|
||||
//
|
||||
B32 did_row_build = 0;
|
||||
if(!did_row_build && ui_view_rule_info != &rd_nil_view_rule_info)
|
||||
UI_Parent(row_box) UI_FocusHot(row_selected ? UI_FocusKind_On : UI_FocusKind_Off)
|
||||
{
|
||||
//- rjf: build ui hook row contents
|
||||
if(ui_view_rule_info != &rd_nil_view_rule_info && ui_view_rule_info->ui != 0)
|
||||
{
|
||||
did_row_build = 1;
|
||||
|
||||
//- rjf: unpack
|
||||
RD_WatchViewPoint pt = {0, row->block->key, row->key};
|
||||
RD_View *view = rd_view_from_handle(rd_regs()->view);
|
||||
@@ -2060,16 +2089,15 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
//- rjf: pop interaction registers
|
||||
rd_pop_regs();
|
||||
}
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
////////////////////////
|
||||
//- rjf: build regular row contents in all other cases
|
||||
////////////////////
|
||||
//- rjf: normal row
|
||||
//
|
||||
if(!did_row_build) UI_Parent(row_box) UI_HeightFill
|
||||
default:
|
||||
case RowKind_Normal:
|
||||
UI_HeightFill
|
||||
{
|
||||
did_row_build = 1;
|
||||
|
||||
//////////////////////
|
||||
//- rjf: draw start of cache lines in expansions
|
||||
//
|
||||
@@ -2223,12 +2251,14 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
}break;
|
||||
case RD_WatchViewColumnKind_FrameSelection:
|
||||
{
|
||||
#if 0 // TODO(rjf): @blocks
|
||||
if(semantic_num - 1 == rd_regs()->unwind_count - rd_regs()->inline_depth)
|
||||
{
|
||||
cell_icon = RD_IconKind_RightArrow;
|
||||
CTRL_Entity *thread = ctrl_entity_from_handle(d_state->ctrl_entity_store, rd_regs()->thread);
|
||||
cell_base_color = rd_rgba_from_ctrl_entity(thread);
|
||||
}
|
||||
#endif
|
||||
}break;
|
||||
}
|
||||
|
||||
@@ -2428,6 +2458,8 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
ui_labelf("Block Key: {0x%I64x, %I64u}", row->block->key.parent_hash, row->block->key.child_num);
|
||||
ui_labelf("Row Key: {0x%I64x, %I64u}", row->key.parent_hash, row->key.child_num);
|
||||
ui_labelf("Cursor Key: {0x%I64x, %I64u}", ewv->cursor.key.parent_hash, ewv->cursor.key.child_num);
|
||||
ui_spacer(ui_em(1.f, 1.f));
|
||||
ui_labelf("Cursor Table Coordinates: {%I64u, %I64u}", selection_tbl.min.x, selection_tbl.min.y);
|
||||
}
|
||||
|
||||
//- rjf: [DEV] hovering -> eval system tooltips
|
||||
@@ -2576,6 +2608,7 @@ rd_watch_view_build(RD_WatchViewState *ewv, RD_WatchViewFlags flags, String8 roo
|
||||
}
|
||||
}
|
||||
}
|
||||
}break;
|
||||
}
|
||||
|
||||
//////////////////////
|
||||
|
||||
Reference in New Issue
Block a user