command palette hotkey testing
This commit is contained in:
parent
9850de005c
commit
cf0e5f25c2
@ -619,7 +619,7 @@ ForceInline void UnlockTicketMutex(TicketMutex *tm)
|
|||||||
#define STRING(size, data) ((String) { (size), (data) })
|
#define STRING(size, data) ((String) { (size), (data) })
|
||||||
#define Zstr ((String) { 0, 0})
|
#define Zstr ((String) { 0, 0})
|
||||||
#define Lit(cstr_lit) (String) { (sizeof((cstr_lit)) - 1), (u8 *)(cstr_lit) }
|
#define Lit(cstr_lit) (String) { (sizeof((cstr_lit)) - 1), (u8 *)(cstr_lit) }
|
||||||
#define LitNoCast(cstr_lit) { .len = (sizeof((cstr_lit)) - 1), .text = (u8 *)(cstr_lit) }
|
#define CompLit(cstr_lit) { .len = (sizeof((cstr_lit)) - 1), .text = (u8 *)(cstr_lit) }
|
||||||
#define StringFromPointers(p0, p1) ((String) { (u8 *)(p1) - (u8 *)(p0), (u8 *)p0 })
|
#define StringFromPointers(p0, p1) ((String) { (u8 *)(p1) - (u8 *)(p0), (u8 *)p0 })
|
||||||
#define StringFromStruct(ptr) ((String) { sizeof(*(ptr)), (u8 *)(ptr) })
|
#define StringFromStruct(ptr) ((String) { sizeof(*(ptr)), (u8 *)(ptr) })
|
||||||
#define StringFromArena(arena) (STRING((arena)->pos, ArenaBase(arena)))
|
#define StringFromArena(arena) (STRING((arena)->pos, ArenaBase(arena)))
|
||||||
|
|||||||
@ -1,112 +1,112 @@
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Controller button types
|
//~ Controller button types
|
||||||
|
|
||||||
Enum(Btn)
|
Enum(Button)
|
||||||
{
|
{
|
||||||
Btn_None,
|
Button_None,
|
||||||
|
|
||||||
//- Mouse buttons
|
//- Mouse buttons
|
||||||
Btn_M1,
|
Button_M1,
|
||||||
Btn_M2,
|
Button_M2,
|
||||||
Btn_M3,
|
Button_M3,
|
||||||
Btn_M4,
|
Button_M4,
|
||||||
Btn_M5,
|
Button_M5,
|
||||||
|
|
||||||
//- Mouse wheel
|
//- Mouse wheel
|
||||||
Btn_MWheelUp,
|
Button_MWheelUp,
|
||||||
Btn_MWheelDown,
|
Button_MWheelDown,
|
||||||
|
|
||||||
//- Keyboard buttons
|
//- Keyboard buttons
|
||||||
Btn_Esc,
|
Button_Esc,
|
||||||
Btn_F1,
|
Button_F1,
|
||||||
Btn_F2,
|
Button_F2,
|
||||||
Btn_F3,
|
Button_F3,
|
||||||
Btn_F4,
|
Button_F4,
|
||||||
Btn_F5,
|
Button_F5,
|
||||||
Btn_F6,
|
Button_F6,
|
||||||
Btn_F7,
|
Button_F7,
|
||||||
Btn_F8,
|
Button_F8,
|
||||||
Btn_F9,
|
Button_F9,
|
||||||
Btn_F10,
|
Button_F10,
|
||||||
Btn_F11,
|
Button_F11,
|
||||||
Btn_F12,
|
Button_F12,
|
||||||
Btn_F13,
|
Button_F13,
|
||||||
Btn_F14,
|
Button_F14,
|
||||||
Btn_F15,
|
Button_F15,
|
||||||
Btn_F16,
|
Button_F16,
|
||||||
Btn_F17,
|
Button_F17,
|
||||||
Btn_F18,
|
Button_F18,
|
||||||
Btn_F19,
|
Button_F19,
|
||||||
Btn_F20,
|
Button_F20,
|
||||||
Btn_F21,
|
Button_F21,
|
||||||
Btn_F22,
|
Button_F22,
|
||||||
Btn_F23,
|
Button_F23,
|
||||||
Btn_F24,
|
Button_F24,
|
||||||
Btn_GraveAccent,
|
Button_GraveAccent,
|
||||||
Btn_0,
|
Button_0,
|
||||||
Btn_1,
|
Button_1,
|
||||||
Btn_2,
|
Button_2,
|
||||||
Btn_3,
|
Button_3,
|
||||||
Btn_4,
|
Button_4,
|
||||||
Btn_5,
|
Button_5,
|
||||||
Btn_6,
|
Button_6,
|
||||||
Btn_7,
|
Button_7,
|
||||||
Btn_8,
|
Button_8,
|
||||||
Btn_9,
|
Button_9,
|
||||||
Btn_Minus,
|
Button_Minus,
|
||||||
Btn_Equal,
|
Button_Equal,
|
||||||
Btn_Backspace,
|
Button_Backspace,
|
||||||
Btn_Delete,
|
Button_Delete,
|
||||||
Btn_Tab,
|
Button_Tab,
|
||||||
Btn_A,
|
Button_A,
|
||||||
Btn_B,
|
Button_B,
|
||||||
Btn_C,
|
Button_C,
|
||||||
Btn_D,
|
Button_D,
|
||||||
Btn_E,
|
Button_E,
|
||||||
Btn_F,
|
Button_F,
|
||||||
Btn_G,
|
Button_G,
|
||||||
Btn_H,
|
Button_H,
|
||||||
Btn_I,
|
Button_I,
|
||||||
Btn_J,
|
Button_J,
|
||||||
Btn_K,
|
Button_K,
|
||||||
Btn_L,
|
Button_L,
|
||||||
Btn_M,
|
Button_M,
|
||||||
Btn_N,
|
Button_N,
|
||||||
Btn_O,
|
Button_O,
|
||||||
Btn_P,
|
Button_P,
|
||||||
Btn_Q,
|
Button_Q,
|
||||||
Btn_R,
|
Button_R,
|
||||||
Btn_S,
|
Button_S,
|
||||||
Btn_T,
|
Button_T,
|
||||||
Btn_U,
|
Button_U,
|
||||||
Btn_V,
|
Button_V,
|
||||||
Btn_W,
|
Button_W,
|
||||||
Btn_X,
|
Button_X,
|
||||||
Btn_Y,
|
Button_Y,
|
||||||
Btn_Z,
|
Button_Z,
|
||||||
Btn_Space,
|
Button_Space,
|
||||||
Btn_Enter,
|
Button_Enter,
|
||||||
Btn_Ctrl,
|
Button_Ctrl,
|
||||||
Btn_Shift,
|
Button_Shift,
|
||||||
Btn_Alt,
|
Button_Alt,
|
||||||
Btn_Up,
|
Button_Up,
|
||||||
Btn_Left,
|
Button_Left,
|
||||||
Btn_Down,
|
Button_Down,
|
||||||
Btn_Right,
|
Button_Right,
|
||||||
Btn_PageUp,
|
Button_PageUp,
|
||||||
Btn_PageDown,
|
Button_PageDown,
|
||||||
Btn_Home,
|
Button_Home,
|
||||||
Btn_End,
|
Button_End,
|
||||||
Btn_ForwardSlash,
|
Button_ForwardSlash,
|
||||||
Btn_Period,
|
Button_Period,
|
||||||
Btn_Comma,
|
Button_Comma,
|
||||||
Btn_Quote,
|
Button_Quote,
|
||||||
Btn_LeftBracket,
|
Button_LeftBracket,
|
||||||
Btn_RightBracket,
|
Button_RightBracket,
|
||||||
Btn_Insert,
|
Button_Insert,
|
||||||
Btn_Semicolon,
|
Button_Semicolon,
|
||||||
|
|
||||||
Btn_Count
|
Button_Count
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -135,7 +135,7 @@ Struct(ControllerEvent)
|
|||||||
|
|
||||||
/* ControllerEventKind_ButtonDown */
|
/* ControllerEventKind_ButtonDown */
|
||||||
/* ControllerEventKind_ButtonUp */
|
/* ControllerEventKind_ButtonUp */
|
||||||
Btn button;
|
Button button;
|
||||||
b32 is_repeat;
|
b32 is_repeat;
|
||||||
|
|
||||||
/* ControllerEventKind_Text */
|
/* ControllerEventKind_Text */
|
||||||
|
|||||||
@ -55,27 +55,27 @@ Struct(LogLevelSettings)
|
|||||||
|
|
||||||
Global Readonly LogLevelSettings log_settings[LogLevel_Count] = {
|
Global Readonly LogLevelSettings log_settings[LogLevel_Count] = {
|
||||||
[LogLevel_Critical] = {
|
[LogLevel_Critical] = {
|
||||||
LitNoCast("CRITICAL"),
|
CompLit("CRITICAL"),
|
||||||
},
|
},
|
||||||
|
|
||||||
[LogLevel_Error] = {
|
[LogLevel_Error] = {
|
||||||
LitNoCast("ERROR"),
|
CompLit("ERROR"),
|
||||||
},
|
},
|
||||||
|
|
||||||
[LogLevel_Warning] = {
|
[LogLevel_Warning] = {
|
||||||
LitNoCast("WARNING"),
|
CompLit("WARNING"),
|
||||||
},
|
},
|
||||||
|
|
||||||
[LogLevel_Success] = {
|
[LogLevel_Success] = {
|
||||||
LitNoCast("SUCCESS"),
|
CompLit("SUCCESS"),
|
||||||
},
|
},
|
||||||
|
|
||||||
[LogLevel_Info] = {
|
[LogLevel_Info] = {
|
||||||
LitNoCast("INFO"),
|
CompLit("INFO"),
|
||||||
},
|
},
|
||||||
|
|
||||||
[LogLevel_Debug] = {
|
[LogLevel_Debug] = {
|
||||||
LitNoCast("DEBUG"),
|
CompLit("DEBUG"),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -347,7 +347,6 @@ b32 MatchXform(Xform xf1, Xform xf2);
|
|||||||
|
|
||||||
//- Initialization
|
//- Initialization
|
||||||
#define XformIdentity (Xform) { .bx = VEC2(1, 0), .by = VEC2(0, 1) }
|
#define XformIdentity (Xform) { .bx = VEC2(1, 0), .by = VEC2(0, 1) }
|
||||||
#define XformIdentityNoCast { .bx = VEC2(1, 0), .by = VEC2(0, 1) }
|
|
||||||
Xform XformFromPos(Vec2 v);
|
Xform XformFromPos(Vec2 v);
|
||||||
Xform XformFromRot(f32 r);
|
Xform XformFromRot(f32 r);
|
||||||
Xform XformFromScale(Vec2 scale);
|
Xform XformFromScale(Vec2 scale);
|
||||||
|
|||||||
@ -114,9 +114,9 @@ Enum(JSON_LexNumberState)
|
|||||||
};
|
};
|
||||||
|
|
||||||
Global Readonly String JSON_keyword_strings[] = {
|
Global Readonly String JSON_keyword_strings[] = {
|
||||||
['t'] = LitNoCast("true"),
|
['t'] = CompLit("true"),
|
||||||
['f'] = LitNoCast("false"),
|
['f'] = CompLit("false"),
|
||||||
['n'] = LitNoCast("null")
|
['n'] = CompLit("null")
|
||||||
};
|
};
|
||||||
|
|
||||||
Global Readonly JSON_TokenKind JSON_keyword_types[] = {
|
Global Readonly JSON_TokenKind JSON_keyword_types[] = {
|
||||||
|
|||||||
@ -100,6 +100,102 @@ JobDef(PP_SimWorker, sig, job_id)
|
|||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Vis worker
|
//~ Vis worker
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* TODO: Remove this */
|
||||||
|
|
||||||
|
|
||||||
|
#define PP_HOTKEY(...) { __VA_ARGS__ }
|
||||||
|
|
||||||
|
Struct(PP_Hotkey)
|
||||||
|
{
|
||||||
|
Button button;
|
||||||
|
b32 ctrl;
|
||||||
|
b32 shift;
|
||||||
|
b32 alt;
|
||||||
|
};
|
||||||
|
|
||||||
|
Struct(PP_Shortcut)
|
||||||
|
{
|
||||||
|
PP_Shortcut *next_in_bin;
|
||||||
|
PP_Shortcut *prev_in_bin;
|
||||||
|
u64 hash;
|
||||||
|
PP_Hotkey hotkey;
|
||||||
|
String cmd_name;
|
||||||
|
};
|
||||||
|
|
||||||
|
Struct(PP_ShortcutBin)
|
||||||
|
{
|
||||||
|
PP_Shortcut *first;
|
||||||
|
PP_Shortcut *last;
|
||||||
|
};
|
||||||
|
|
||||||
|
Enum(PP_VisCmdDescFlag)
|
||||||
|
{
|
||||||
|
PP_VisCmdDescFlag_None = 0,
|
||||||
|
PP_VisCmdDescFlag_HideFromPalette = (1 << 0),
|
||||||
|
};
|
||||||
|
|
||||||
|
Struct(PP_VisCmdDesc)
|
||||||
|
{
|
||||||
|
String name;
|
||||||
|
String display_name;
|
||||||
|
PP_Hotkey default_hotkey;
|
||||||
|
PP_VisCmdDescFlag flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
Struct(PP_VisCmd)
|
||||||
|
{
|
||||||
|
String name;
|
||||||
|
};
|
||||||
|
|
||||||
|
Struct(PP_VisCmdNode)
|
||||||
|
{
|
||||||
|
PP_VisCmdNode *next;
|
||||||
|
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) \
|
||||||
|
/* -------------------------------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
Enum(PP_VisCmdKind)
|
||||||
|
{
|
||||||
|
#define X(name, ...) PP_VisCmdKind_##name,
|
||||||
|
PP_VisCmdsTableXMacro(X)
|
||||||
|
#undef X
|
||||||
|
|
||||||
|
PP_VisCmdKind_Count,
|
||||||
|
};
|
||||||
|
|
||||||
|
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 },
|
||||||
|
PP_VisCmdsTableXMacro(X)
|
||||||
|
#undef X
|
||||||
|
};
|
||||||
|
|
||||||
|
// Struct(PP_VisCmd)
|
||||||
|
// {
|
||||||
|
// String name;
|
||||||
|
// };
|
||||||
|
|
||||||
|
// Struct(PP_VisCmdNode)
|
||||||
|
// {
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
JobDef(PP_VisWorker, sig, job_id)
|
JobDef(PP_VisWorker, sig, job_id)
|
||||||
{
|
{
|
||||||
PP_SharedState *shared = &PP_shared_state;
|
PP_SharedState *shared = &PP_shared_state;
|
||||||
@ -113,11 +209,40 @@ JobDef(PP_VisWorker, sig, job_id)
|
|||||||
{
|
{
|
||||||
PP_CommandsWidget commands_widget;
|
PP_CommandsWidget commands_widget;
|
||||||
b32 ui_debug;
|
b32 ui_debug;
|
||||||
|
b32 show_command_palette;
|
||||||
b32 show_console;
|
b32 show_console;
|
||||||
};
|
};
|
||||||
VisPersist persist = ZI;
|
VisPersist persist = ZI;
|
||||||
String window_restore = ZI;
|
String window_restore = ZI;
|
||||||
// persist.ui_debug = 1;
|
|
||||||
|
Button held_buttons[Button_Count] = ZI;
|
||||||
|
|
||||||
|
/* Init shortcuts */
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
PP_VisCmdDesc desc = PP_vis_cmd_descs[i];
|
||||||
|
PP_Hotkey hotkey = desc.default_hotkey;
|
||||||
|
u64 hash = HashFnv64(Fnv64Basis, StringFromStruct(&hotkey));
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// #define X(name, display, hotkey) \
|
||||||
|
// do {
|
||||||
|
// // PP_Shortcut *shortcut = PushStruct(
|
||||||
|
// u64 hash = HashFnv64(Fnv64Basis, StringFromStruct(&hotkey));
|
||||||
|
// } while (0)
|
||||||
|
// PP_VisCmdsTableXMacro(X)
|
||||||
|
// #undef X
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Swap in
|
//- Swap in
|
||||||
@ -152,7 +277,6 @@ JobDef(PP_VisWorker, sig, job_id)
|
|||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Begin vis frame
|
//- Begin vis frame
|
||||||
|
|
||||||
|
|
||||||
UI_FrameFlag ui_frame_flags = 0;
|
UI_FrameFlag ui_frame_flags = 0;
|
||||||
ui_frame_flags |= UI_FrameFlag_Debug * !!persist.ui_debug;
|
ui_frame_flags |= UI_FrameFlag_Debug * !!persist.ui_debug;
|
||||||
ui_frame_flags |= UI_FrameFlag_Vsync * !!VSYNC;
|
ui_frame_flags |= UI_FrameFlag_Vsync * !!VSYNC;
|
||||||
@ -173,6 +297,73 @@ JobDef(PP_VisWorker, sig, job_id)
|
|||||||
PP_WidgetTheme theme = PP_GetWidgetTheme();
|
PP_WidgetTheme theme = PP_GetWidgetTheme();
|
||||||
PP_PushWidgetThemeStyles(theme);
|
PP_PushWidgetThemeStyles(theme);
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- Process controller events vis cmds
|
||||||
|
|
||||||
|
u64 cmds_count = 0;
|
||||||
|
PP_VisCmdNode *first_cmd_node = 0;
|
||||||
|
PP_VisCmdNode *last_cmd_node = 0;
|
||||||
|
|
||||||
|
for (u64 i = 0; i < window_frame.controller_events.count; ++i)
|
||||||
|
{
|
||||||
|
ControllerEvent cev = window_frame.controller_events.events[i];
|
||||||
|
b32 down = cev.kind == ControllerEventKind_ButtonDown;
|
||||||
|
b32 up = cev.kind == ControllerEventKind_ButtonUp;
|
||||||
|
if (down || up)
|
||||||
|
{
|
||||||
|
PP_Hotkey hotkey = ZI;
|
||||||
|
hotkey.button = cev.button;
|
||||||
|
hotkey.ctrl = held_buttons[Button_Ctrl];
|
||||||
|
hotkey.shift = held_buttons[Button_Shift];
|
||||||
|
hotkey.alt = held_buttons[Button_Alt];
|
||||||
|
{
|
||||||
|
u64 hotkey_hash = HashFnv64(Fnv64Basis, StringFromStruct(&hotkey));
|
||||||
|
PP_ShortcutBin *bin = &shortcut_bins[hotkey_hash % shortcut_bins_count];
|
||||||
|
PP_Shortcut *shortcut = bin->first;
|
||||||
|
for (; shortcut; shortcut = shortcut->next_in_bin)
|
||||||
|
{
|
||||||
|
if (shortcut->hash == hotkey_hash)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (shortcut != 0 && down)
|
||||||
|
{
|
||||||
|
PP_VisCmdNode *cmd_node = PushStruct(frame_arena, PP_VisCmdNode);
|
||||||
|
cmd_node->cmd.name = shortcut->cmd_name;
|
||||||
|
QueuePush(first_cmd_node, last_cmd_node, cmd_node);
|
||||||
|
++cmds_count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
held_buttons[hotkey.button] = down;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//////////////////////////////
|
||||||
|
//- Build command palette
|
||||||
|
|
||||||
|
if (persist.show_command_palette)
|
||||||
|
{
|
||||||
|
PP_BeginCommandsWidget(&persist.commands_widget);
|
||||||
|
{
|
||||||
|
for (u64 i = 0; i < countof(PP_vis_cmd_descs); ++i)
|
||||||
|
{
|
||||||
|
PP_VisCmdDesc desc = PP_vis_cmd_descs[i];
|
||||||
|
if (!desc.flags & PP_VisCmdDescFlag_HideFromPalette)
|
||||||
|
{
|
||||||
|
if (PP_PushCommandsWidgetItem(&persist.commands_widget, desc.display_name).m1_presses > 0)
|
||||||
|
{
|
||||||
|
PP_VisCmdNode *cmd_node = PushStruct(frame_arena, PP_VisCmdNode);
|
||||||
|
cmd_node->cmd.name = desc.name;
|
||||||
|
QueuePush(first_cmd_node, last_cmd_node, cmd_node);
|
||||||
|
++cmds_count;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
PP_EndCommandsWidget(&persist.commands_widget);
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Build console
|
//- Build console
|
||||||
|
|
||||||
@ -183,41 +374,64 @@ JobDef(PP_VisWorker, sig, job_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Build commands widget
|
//- Process vis cmds
|
||||||
|
|
||||||
PP_BeginCommandsWidget(&persist.commands_widget);
|
for (PP_VisCmdNode *cmd_node = first_cmd_node; cmd_node; cmd_node = cmd_node->next)
|
||||||
{
|
{
|
||||||
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Debug UI")).m1_presses > 0)
|
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)
|
||||||
{
|
{
|
||||||
persist.ui_debug = !persist.ui_debug;
|
PP_VisCmdDesc desc = PP_vis_cmd_descs[tmp_kind];
|
||||||
}
|
if (MatchString(desc.name, cmd_name))
|
||||||
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Console")).m1_presses > 0)
|
|
||||||
{
|
|
||||||
b32 new = !persist.show_console;
|
|
||||||
if (new)
|
|
||||||
{
|
{
|
||||||
LogInfoF("Enabled console");
|
kind = tmp_kind;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
persist.show_console = new;
|
|
||||||
}
|
}
|
||||||
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Fullscreen")).m1_presses > 0)
|
|
||||||
|
switch (kind)
|
||||||
{
|
{
|
||||||
b32 new = !window_frame.fullscreen;
|
case PP_VisCmdKind_toggle_command_palette:
|
||||||
WND_PushCmd(window_frame, .kind = WND_CmdKind_SetFullscreen, .v = new);
|
{
|
||||||
LogInfoF("Toggled fullscreen: %F", FmtSint(new));
|
persist.show_command_palette = !persist.show_command_palette;
|
||||||
}
|
} break;
|
||||||
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Topmost")).m1_presses > 0)
|
|
||||||
{
|
case PP_VisCmdKind_toggle_ui_debug:
|
||||||
b32 new = !window_frame.forced_top;
|
{
|
||||||
WND_PushCmd(window_frame, .kind = WND_CmdKind_SetForcedTop, .v = new);
|
persist.ui_debug = !persist.ui_debug;
|
||||||
LogInfoF("Toggled topmost: %F", FmtSint(new));
|
} break;
|
||||||
}
|
|
||||||
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Spawn")).m1_presses > 0)
|
case PP_VisCmdKind_toggle_console:
|
||||||
{
|
{
|
||||||
LogErrorF("RAAAAH");
|
b32 new = !persist.show_console;
|
||||||
|
if (new)
|
||||||
|
{
|
||||||
|
LogInfoF("Enabled console");
|
||||||
|
}
|
||||||
|
persist.show_console = new;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case PP_VisCmdKind_toggle_fullscreen:
|
||||||
|
{
|
||||||
|
b32 new = !window_frame.fullscreen;
|
||||||
|
WND_PushCmd(window_frame, .kind = WND_CmdKind_SetFullscreen, .v = new);
|
||||||
|
LogInfoF("Toggled fullscreen: %F", FmtSint(new));
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case PP_VisCmdKind_toggle_window_topmost:
|
||||||
|
{
|
||||||
|
b32 new = !window_frame.forced_top;
|
||||||
|
WND_PushCmd(window_frame, .kind = WND_CmdKind_SetForcedTop, .v = new);
|
||||||
|
LogInfoF("Toggled topmost: %F", FmtSint(new));
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case PP_VisCmdKind_spawn:
|
||||||
|
{
|
||||||
|
LogErrorF("RAAAAH");
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PP_EndCommandsWidget(&persist.commands_widget);
|
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Submit sim commands
|
//- Submit sim commands
|
||||||
|
|||||||
@ -13,20 +13,6 @@ Struct(PP_SimCmd)
|
|||||||
PP_SimCmd *next;
|
PP_SimCmd *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
|
||||||
//~ Vis cmd types
|
|
||||||
|
|
||||||
Enum(PP_VisCmdKind)
|
|
||||||
{
|
|
||||||
PP_VisCmdKind_None,
|
|
||||||
PP_VisCmdKind_Count,
|
|
||||||
};
|
|
||||||
|
|
||||||
Struct(PP_VisCmd)
|
|
||||||
{
|
|
||||||
PP_VisCmd *next;
|
|
||||||
};
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ State types
|
//~ State types
|
||||||
|
|
||||||
|
|||||||
@ -203,7 +203,7 @@ void PP_EndCommandsWidget(PP_CommandsWidget *widget)
|
|||||||
UI_PopCP(UI_TopCP());
|
UI_PopCP(UI_TopCP());
|
||||||
|
|
||||||
UI_BuildSpacer(UI_PIX(padding, 1), Axis_Y);
|
UI_BuildSpacer(UI_PIX(padding, 1), Axis_Y);
|
||||||
UI_PopCP(UI_TopCP());
|
UI_PopCP(widget->build.cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
|
|||||||
@ -518,7 +518,7 @@ UI_Frame UI_BeginFrame(UI_FrameFlag frame_flags)
|
|||||||
|
|
||||||
case ControllerEventKind_ButtonDown:
|
case ControllerEventKind_ButtonDown:
|
||||||
{
|
{
|
||||||
if (cev.button == Btn_M1)
|
if (cev.button == Button_M1)
|
||||||
{
|
{
|
||||||
if (hovered_box)
|
if (hovered_box)
|
||||||
{
|
{
|
||||||
@ -532,7 +532,7 @@ UI_Frame UI_BeginFrame(UI_FrameFlag frame_flags)
|
|||||||
|
|
||||||
case ControllerEventKind_ButtonUp:
|
case ControllerEventKind_ButtonUp:
|
||||||
{
|
{
|
||||||
if (cev.button == Btn_M1)
|
if (cev.button == Button_M1)
|
||||||
{
|
{
|
||||||
if (active_box)
|
if (active_box)
|
||||||
{
|
{
|
||||||
@ -676,7 +676,12 @@ i64 UI_EndFrame(UI_Frame frame)
|
|||||||
for (UI_CmdNode *cmd_node = g->bframe.first_cmd_node; cmd_node; cmd_node = cmd_node->next)
|
for (UI_CmdNode *cmd_node = g->bframe.first_cmd_node; cmd_node; cmd_node = cmd_node->next)
|
||||||
{
|
{
|
||||||
UI_Cmd cmd = cmd_node->cmd;
|
UI_Cmd cmd = cmd_node->cmd;
|
||||||
|
|
||||||
UI_Key key = cmd.key;
|
UI_Key key = cmd.key;
|
||||||
|
if (key.hash == 0)
|
||||||
|
{
|
||||||
|
key = UI_TransKey();
|
||||||
|
}
|
||||||
|
|
||||||
b32 is_root = g->eframe.root_box == 0;
|
b32 is_root = g->eframe.root_box == 0;
|
||||||
UI_Box *parent = 0;
|
UI_Box *parent = 0;
|
||||||
@ -693,14 +698,11 @@ i64 UI_EndFrame(UI_Frame frame)
|
|||||||
UI_Box *box = 0;
|
UI_Box *box = 0;
|
||||||
{
|
{
|
||||||
UI_BoxBin *bin = &g->box_bins[key.hash % UI_NumBoxLookupBins];
|
UI_BoxBin *bin = &g->box_bins[key.hash % UI_NumBoxLookupBins];
|
||||||
if (key.hash != 0)
|
for (UI_Box *tmp = bin->first; tmp && !box; tmp = tmp->next_in_bin)
|
||||||
{
|
{
|
||||||
for (UI_Box *tmp = bin->first; tmp && !box; tmp = tmp->next_in_bin)
|
if (tmp->key.hash == key.hash)
|
||||||
{
|
{
|
||||||
if (tmp->key.hash == key.hash)
|
box = tmp;
|
||||||
{
|
|
||||||
box = tmp;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (box)
|
if (box)
|
||||||
|
|||||||
@ -9,47 +9,47 @@ void WND_Startup(void)
|
|||||||
|
|
||||||
//- Initialize btn table
|
//- Initialize btn table
|
||||||
{
|
{
|
||||||
ZeroArray(g->vk_to_btn);
|
ZeroArray(g->vk_to_button);
|
||||||
for (u32 i = 'A', j = Btn_A; i <= 'Z'; ++i, ++j)
|
for (u32 i = 'A', j = Button_A; i <= 'Z'; ++i, ++j)
|
||||||
{
|
{
|
||||||
g->vk_to_btn[i] = (Btn)j;
|
g->vk_to_button[i] = (Button)j;
|
||||||
}
|
}
|
||||||
for (u32 i = '0', j = Btn_0; i <= '9'; ++i, ++j)
|
for (u32 i = '0', j = Button_0; i <= '9'; ++i, ++j)
|
||||||
{
|
{
|
||||||
g->vk_to_btn[i] = (Btn)j;
|
g->vk_to_button[i] = (Button)j;
|
||||||
}
|
}
|
||||||
for (u32 i = VK_F1, j = Btn_F1; i <= VK_F24; ++i, ++j)
|
for (u32 i = VK_F1, j = Button_F1; i <= VK_F24; ++i, ++j)
|
||||||
{
|
{
|
||||||
g->vk_to_btn[i] = (Btn)j;
|
g->vk_to_button[i] = (Button)j;
|
||||||
}
|
}
|
||||||
g->vk_to_btn[VK_ESCAPE] = Btn_Esc;
|
g->vk_to_button[VK_ESCAPE] = Button_Esc;
|
||||||
g->vk_to_btn[VK_OEM_3] = Btn_GraveAccent;
|
g->vk_to_button[VK_OEM_3] = Button_GraveAccent;
|
||||||
g->vk_to_btn[VK_OEM_MINUS] = Btn_Minus;
|
g->vk_to_button[VK_OEM_MINUS] = Button_Minus;
|
||||||
g->vk_to_btn[VK_OEM_PLUS] = Btn_Equal;
|
g->vk_to_button[VK_OEM_PLUS] = Button_Equal;
|
||||||
g->vk_to_btn[VK_BACK] = Btn_Backspace;
|
g->vk_to_button[VK_BACK] = Button_Backspace;
|
||||||
g->vk_to_btn[VK_TAB] = Btn_Tab;
|
g->vk_to_button[VK_TAB] = Button_Tab;
|
||||||
g->vk_to_btn[VK_SPACE] = Btn_Space;
|
g->vk_to_button[VK_SPACE] = Button_Space;
|
||||||
g->vk_to_btn[VK_RETURN] = Btn_Enter;
|
g->vk_to_button[VK_RETURN] = Button_Enter;
|
||||||
g->vk_to_btn[VK_CONTROL] = Btn_Ctrl;
|
g->vk_to_button[VK_CONTROL] = Button_Ctrl;
|
||||||
g->vk_to_btn[VK_SHIFT] = Btn_Shift;
|
g->vk_to_button[VK_SHIFT] = Button_Shift;
|
||||||
g->vk_to_btn[VK_MENU] = Btn_Alt;
|
g->vk_to_button[VK_MENU] = Button_Alt;
|
||||||
g->vk_to_btn[VK_UP] = Btn_Up;
|
g->vk_to_button[VK_UP] = Button_Up;
|
||||||
g->vk_to_btn[VK_LEFT] = Btn_Left;
|
g->vk_to_button[VK_LEFT] = Button_Left;
|
||||||
g->vk_to_btn[VK_DOWN] = Btn_Down;
|
g->vk_to_button[VK_DOWN] = Button_Down;
|
||||||
g->vk_to_btn[VK_RIGHT] = Btn_Right;
|
g->vk_to_button[VK_RIGHT] = Button_Right;
|
||||||
g->vk_to_btn[VK_DELETE] = Btn_Delete;
|
g->vk_to_button[VK_DELETE] = Button_Delete;
|
||||||
g->vk_to_btn[VK_PRIOR] = Btn_PageUp;
|
g->vk_to_button[VK_PRIOR] = Button_PageUp;
|
||||||
g->vk_to_btn[VK_NEXT] = Btn_PageDown;
|
g->vk_to_button[VK_NEXT] = Button_PageDown;
|
||||||
g->vk_to_btn[VK_HOME] = Btn_Home;
|
g->vk_to_button[VK_HOME] = Button_Home;
|
||||||
g->vk_to_btn[VK_END] = Btn_End;
|
g->vk_to_button[VK_END] = Button_End;
|
||||||
g->vk_to_btn[VK_OEM_2] = Btn_ForwardSlash;
|
g->vk_to_button[VK_OEM_2] = Button_ForwardSlash;
|
||||||
g->vk_to_btn[VK_OEM_PERIOD] = Btn_Period;
|
g->vk_to_button[VK_OEM_PERIOD] = Button_Period;
|
||||||
g->vk_to_btn[VK_OEM_COMMA] = Btn_Comma;
|
g->vk_to_button[VK_OEM_COMMA] = Button_Comma;
|
||||||
g->vk_to_btn[VK_OEM_7] = Btn_Quote;
|
g->vk_to_button[VK_OEM_7] = Button_Quote;
|
||||||
g->vk_to_btn[VK_OEM_4] = Btn_LeftBracket;
|
g->vk_to_button[VK_OEM_4] = Button_LeftBracket;
|
||||||
g->vk_to_btn[VK_OEM_6] = Btn_RightBracket;
|
g->vk_to_button[VK_OEM_6] = Button_RightBracket;
|
||||||
g->vk_to_btn[VK_INSERT] = Btn_Insert;
|
g->vk_to_button[VK_INSERT] = Button_Insert;
|
||||||
g->vk_to_btn[VK_OEM_1] = Btn_Semicolon;
|
g->vk_to_button[VK_OEM_1] = Button_Semicolon;
|
||||||
}
|
}
|
||||||
|
|
||||||
//- Create window class
|
//- Create window class
|
||||||
@ -216,9 +216,9 @@ LRESULT CALLBACK WND_W32_WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM l
|
|||||||
{
|
{
|
||||||
event.kind = ControllerEventKind_ButtonUp;
|
event.kind = ControllerEventKind_ButtonUp;
|
||||||
}
|
}
|
||||||
if (vk_code < countof(g->vk_to_btn))
|
if (vk_code < countof(g->vk_to_button))
|
||||||
{
|
{
|
||||||
event.button = g->vk_to_btn[vk_code];
|
event.button = g->vk_to_button[vk_code];
|
||||||
}
|
}
|
||||||
WND_W32_PushEvent(window, event);
|
WND_W32_PushEvent(window, event);
|
||||||
if (msg == WM_SYSKEYUP || msg == WM_SYSKEYDOWN)
|
if (msg == WM_SYSKEYUP || msg == WM_SYSKEYDOWN)
|
||||||
@ -302,19 +302,19 @@ LRESULT CALLBACK WND_W32_WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM l
|
|||||||
}
|
}
|
||||||
switch (msg)
|
switch (msg)
|
||||||
{
|
{
|
||||||
case WM_LBUTTONUP: case WM_LBUTTONDOWN: event.button = Btn_M1; break;
|
case WM_LBUTTONUP: case WM_LBUTTONDOWN: event.button = Button_M1; break;
|
||||||
case WM_RBUTTONUP: case WM_RBUTTONDOWN: event.button = Btn_M2; break;
|
case WM_RBUTTONUP: case WM_RBUTTONDOWN: event.button = Button_M2; break;
|
||||||
case WM_MBUTTONUP: case WM_MBUTTONDOWN: event.button = Btn_M3; break;
|
case WM_MBUTTONUP: case WM_MBUTTONDOWN: event.button = Button_M3; break;
|
||||||
case WM_XBUTTONUP: case WM_XBUTTONDOWN:
|
case WM_XBUTTONUP: case WM_XBUTTONDOWN:
|
||||||
{
|
{
|
||||||
u32 wparam_xbutton = GET_XBUTTON_WPARAM(wparam);
|
u32 wparam_xbutton = GET_XBUTTON_WPARAM(wparam);
|
||||||
if (wparam_xbutton == XBUTTON1)
|
if (wparam_xbutton == XBUTTON1)
|
||||||
{
|
{
|
||||||
event.button = Btn_M4;
|
event.button = Button_M4;
|
||||||
}
|
}
|
||||||
else if (wparam_xbutton == XBUTTON2)
|
else if (wparam_xbutton == XBUTTON2)
|
||||||
{
|
{
|
||||||
event.button = Btn_M5;
|
event.button = Button_M5;
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
@ -329,7 +329,7 @@ LRESULT CALLBACK WND_W32_WindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM l
|
|||||||
{
|
{
|
||||||
int delta = GET_WHEEL_DELTA_WPARAM(wparam);
|
int delta = GET_WHEEL_DELTA_WPARAM(wparam);
|
||||||
i32 dir = delta >= 0 ? 1 : -1;
|
i32 dir = delta >= 0 ? 1 : -1;
|
||||||
Btn btn = dir >= 0 ? Btn_MWheelUp : Btn_MWheelDown;
|
Button btn = dir >= 0 ? Button_MWheelUp : Button_MWheelDown;
|
||||||
for (i32 i = 0; i < (dir * delta); i += WHEEL_DELTA)
|
for (i32 i = 0; i < (dir * delta); i += WHEEL_DELTA)
|
||||||
{
|
{
|
||||||
/* Send a button down & button up event simultaneously */
|
/* Send a button down & button up event simultaneously */
|
||||||
|
|||||||
@ -64,7 +64,7 @@ Struct(WND_W32_CmdNode)
|
|||||||
|
|
||||||
Struct(WND_W32_SharedState)
|
Struct(WND_W32_SharedState)
|
||||||
{
|
{
|
||||||
Btn vk_to_btn[256];
|
Button vk_to_button[256];
|
||||||
WNDCLASSEXW window_class;
|
WNDCLASSEXW window_class;
|
||||||
WND_W32_Window window; /* Single-window for now */
|
WND_W32_Window window; /* Single-window for now */
|
||||||
} extern WND_W32_shared_state;
|
} extern WND_W32_shared_state;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user