diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 96fedb41..da44fd0d 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -1776,16 +1776,16 @@ ev_string_iter_next(Arena *arena, EV_StringIter *it, String8 *out_string) // rjf: read string data #define EV_STRING_ITER_STRING_BUFFER_CAPACITY 4096 - U64 string_memory_addr = ptr_data->value_eval.value.u64; U64 string_buffer_size = EV_STRING_ITER_STRING_BUFFER_CAPACITY; U8 *string_buffer = push_array(scratch.arena, U8, string_buffer_size); - if(type_kind == E_TypeKind_Array && ptr_data->value_eval.irtree.mode == E_Mode_Value) + if(type_kind == E_TypeKind_Array && eval.irtree.mode == E_Mode_Value) { - StaticAssert(sizeof(ptr_data->value_eval.value.u512.u8) <= EV_STRING_ITER_STRING_BUFFER_CAPACITY, ev_string_iter_value_string_buffer_size_check); - MemoryCopy(string_buffer, ptr_data->value_eval.value.u512.u8, sizeof(ptr_data->value_eval.value.u512.u8)); + StaticAssert(sizeof(eval.value.u512.u8) <= EV_STRING_ITER_STRING_BUFFER_CAPACITY, ev_string_iter_value_string_buffer_size_check); + MemoryCopy(string_buffer, eval.value.u512.u8, sizeof(eval.value.u512.u8)); } else { + U64 string_memory_addr = ptr_data->value_eval.value.u64; for(U64 try_size = string_buffer_size; try_size >= 16; try_size /= 2) { B32 read_good = e_space_read(eval.space, string_buffer, r1u64(string_memory_addr, string_memory_addr+try_size)); diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 4523b634..8111b70d 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -4834,6 +4834,9 @@ rd_view_ui(Rng2F32 rect) RD_CellParams cell_params = {0}; ProfScope("form cell build parameters") { + E_Type *block_type = e_type_from_key__cached(row->block->eval.irtree.type_key); + B32 cells_are_editable = !!(block_type->flags & E_TypeFlag_EditableChildren); + // rjf: set up base parameters cell_params.flags = (RD_CellFlag_KeyboardClickable|RD_CellFlag_NoBackground|RD_CellFlag_CodeContents); cell_params.depth = (cell->flags & RD_WatchCellFlag_Indented ? row_depth : 0); @@ -4857,17 +4860,30 @@ rd_view_ui(Rng2F32 rect) } // rjf: apply expander (or substitute space) - if(row_is_expandable && cell == row_info->cells.first) + if(!ewv->text_editing || !cell_selected) { - cell_params.flags |= RD_CellFlag_Expander; + if(row_is_expandable && cell == row_info->cells.first) + { + cell_params.flags |= RD_CellFlag_Expander; + } + else if(cells_are_editable && row_depth == !implicit_root && cell == row_info->cells.first) + { + cell_params.flags |= RD_CellFlag_ExpanderPlaceholder; + } + else if(row_depth != 0 && cell == row_info->cells.first) + { + cell_params.flags |= RD_CellFlag_ExpanderSpace; + } } - else if(row_depth == !implicit_root && cell == row_info->cells.first) + + // rjf: apply blank cell ghost text + if(row_info->cells.first == row_info->cells.last && + cells_are_editable && + row->eval.expr == &e_expr_nil) { - cell_params.flags |= RD_CellFlag_ExpanderSpace; - } - else if(row_depth != 0 && cell == row_info->cells.first) - { - cell_params.flags |= RD_CellFlag_ExpanderSpace; + ghost_text = str8_lit("Expression"); + is_non_code = (!cell_selected || !ewv->text_editing); + cell_params.flags &= ~(RD_CellFlag_Expander|RD_CellFlag_ExpanderSpace|RD_CellFlag_ExpanderPlaceholder); } // rjf: apply single-click-activation @@ -6629,6 +6645,7 @@ rd_window_frame(void) B32 pressed; B32 pressed_outside; }; + FloatingViewTask *autocomp_floating_view_task = 0; FloatingViewTask *hover_eval_floating_view_task = 0; FloatingViewTask *query_floating_view_task = 0; FloatingViewTask *first_floating_view_task = 0; @@ -6679,6 +6696,7 @@ rd_window_frame(void) { FloatingViewTask *t = push_array(scratch.arena, FloatingViewTask, 1); SLLQueuePush(first_floating_view_task, last_floating_view_task, t); + autocomp_floating_view_task = t; t->view = view; t->rect = rect; t->is_focused = 1; @@ -7085,6 +7103,28 @@ rd_window_frame(void) //- rjf: @window_ui_part do special handling of floating view interactions // { + //- rjf: autocompletion view early-closing rules + if(autocomp_floating_view_task) + { + B32 has_autocomplete_hint = 0; + B32 has_accept_operation = 0; + for(UI_Event *evt = 0; ui_next_event(&evt);) + { + if(evt->kind == UI_EventKind_AutocompleteHint) + { + has_autocomplete_hint = 1; + } + if(evt->kind == UI_EventKind_Press && evt->slot == UI_EventActionSlot_Accept) + { + has_accept_operation = 1; + } + } + if(has_autocomplete_hint && has_accept_operation) + { + autocomp_floating_view_task->signal.box->transparency = 1; + } + } + //- rjf: hover eval focus rules if(hover_eval_floating_view_task) { diff --git a/src/raddbg/raddbg_widgets.c b/src/raddbg/raddbg_widgets.c index 2bbe61d8..1fcd8b6e 100644 --- a/src/raddbg/raddbg_widgets.c +++ b/src/raddbg/raddbg_widgets.c @@ -3308,7 +3308,7 @@ rd_cell(RD_CellParams *params, String8 string) { if(ui_top_text_alignment() == UI_TextAlign_Left && (params->flags & (RD_CellFlag_Expander|RD_CellFlag_ExpanderSpace|RD_CellFlag_ExpanderPlaceholder)) == 0) { - ui_spacer(ui_em(0.5f, 1.f)); + ui_spacer(ui_em(1.f, 1.f)); } UI_Box *name_box = ui_build_box_from_key(UI_BoxFlag_DrawText, ui_key_zero()); ui_box_equip_display_fstrs(name_box, &lhs_name_fstrs); @@ -3318,7 +3318,7 @@ rd_cell(RD_CellParams *params, String8 string) { UI_Row { - ui_spacer(ui_em(0.5f, 1.f)); + ui_spacer(ui_em(1.f, 1.f)); UI_Box *desc_box = ui_label(params->description).box; FuzzyMatchRangeList desc_fuzzy_matches = fuzzy_match_find(scratch.arena, params->search_needle, params->description); ui_box_equip_fuzzy_match_ranges(desc_box, &desc_fuzzy_matches);