command palette tweaks
This commit is contained in:
parent
cf0e5f25c2
commit
202dc4bc1c
@ -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)
|
||||
@ -156,13 +156,14 @@ Struct(PP_VisCmdNode)
|
||||
};
|
||||
|
||||
#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) \
|
||||
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,20 +222,28 @@ 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_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->hash = hash;
|
||||
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) \
|
||||
// do {
|
||||
// // PP_Shortcut *shortcut = PushStruct(
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user