From 202dc4bc1c7eedd2bfea6b6f488d1c5b312b99b0 Mon Sep 17 00:00:00 2001 From: jacob Date: Sat, 8 Nov 2025 20:44:25 -0600 Subject: [PATCH] command palette tweaks --- src/proto/pp_game.c | 64 +++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 25 deletions(-) diff --git a/src/proto/pp_game.c b/src/proto/pp_game.c index fd22288f..89ef56e7 100644 --- a/src/proto/pp_game.c +++ b/src/proto/pp_game.c @@ -105,7 +105,7 @@ JobDef(PP_SimWorker, sig, job_id) /* TODO: Remove this */ -#define PP_HOTKEY(...) { __VA_ARGS__ } +#define PP_HOTKEY(_button, ...) { .button = _button, __VA_ARGS__ } Struct(PP_Hotkey) { @@ -119,7 +119,7 @@ Struct(PP_Shortcut) { PP_Shortcut *next_in_bin; PP_Shortcut *prev_in_bin; - u64 hash; + u64 hotkey_hash; PP_Hotkey hotkey; String cmd_name; }; @@ -140,8 +140,8 @@ Struct(PP_VisCmdDesc) { String name; String display_name; - PP_Hotkey default_hotkey; PP_VisCmdDescFlag flags; + PP_Hotkey default_hotkeys[8]; }; Struct(PP_VisCmd) @@ -155,14 +155,15 @@ Struct(PP_VisCmdNode) PP_VisCmd cmd; }; -#define PP_VisCmdsTableXMacro(X) \ - X(none, None, PP_HOTKEY(0), PP_VisCmdDescFlag_HideFromPalette) \ - X(toggle_command_palette, Toggle Command Palette, PP_HOTKEY( .ctrl = 1, .shift = 1, .button = Button_P ), PP_VisCmdDescFlag_HideFromPalette) \ - X(toggle_ui_debug, Toggle UI Debug, PP_HOTKEY( .button = Button_F5 ), PP_VisCmdDescFlag_None) \ - X(toggle_console, Toggle Developer Console, PP_HOTKEY( .button = Button_GraveAccent ), PP_VisCmdDescFlag_None) \ - X(toggle_fullscreen, Toggle Fullscreen Mode, PP_HOTKEY( .alt = 1, .button = Button_Enter ), PP_VisCmdDescFlag_None) \ - X(toggle_window_topmost, Toggle Window Topmost, PP_HOTKEY( .button = Button_F4 ), PP_VisCmdDescFlag_None) \ - X(spawn, Spawn, PP_HOTKEY( .button = Button_S, .ctrl = 1 ), PP_VisCmdDescFlag_None) \ +#define PP_VisCmdsTableXMacro(X) \ + X(nop, NOP, PP_VisCmdDescFlag_HideFromPalette, PP_HOTKEY(0), ) \ + X(exit_program, Exit Program, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_Esc ) ) \ + X(toggle_command_palette, Toggle Command Palette, PP_VisCmdDescFlag_HideFromPalette, PP_HOTKEY( Button_P, .ctrl = 1, .shift = 1 ), ) \ + X(toggle_ui_debug, Toggle UI Debug, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_F5 ), ) \ + X(toggle_console, Toggle Developer Console, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_GraveAccent ), ) \ + X(toggle_fullscreen, Toggle Fullscreen Mode, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_Enter, .alt = 1 ), PP_HOTKEY( Button_F11 ) ) \ + X(toggle_window_topmost, Toggle Window Topmost, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_F4 ), ) \ + X(spawn, Spawn, PP_VisCmdDescFlag_None, PP_HOTKEY( Button_S, .ctrl = 1 ), ) \ /* -------------------------------------------------------------------------------------------------------------------- */ Enum(PP_VisCmdKind) @@ -175,7 +176,7 @@ Enum(PP_VisCmdKind) }; Readonly PP_VisCmdDesc PP_vis_cmd_descs[PP_VisCmdKind_Count] = { - #define X(_name, _display_name, _default_hotkey, _flags) { .name = CompLit(#_name), .display_name = CompLit(#_display_name), .default_hotkey = _default_hotkey, .flags = _flags }, + #define X(_name, _display_name, _flags, ...) { .name = CompLit(#_name), .display_name = CompLit(#_display_name), .flags = _flags, .default_hotkeys = { __VA_ARGS__ } }, PP_VisCmdsTableXMacro(X) #undef X }; @@ -221,18 +222,26 @@ JobDef(PP_VisWorker, sig, job_id) u64 shortcut_bins_count = 1024; PP_ShortcutBin *shortcut_bins = PushStructs(perm, PP_ShortcutBin, shortcut_bins_count); { - for (u64 i = 1; i < countof(PP_vis_cmd_descs); ++i) + for (u64 desc_idx = 1; desc_idx < countof(PP_vis_cmd_descs); ++desc_idx) { - PP_VisCmdDesc desc = PP_vis_cmd_descs[i]; - PP_Hotkey hotkey = desc.default_hotkey; - u64 hash = HashFnv64(Fnv64Basis, StringFromStruct(&hotkey)); + PP_VisCmdDesc desc = PP_vis_cmd_descs[desc_idx]; + for (u64 hotkey_idx = 0; hotkey_idx < countof(desc.default_hotkeys); ++hotkey_idx) { - PP_ShortcutBin *bin = &shortcut_bins[hash % shortcut_bins_count]; - PP_Shortcut *shortcut = PushStruct(perm, PP_Shortcut); - shortcut->hash = hash; - shortcut->hotkey = hotkey; - shortcut->cmd_name = desc.name; - DllPushBackNP(bin->first, bin->last, shortcut, next_in_bin, prev_in_bin); + PP_Hotkey hotkey = desc.default_hotkeys[hotkey_idx]; + if (hotkey.button == Button_None) + { + break; + } + else + { + u64 hotkey_hash = HashFnv64(Fnv64Basis, StringFromStruct(&hotkey)); + PP_ShortcutBin *bin = &shortcut_bins[hotkey_hash % shortcut_bins_count]; + PP_Shortcut *shortcut = PushStruct(perm, PP_Shortcut); + shortcut->hotkey_hash = hotkey_hash; + shortcut->hotkey = hotkey; + shortcut->cmd_name = desc.name; + DllPushBackNP(bin->first, bin->last, shortcut, next_in_bin, prev_in_bin); + } } } // #define X(name, display, hotkey) \ @@ -322,7 +331,7 @@ JobDef(PP_VisWorker, sig, job_id) PP_Shortcut *shortcut = bin->first; for (; shortcut; shortcut = shortcut->next_in_bin) { - if (shortcut->hash == hotkey_hash) + if (shortcut->hotkey_hash == hotkey_hash && MatchStruct(&shortcut->hotkey, &hotkey)) { break; } @@ -379,8 +388,8 @@ JobDef(PP_VisWorker, sig, job_id) for (PP_VisCmdNode *cmd_node = first_cmd_node; cmd_node; cmd_node = cmd_node->next) { String cmd_name = cmd_node->cmd.name; - PP_VisCmdKind kind = PP_VisCmdKind_none; - for (PP_VisCmdKind tmp_kind = PP_VisCmdKind_none; tmp_kind < PP_VisCmdKind_Count; ++tmp_kind) + PP_VisCmdKind kind = PP_VisCmdKind_nop; + for (PP_VisCmdKind tmp_kind = PP_VisCmdKind_nop; tmp_kind < PP_VisCmdKind_Count; ++tmp_kind) { PP_VisCmdDesc desc = PP_vis_cmd_descs[tmp_kind]; if (MatchString(desc.name, cmd_name)) @@ -392,6 +401,11 @@ JobDef(PP_VisWorker, sig, job_id) switch (kind) { + case PP_VisCmdKind_exit_program: + { + SignalExit(0); + } break; + case PP_VisCmdKind_toggle_command_palette: { persist.show_command_palette = !persist.show_command_palette;