command palette hotkey testing

This commit is contained in:
jacob 2025-11-08 20:23:59 -06:00
parent 9850de005c
commit cf0e5f25c2
11 changed files with 406 additions and 205 deletions

View File

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

View File

@ -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 */

View File

@ -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"),
} }
}; };

View File

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

View File

@ -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[] = {

View File

@ -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,15 +374,35 @@ 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)
{
PP_VisCmdDesc desc = PP_vis_cmd_descs[tmp_kind];
if (MatchString(desc.name, cmd_name))
{
kind = tmp_kind;
break;
}
}
switch (kind)
{
case PP_VisCmdKind_toggle_command_palette:
{
persist.show_command_palette = !persist.show_command_palette;
} break;
case PP_VisCmdKind_toggle_ui_debug:
{ {
persist.ui_debug = !persist.ui_debug; persist.ui_debug = !persist.ui_debug;
} } break;
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Console")).m1_presses > 0)
case PP_VisCmdKind_toggle_console:
{ {
b32 new = !persist.show_console; b32 new = !persist.show_console;
if (new) if (new)
@ -199,25 +410,28 @@ JobDef(PP_VisWorker, sig, job_id)
LogInfoF("Enabled console"); LogInfoF("Enabled console");
} }
persist.show_console = new; persist.show_console = new;
} } break;
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Fullscreen")).m1_presses > 0)
case PP_VisCmdKind_toggle_fullscreen:
{ {
b32 new = !window_frame.fullscreen; b32 new = !window_frame.fullscreen;
WND_PushCmd(window_frame, .kind = WND_CmdKind_SetFullscreen, .v = new); WND_PushCmd(window_frame, .kind = WND_CmdKind_SetFullscreen, .v = new);
LogInfoF("Toggled fullscreen: %F", FmtSint(new)); LogInfoF("Toggled fullscreen: %F", FmtSint(new));
} } break;
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Topmost")).m1_presses > 0)
case PP_VisCmdKind_toggle_window_topmost:
{ {
b32 new = !window_frame.forced_top; b32 new = !window_frame.forced_top;
WND_PushCmd(window_frame, .kind = WND_CmdKind_SetForcedTop, .v = new); WND_PushCmd(window_frame, .kind = WND_CmdKind_SetForcedTop, .v = new);
LogInfoF("Toggled topmost: %F", FmtSint(new)); LogInfoF("Toggled topmost: %F", FmtSint(new));
} } break;
if (PP_PushCommandsWidgetItem(&persist.commands_widget, Lit("Spawn")).m1_presses > 0)
case PP_VisCmdKind_spawn:
{ {
LogErrorF("RAAAAH"); LogErrorF("RAAAAH");
} break;
} }
} }
PP_EndCommandsWidget(&persist.commands_widget);
////////////////////////////// //////////////////////////////
//- Submit sim commands //- Submit sim commands

View File

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

View File

@ -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);
} }
//////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////

View File

@ -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,8 +698,6 @@ 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)
@ -702,7 +705,6 @@ i64 UI_EndFrame(UI_Frame frame)
box = tmp; box = tmp;
} }
} }
}
if (box) if (box)
{ {
/* Remove box from old parent */ /* Remove box from old parent */

View File

@ -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 */

View File

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