command palette tweaks

This commit is contained in:
jacob 2025-11-08 20:44:25 -06:00
parent cf0e5f25c2
commit 202dc4bc1c

View File

@ -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;