ctrl + scroll -> adjust global font size by default, ctrl + shift + scroll -> adjust text view font size

This commit is contained in:
Ryan Fleury
2025-04-22 16:40:45 -07:00
parent fc728ea4e9
commit 4cbb03fbfe
8 changed files with 87 additions and 24 deletions
+18
View File
@@ -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)
{
+1
View File
@@ -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);
+9 -2
View File
@@ -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")
+14 -1
View File
@@ -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);
}
+1 -1
View File
@@ -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)
+26 -8
View File
@@ -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)
//
+14 -8
View File
@@ -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
View File
@@ -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;