mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-13 15:42:23 -07:00
ctrl + scroll -> adjust global font size by default, ctrl + shift + scroll -> adjust text view font size
This commit is contained in:
@@ -45,6 +45,24 @@ os_string_list_from_modifiers(Arena *arena, OS_Modifiers modifiers)
|
||||
return result;
|
||||
}
|
||||
|
||||
internal String8
|
||||
os_string_from_modifiers_key(Arena *arena, OS_Modifiers modifiers, OS_Key key)
|
||||
{
|
||||
String8 result = {0};
|
||||
if(key != OS_Key_Null)
|
||||
{
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
String8List mods = os_string_list_from_modifiers(scratch.arena, modifiers);
|
||||
String8 key_string = os_g_key_display_string_table[key];
|
||||
str8_list_push(scratch.arena, &mods, key_string);
|
||||
StringJoin join = {0};
|
||||
join.sep = str8_lit(" + ");
|
||||
result = str8_list_join(arena, &mods, &join);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
internal U32
|
||||
os_codepoint_from_modifiers_and_key(OS_Modifiers modifiers, OS_Key key)
|
||||
{
|
||||
|
||||
@@ -112,6 +112,7 @@ internal B32 frame(void);
|
||||
|
||||
internal String8 os_string_from_event_kind(OS_EventKind kind);
|
||||
internal String8List os_string_list_from_modifiers(Arena *arena, OS_Modifiers flags);
|
||||
internal String8 os_string_from_modifiers_key(Arena *arena, OS_Modifiers modifiers, OS_Key key);
|
||||
internal U32 os_codepoint_from_modifiers_and_key(OS_Modifiers flags, OS_Key key);
|
||||
internal void os_eat_event(OS_EventList *events, OS_Event *event);
|
||||
internal B32 os_key_press(OS_EventList *events, OS_Handle window, OS_Modifiers modifiers, OS_Key key);
|
||||
|
||||
@@ -2546,7 +2546,7 @@ rd_view_ui(Rng2F32 rect)
|
||||
UI_Padding(ui_pct(1, 0))
|
||||
{
|
||||
ui_labelf("use");
|
||||
UI_TextAlignment(UI_TextAlign_Center) rd_cmd_binding_buttons(rd_cmd_kind_info_table[RD_CmdKind_OpenPalette].string);
|
||||
UI_TextAlignment(UI_TextAlign_Center) rd_cmd_binding_buttons(rd_cmd_kind_info_table[RD_CmdKind_OpenPalette].string, str8_zero());
|
||||
ui_labelf("to search for commands and options");
|
||||
}
|
||||
}
|
||||
@@ -4464,6 +4464,13 @@ rd_view_ui(Rng2F32 rect)
|
||||
cell_params.flags |= RD_CellFlag_Slider;
|
||||
cell_params.slider_value_out = &next_cell_slider_value;
|
||||
}
|
||||
|
||||
// rjf: apply bindings
|
||||
if(cell->px == 0 && cell->eval.space.kind == RD_EvalSpaceKind_MetaCmd)
|
||||
{
|
||||
cell_params.flags |= RD_CellFlag_Bindings;
|
||||
cell_params.bindings_name = rd_cmd_name_from_eval(cell->eval);
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: build
|
||||
@@ -6908,7 +6915,7 @@ rd_window_frame(void)
|
||||
ui_labelf("Search for commands and options by pressing ");
|
||||
UI_Flags(UI_BoxFlag_DrawBorder)
|
||||
UI_TextAlignment(UI_TextAlign_Center)
|
||||
rd_cmd_binding_buttons(rd_cmd_kind_info_table[RD_CmdKind_OpenPalette].string);
|
||||
rd_cmd_binding_buttons(rd_cmd_kind_info_table[RD_CmdKind_OpenPalette].string, str8_zero());
|
||||
}
|
||||
ui_spacer(ui_em(1.f, 1.f));
|
||||
UI_TagF("pop")
|
||||
|
||||
@@ -38,9 +38,22 @@ E_TYPE_EXPAND_INFO_FUNCTION_DEF(commands)
|
||||
FuzzyMatchRangeList desc_matches = fuzzy_match_find(scratch.arena, filter, description);
|
||||
FuzzyMatchRangeList name_matches = fuzzy_match_find(scratch.arena, filter, display_name);
|
||||
FuzzyMatchRangeList tags_matches = fuzzy_match_find(scratch.arena, filter, search_tags);
|
||||
B32 binding_matches_good = 0;
|
||||
RD_KeyMapNodePtrList bindings = rd_key_map_node_ptr_list_from_name(scratch.arena, code_name);
|
||||
for(RD_KeyMapNodePtr *n = bindings.first; n != 0; n = n->next)
|
||||
{
|
||||
String8 binding_text = os_string_from_modifiers_key(scratch.arena, n->v->binding.modifiers, n->v->binding.key);
|
||||
FuzzyMatchRangeList matches = fuzzy_match_find(scratch.arena, filter, binding_text);
|
||||
if(matches.count == matches.needle_part_count)
|
||||
{
|
||||
binding_matches_good = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(name_matches.count == name_matches.needle_part_count ||
|
||||
desc_matches.count == desc_matches.needle_part_count ||
|
||||
tags_matches.count == tags_matches.needle_part_count)
|
||||
tags_matches.count == tags_matches.needle_part_count ||
|
||||
binding_matches_good)
|
||||
{
|
||||
str8_list_push(scratch.arena, &cmd_names, code_name);
|
||||
}
|
||||
|
||||
@@ -775,7 +775,7 @@ rd_code_view_build(Arena *arena, RD_CodeViewState *cv, RD_CodeViewBuildFlags fla
|
||||
{
|
||||
for(UI_Event *evt = 0; ui_next_event(&evt);)
|
||||
{
|
||||
if(evt->kind == UI_EventKind_Scroll && evt->modifiers & OS_Modifier_Ctrl)
|
||||
if(evt->kind == UI_EventKind_Scroll && evt->modifiers & OS_Modifier_Ctrl && evt->modifiers & OS_Modifier_Shift)
|
||||
{
|
||||
ui_eat_event(evt);
|
||||
if(evt->delta_2f32.y < 0)
|
||||
|
||||
@@ -699,7 +699,7 @@ rd_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U64 progress_v_t
|
||||
//~ rjf: UI Widgets: Fancy Buttons
|
||||
|
||||
internal void
|
||||
rd_cmd_binding_buttons(String8 name)
|
||||
rd_cmd_binding_buttons(String8 name, String8 filter)
|
||||
{
|
||||
Temp scratch = scratch_begin(0, 0);
|
||||
RD_KeyMapNodePtrList key_map_nodes = rd_key_map_node_ptr_list_from_name(scratch.arena, name);
|
||||
@@ -731,12 +731,7 @@ rd_cmd_binding_buttons(String8 name)
|
||||
{
|
||||
if(binding.key != OS_Key_Null)
|
||||
{
|
||||
String8List mods = os_string_list_from_modifiers(scratch.arena, binding.modifiers);
|
||||
String8 key = os_g_key_display_string_table[binding.key];
|
||||
str8_list_push(scratch.arena, &mods, key);
|
||||
StringJoin join = {0};
|
||||
join.sep = str8_lit(" + ");
|
||||
keybinding_str = str8_list_join(scratch.arena, &mods, &join);
|
||||
keybinding_str = os_string_from_modifiers_key(scratch.arena, binding.modifiers, binding.key);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -744,6 +739,13 @@ rd_cmd_binding_buttons(String8 name)
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: compute fuzzy matches
|
||||
FuzzyMatchRangeList matches = {0};
|
||||
if(filter.size != 0)
|
||||
{
|
||||
matches = fuzzy_match_find(scratch.arena, filter, keybinding_str);
|
||||
}
|
||||
|
||||
//- rjf: build box
|
||||
ui_set_next_tag(has_conflicts ? str8_lit("bad_pop") : rebinding_active_for_this_binding ? str8_lit("pop") : str8_zero());
|
||||
ui_set_next_text_alignment(UI_TextAlign_Center);
|
||||
@@ -756,6 +758,7 @@ rd_cmd_binding_buttons(String8 name)
|
||||
UI_BoxFlag_DrawBorder|
|
||||
UI_BoxFlag_DrawBackground,
|
||||
"%S###bind_btn_%S_%x_%x", keybinding_str, name, binding.key, binding.modifiers);
|
||||
ui_box_equip_fuzzy_match_ranges(box, &matches);
|
||||
|
||||
//- rjf: interaction
|
||||
UI_Signal sig = ui_signal_from_box(box);
|
||||
@@ -895,7 +898,7 @@ rd_cmd_spec_button(String8 name)
|
||||
UI_TagF("weak")
|
||||
UI_FastpathCodepoint(0)
|
||||
{
|
||||
rd_cmd_binding_buttons(name);
|
||||
rd_cmd_binding_buttons(name, str8_zero());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3180,6 +3183,7 @@ rd_cell(RD_CellParams *params, String8 string)
|
||||
//
|
||||
B32 build_toggle_switch = !!(params->flags & RD_CellFlag_ToggleSwitch) && !is_focus_active;
|
||||
B32 build_slider = !!(params->flags & RD_CellFlag_Slider) && !is_focus_active;
|
||||
B32 build_bindings = !!(params->flags & RD_CellFlag_Bindings) && !is_focus_active;
|
||||
B32 build_lhs_name_desc = (params->meta_fstrs.node_count != 0 || params->description.size != 0);
|
||||
DR_FStrList lhs_name_fstrs = params->meta_fstrs;
|
||||
DR_FStrList value_name_fstrs = params->value_fstrs;
|
||||
@@ -3438,6 +3442,20 @@ rd_cell(RD_CellParams *params, String8 string)
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: build bindings
|
||||
//
|
||||
if(build_bindings) UI_Parent(box) RD_Font(RD_FontSlot_Main)
|
||||
{
|
||||
UI_PrefWidth(ui_children_sum(1)) UI_Column UI_Padding(ui_em(1.f, 1.f)) UI_HeightFill
|
||||
{
|
||||
UI_PrefWidth(ui_children_sum(1)) UI_Row UI_Padding(ui_em(1.f, 1.f))
|
||||
{
|
||||
rd_cmd_binding_buttons(params->bindings_name, params->search_needle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////
|
||||
//- rjf: do non-textual edits (delete, copy, cut)
|
||||
//
|
||||
|
||||
@@ -21,18 +21,21 @@ enum
|
||||
//- rjf: slider extension
|
||||
RD_CellFlag_Slider = (1<<4),
|
||||
|
||||
//- rjf: bindings extension
|
||||
RD_CellFlag_Bindings = (1<<5),
|
||||
|
||||
//- rjf: behavior
|
||||
RD_CellFlag_DisableEdit = (1<<5),
|
||||
RD_CellFlag_KeyboardClickable = (1<<6),
|
||||
RD_CellFlag_SingleClickActivate = (1<<7),
|
||||
RD_CellFlag_DisableEdit = (1<<6),
|
||||
RD_CellFlag_KeyboardClickable = (1<<7),
|
||||
RD_CellFlag_SingleClickActivate = (1<<8),
|
||||
|
||||
//- rjf: contents description
|
||||
RD_CellFlag_CodeContents = (1<<8),
|
||||
RD_CellFlag_CodeContents = (1<<9),
|
||||
|
||||
//- rjf: appearance
|
||||
RD_CellFlag_Border = (1<<9),
|
||||
RD_CellFlag_NoBackground = (1<<10),
|
||||
RD_CellFlag_Button = (1<<11),
|
||||
RD_CellFlag_Border = (1<<10),
|
||||
RD_CellFlag_NoBackground = (1<<11),
|
||||
RD_CellFlag_Button = (1<<12),
|
||||
};
|
||||
|
||||
typedef struct RD_CellParams RD_CellParams;
|
||||
@@ -56,6 +59,9 @@ struct RD_CellParams
|
||||
//- rjf: slider info r/w info
|
||||
F32 *slider_value_out;
|
||||
|
||||
//- rjf: bindings name w info
|
||||
String8 bindings_name;
|
||||
|
||||
//- rjf: text editing r/w info
|
||||
TxtPt *cursor;
|
||||
TxtPt *mark;
|
||||
@@ -134,7 +140,7 @@ internal void rd_loading_overlay(Rng2F32 rect, F32 loading_t, U64 progress_v, U6
|
||||
////////////////////////////////
|
||||
//~ rjf: UI Widgets: Fancy Buttons
|
||||
|
||||
internal void rd_cmd_binding_buttons(String8 name);
|
||||
internal void rd_cmd_binding_buttons(String8 name, String8 filter);
|
||||
internal UI_Signal rd_menu_bar_button(String8 string);
|
||||
internal UI_Signal rd_cmd_spec_button(String8 name);
|
||||
internal void rd_cmd_list_menu_buttons(U64 count, String8 *cmd_names, U32 *fastpath_codepoints);
|
||||
|
||||
+4
-4
@@ -557,11 +557,11 @@ ui_next_event(UI_Event **ev)
|
||||
{
|
||||
good = 0;
|
||||
}
|
||||
if(!(perms & UI_PermissionFlag_ScrollX) && (n->v.kind == UI_EventKind_Scroll) && (n->v.delta_2f32.x != 0 || n->v.modifiers & OS_Modifier_Shift))
|
||||
if(!(perms & UI_PermissionFlag_ScrollX) && (n->v.kind == UI_EventKind_Scroll) && (n->v.delta_2f32.x != 0 || n->v.modifiers == OS_Modifier_Shift))
|
||||
{
|
||||
good = 0;
|
||||
}
|
||||
if(!(perms & UI_PermissionFlag_ScrollY) && (n->v.kind == UI_EventKind_Scroll) && n->v.delta_2f32.y != 0 && !(n->v.modifiers & OS_Modifier_Shift))
|
||||
if(!(perms & UI_PermissionFlag_ScrollY) && (n->v.kind == UI_EventKind_Scroll) && n->v.delta_2f32.y != 0 && n->v.modifiers == 0)
|
||||
{
|
||||
good = 0;
|
||||
}
|
||||
@@ -2878,7 +2878,7 @@ ui_signal_from_box(UI_Box *box)
|
||||
//- rjf: scrolling
|
||||
if(box->flags & UI_BoxFlag_Scroll &&
|
||||
evt->kind == UI_EventKind_Scroll &&
|
||||
evt->modifiers != OS_Modifier_Ctrl &&
|
||||
(evt->modifiers == 0 || evt->modifiers == OS_Modifier_Shift) &&
|
||||
evt_mouse_in_bounds)
|
||||
{
|
||||
Vec2F32 delta = evt->delta_2f32;
|
||||
@@ -2899,7 +2899,7 @@ ui_signal_from_box(UI_Box *box)
|
||||
//- rjf: view scrolling
|
||||
if(box->flags & UI_BoxFlag_ViewScroll && box->first_touched_build_index != box->last_touched_build_index &&
|
||||
evt->kind == UI_EventKind_Scroll &&
|
||||
evt->modifiers != OS_Modifier_Ctrl &&
|
||||
(evt->modifiers == 0 || evt->modifiers == OS_Modifier_Shift) &&
|
||||
evt_mouse_in_bounds)
|
||||
{
|
||||
Vec2F32 delta = evt->delta_2f32;
|
||||
|
||||
Reference in New Issue
Block a user