mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 04:48:40 +00:00
merge view rules & view specs entirely; simplify graphical view rules down to single hook
This commit is contained in:
@@ -303,10 +303,10 @@ os_get_events(Arena *arena, B32 wait)
|
||||
case KeyRelease:
|
||||
{
|
||||
// rjf: determine flags
|
||||
OS_EventFlags flags = 0;
|
||||
if(evt.xkey.state & ShiftMask) { flags |= OS_EventFlag_Shift; }
|
||||
if(evt.xkey.state & ControlMask) { flags |= OS_EventFlag_Ctrl; }
|
||||
if(evt.xkey.state & Mod1Mask) { flags |= OS_EventFlag_Alt; }
|
||||
OS_Modifiers flags = 0;
|
||||
if(evt.xkey.state & ShiftMask) { flags |= OS_Modifier_Shift; }
|
||||
if(evt.xkey.state & ControlMask) { flags |= OS_Modifier_Ctrl; }
|
||||
if(evt.xkey.state & Mod1Mask) { flags |= OS_Modifier_Alt; }
|
||||
|
||||
// rjf: map keycode -> keysym
|
||||
U32 keysym = XLookupKeysym(&evt.xkey, 0);
|
||||
@@ -374,10 +374,10 @@ os_get_events(Arena *arena, B32 wait)
|
||||
case ButtonRelease:
|
||||
{
|
||||
// rjf: determine flags
|
||||
OS_EventFlags flags = 0;
|
||||
if(evt.xbutton.state & ShiftMask) { flags |= OS_EventFlag_Shift; }
|
||||
if(evt.xbutton.state & ControlMask) { flags |= OS_EventFlag_Ctrl; }
|
||||
if(evt.xbutton.state & Mod1Mask) { flags |= OS_EventFlag_Alt; }
|
||||
OS_Modifiers flags = 0;
|
||||
if(evt.xbutton.state & ShiftMask) { flags |= OS_Modifier_Shift; }
|
||||
if(evt.xbutton.state & ControlMask) { flags |= OS_Modifier_Ctrl; }
|
||||
if(evt.xbutton.state & Mod1Mask) { flags |= OS_Modifier_Alt; }
|
||||
|
||||
// rjf: map button -> OS_Key
|
||||
OS_Key key = OS_Key_Null;
|
||||
@@ -442,8 +442,8 @@ os_get_events(Arena *arena, B32 wait)
|
||||
return evts;
|
||||
}
|
||||
|
||||
internal OS_EventFlags
|
||||
os_get_event_flags(void)
|
||||
internal OS_Modifiers
|
||||
os_get_modifiers(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
+58
-58
@@ -32,60 +32,60 @@ os_string_from_event_kind(OS_EventKind kind)
|
||||
}
|
||||
|
||||
internal String8List
|
||||
os_string_list_from_event_flags(Arena *arena, OS_EventFlags flags)
|
||||
os_string_list_from_modifiers(Arena *arena, OS_Modifiers modifiers)
|
||||
{
|
||||
String8List result = {0};
|
||||
String8 flag_strs[] =
|
||||
String8 modifier_strs[] =
|
||||
{
|
||||
str8_lit("Ctrl"),
|
||||
str8_lit("Shift"),
|
||||
str8_lit("Alt"),
|
||||
};
|
||||
str8_list_from_flags(arena, &result, flags, flag_strs, ArrayCount(flag_strs));
|
||||
str8_list_from_flags(arena, &result, modifiers, modifier_strs, ArrayCount(modifier_strs));
|
||||
return result;
|
||||
}
|
||||
|
||||
internal U32
|
||||
os_codepoint_from_event_flags_and_key(OS_EventFlags flags, OS_Key key)
|
||||
os_codepoint_from_modifiers_and_key(OS_Modifiers modifiers, OS_Key key)
|
||||
{
|
||||
U32 result = 0;
|
||||
|
||||
// rjf: special-case map
|
||||
local_persist read_only struct {U32 character; OS_Key key; OS_EventFlags flags;} map[] =
|
||||
local_persist read_only struct {U32 character; OS_Key key; OS_Modifiers modifiers;} map[] =
|
||||
{
|
||||
{'!', OS_Key_1, OS_EventFlag_Shift},
|
||||
{'@', OS_Key_2, OS_EventFlag_Shift},
|
||||
{'#', OS_Key_3, OS_EventFlag_Shift},
|
||||
{'$', OS_Key_4, OS_EventFlag_Shift},
|
||||
{'%', OS_Key_5, OS_EventFlag_Shift},
|
||||
{'^', OS_Key_6, OS_EventFlag_Shift},
|
||||
{'&', OS_Key_7, OS_EventFlag_Shift},
|
||||
{'*', OS_Key_8, OS_EventFlag_Shift},
|
||||
{'(', OS_Key_9, OS_EventFlag_Shift},
|
||||
{')', OS_Key_0, OS_EventFlag_Shift},
|
||||
{'_', OS_Key_Minus, OS_EventFlag_Shift},
|
||||
{'_', OS_Key_Minus, OS_EventFlag_Shift},
|
||||
{'!', OS_Key_1, OS_Modifier_Shift},
|
||||
{'@', OS_Key_2, OS_Modifier_Shift},
|
||||
{'#', OS_Key_3, OS_Modifier_Shift},
|
||||
{'$', OS_Key_4, OS_Modifier_Shift},
|
||||
{'%', OS_Key_5, OS_Modifier_Shift},
|
||||
{'^', OS_Key_6, OS_Modifier_Shift},
|
||||
{'&', OS_Key_7, OS_Modifier_Shift},
|
||||
{'*', OS_Key_8, OS_Modifier_Shift},
|
||||
{'(', OS_Key_9, OS_Modifier_Shift},
|
||||
{')', OS_Key_0, OS_Modifier_Shift},
|
||||
{'_', OS_Key_Minus, OS_Modifier_Shift},
|
||||
{'_', OS_Key_Minus, OS_Modifier_Shift},
|
||||
{'-', OS_Key_Minus, 0},
|
||||
{'=', OS_Key_Equal, 0},
|
||||
{'+', OS_Key_Equal, OS_EventFlag_Shift},
|
||||
{'+', OS_Key_Equal, OS_Modifier_Shift},
|
||||
{'`', OS_Key_Tick, 0},
|
||||
{'~', OS_Key_Tick, OS_EventFlag_Shift},
|
||||
{'~', OS_Key_Tick, OS_Modifier_Shift},
|
||||
{'[', OS_Key_LeftBracket, 0},
|
||||
{']', OS_Key_RightBracket, 0},
|
||||
{'{', OS_Key_LeftBracket, OS_EventFlag_Shift},
|
||||
{'}', OS_Key_RightBracket, OS_EventFlag_Shift},
|
||||
{'{', OS_Key_LeftBracket, OS_Modifier_Shift},
|
||||
{'}', OS_Key_RightBracket, OS_Modifier_Shift},
|
||||
{'\\', OS_Key_BackSlash, 0},
|
||||
{'|', OS_Key_BackSlash, OS_EventFlag_Shift},
|
||||
{'|', OS_Key_BackSlash, OS_Modifier_Shift},
|
||||
{';', OS_Key_Semicolon, 0},
|
||||
{':', OS_Key_Semicolon, OS_EventFlag_Shift},
|
||||
{':', OS_Key_Semicolon, OS_Modifier_Shift},
|
||||
{'\'', OS_Key_Quote, 0},
|
||||
{'"', OS_Key_Quote, OS_EventFlag_Shift},
|
||||
{'"', OS_Key_Quote, OS_Modifier_Shift},
|
||||
{'.', OS_Key_Period, 0},
|
||||
{',', OS_Key_Comma, 0},
|
||||
{'<', OS_Key_Period, OS_EventFlag_Shift},
|
||||
{'>', OS_Key_Comma, OS_EventFlag_Shift},
|
||||
{'<', OS_Key_Period, OS_Modifier_Shift},
|
||||
{'>', OS_Key_Comma, OS_Modifier_Shift},
|
||||
{'/', OS_Key_Slash, 0},
|
||||
{'?', OS_Key_Slash, OS_EventFlag_Shift},
|
||||
{'?', OS_Key_Slash, OS_Modifier_Shift},
|
||||
{'a', OS_Key_A, 0},
|
||||
{'b', OS_Key_B, 0},
|
||||
{'c', OS_Key_C, 0},
|
||||
@@ -112,32 +112,32 @@ os_codepoint_from_event_flags_and_key(OS_EventFlags flags, OS_Key key)
|
||||
{'x', OS_Key_X, 0},
|
||||
{'y', OS_Key_Y, 0},
|
||||
{'z', OS_Key_Z, 0},
|
||||
{'A', OS_Key_A, OS_EventFlag_Shift},
|
||||
{'B', OS_Key_B, OS_EventFlag_Shift},
|
||||
{'C', OS_Key_C, OS_EventFlag_Shift},
|
||||
{'D', OS_Key_D, OS_EventFlag_Shift},
|
||||
{'E', OS_Key_E, OS_EventFlag_Shift},
|
||||
{'F', OS_Key_F, OS_EventFlag_Shift},
|
||||
{'G', OS_Key_G, OS_EventFlag_Shift},
|
||||
{'H', OS_Key_H, OS_EventFlag_Shift},
|
||||
{'I', OS_Key_I, OS_EventFlag_Shift},
|
||||
{'J', OS_Key_J, OS_EventFlag_Shift},
|
||||
{'K', OS_Key_K, OS_EventFlag_Shift},
|
||||
{'L', OS_Key_L, OS_EventFlag_Shift},
|
||||
{'M', OS_Key_M, OS_EventFlag_Shift},
|
||||
{'N', OS_Key_N, OS_EventFlag_Shift},
|
||||
{'O', OS_Key_O, OS_EventFlag_Shift},
|
||||
{'P', OS_Key_P, OS_EventFlag_Shift},
|
||||
{'Q', OS_Key_Q, OS_EventFlag_Shift},
|
||||
{'R', OS_Key_R, OS_EventFlag_Shift},
|
||||
{'S', OS_Key_S, OS_EventFlag_Shift},
|
||||
{'T', OS_Key_T, OS_EventFlag_Shift},
|
||||
{'U', OS_Key_U, OS_EventFlag_Shift},
|
||||
{'V', OS_Key_V, OS_EventFlag_Shift},
|
||||
{'W', OS_Key_W, OS_EventFlag_Shift},
|
||||
{'X', OS_Key_X, OS_EventFlag_Shift},
|
||||
{'Y', OS_Key_Y, OS_EventFlag_Shift},
|
||||
{'Z', OS_Key_Z, OS_EventFlag_Shift},
|
||||
{'A', OS_Key_A, OS_Modifier_Shift},
|
||||
{'B', OS_Key_B, OS_Modifier_Shift},
|
||||
{'C', OS_Key_C, OS_Modifier_Shift},
|
||||
{'D', OS_Key_D, OS_Modifier_Shift},
|
||||
{'E', OS_Key_E, OS_Modifier_Shift},
|
||||
{'F', OS_Key_F, OS_Modifier_Shift},
|
||||
{'G', OS_Key_G, OS_Modifier_Shift},
|
||||
{'H', OS_Key_H, OS_Modifier_Shift},
|
||||
{'I', OS_Key_I, OS_Modifier_Shift},
|
||||
{'J', OS_Key_J, OS_Modifier_Shift},
|
||||
{'K', OS_Key_K, OS_Modifier_Shift},
|
||||
{'L', OS_Key_L, OS_Modifier_Shift},
|
||||
{'M', OS_Key_M, OS_Modifier_Shift},
|
||||
{'N', OS_Key_N, OS_Modifier_Shift},
|
||||
{'O', OS_Key_O, OS_Modifier_Shift},
|
||||
{'P', OS_Key_P, OS_Modifier_Shift},
|
||||
{'Q', OS_Key_Q, OS_Modifier_Shift},
|
||||
{'R', OS_Key_R, OS_Modifier_Shift},
|
||||
{'S', OS_Key_S, OS_Modifier_Shift},
|
||||
{'T', OS_Key_T, OS_Modifier_Shift},
|
||||
{'U', OS_Key_U, OS_Modifier_Shift},
|
||||
{'V', OS_Key_V, OS_Modifier_Shift},
|
||||
{'W', OS_Key_W, OS_Modifier_Shift},
|
||||
{'X', OS_Key_X, OS_Modifier_Shift},
|
||||
{'Y', OS_Key_Y, OS_Modifier_Shift},
|
||||
{'Z', OS_Key_Z, OS_Modifier_Shift},
|
||||
};
|
||||
|
||||
// rjf: check numeric
|
||||
@@ -149,7 +149,7 @@ os_codepoint_from_event_flags_and_key(OS_EventFlags flags, OS_Key key)
|
||||
// rjf: check special-case map
|
||||
for(U64 idx = 0; idx < ArrayCount(map); idx += 1)
|
||||
{
|
||||
if(map[idx].key == key && map[idx].flags == flags)
|
||||
if(map[idx].key == key && map[idx].modifiers == modifiers)
|
||||
{
|
||||
result = map[idx].character;
|
||||
break;
|
||||
@@ -167,13 +167,13 @@ os_eat_event(OS_EventList *events, OS_Event *event)
|
||||
}
|
||||
|
||||
internal B32
|
||||
os_key_press(OS_EventList *events, OS_Handle window, OS_EventFlags flags, OS_Key key)
|
||||
os_key_press(OS_EventList *events, OS_Handle window, OS_Modifiers modifiers, OS_Key key)
|
||||
{
|
||||
B32 result = 0;
|
||||
for(OS_Event *event = events->first; event != 0; event = event->next)
|
||||
{
|
||||
if((os_handle_match(event->window, window) || os_handle_match(window, os_handle_zero())) &&
|
||||
event->kind == OS_EventKind_Press && event->key == key && event->flags == flags)
|
||||
event->kind == OS_EventKind_Press && event->key == key && event->modifiers == modifiers)
|
||||
{
|
||||
result = 1;
|
||||
os_eat_event(events, event);
|
||||
@@ -184,13 +184,13 @@ os_key_press(OS_EventList *events, OS_Handle window, OS_EventFlags flags, OS_Key
|
||||
}
|
||||
|
||||
internal B32
|
||||
os_key_release(OS_EventList *events, OS_Handle window, OS_EventFlags flags, OS_Key key)
|
||||
os_key_release(OS_EventList *events, OS_Handle window, OS_Modifiers modifiers, OS_Key key)
|
||||
{
|
||||
B32 result = 0;
|
||||
for(OS_Event *event = events->first; event != 0; event = event->next)
|
||||
{
|
||||
if((os_handle_match(event->window, window) || os_handle_match(window, os_handle_zero())) &&
|
||||
event->kind == OS_EventKind_Release && event->key == key && event->flags == flags)
|
||||
event->kind == OS_EventKind_Release && event->key == key && event->modifiers == modifiers)
|
||||
{
|
||||
result = 1;
|
||||
os_eat_event(events, event);
|
||||
|
||||
+10
-10
@@ -66,12 +66,12 @@ typedef enum OS_EventKind
|
||||
}
|
||||
OS_EventKind;
|
||||
|
||||
typedef U32 OS_EventFlags;
|
||||
typedef U32 OS_Modifiers;
|
||||
enum
|
||||
{
|
||||
OS_EventFlag_Ctrl = (1<<0),
|
||||
OS_EventFlag_Shift = (1<<1),
|
||||
OS_EventFlag_Alt = (1<<2),
|
||||
OS_Modifier_Ctrl = (1<<0),
|
||||
OS_Modifier_Shift = (1<<1),
|
||||
OS_Modifier_Alt = (1<<2),
|
||||
};
|
||||
|
||||
typedef struct OS_Event OS_Event;
|
||||
@@ -82,7 +82,7 @@ struct OS_Event
|
||||
U64 timestamp_us;
|
||||
OS_Handle window;
|
||||
OS_EventKind kind;
|
||||
OS_EventFlags flags;
|
||||
OS_Modifiers modifiers;
|
||||
OS_Key key;
|
||||
B32 is_repeat;
|
||||
B32 right_sided;
|
||||
@@ -110,11 +110,11 @@ internal B32 frame(void);
|
||||
//~ rjf: Event Functions (Helpers, Implemented Once)
|
||||
|
||||
internal String8 os_string_from_event_kind(OS_EventKind kind);
|
||||
internal String8List os_string_list_from_event_flags(Arena *arena, OS_EventFlags flags);
|
||||
internal U32 os_codepoint_from_event_flags_and_key(OS_EventFlags flags, OS_Key key);
|
||||
internal String8List os_string_list_from_modifiers(Arena *arena, OS_Modifiers flags);
|
||||
internal U32 os_codepoint_from_modifiers_and_key(OS_Modifiers flags, OS_Key key);
|
||||
internal void os_eat_event(OS_EventList *events, OS_Event *event);
|
||||
internal B32 os_key_press(OS_EventList *events, OS_Handle window, OS_EventFlags flags, OS_Key key);
|
||||
internal B32 os_key_release(OS_EventList *events, OS_Handle window, OS_EventFlags flags, OS_Key key);
|
||||
internal B32 os_key_press(OS_EventList *events, OS_Handle window, OS_Modifiers modifiers, OS_Key key);
|
||||
internal B32 os_key_release(OS_EventList *events, OS_Handle window, OS_Modifiers modifiers, OS_Key key);
|
||||
internal B32 os_text(OS_EventList *events, OS_Handle window, U32 character);
|
||||
internal OS_EventList os_event_list_copy(Arena *arena, OS_EventList *src);
|
||||
internal void os_event_list_concat_in_place(OS_EventList *dst, OS_EventList *to_push);
|
||||
@@ -173,7 +173,7 @@ internal Vec2F32 os_dim_from_monitor(OS_Handle monitor);
|
||||
|
||||
internal void os_send_wakeup_event(void);
|
||||
internal OS_EventList os_get_events(Arena *arena, B32 wait);
|
||||
internal OS_EventFlags os_get_event_flags(void);
|
||||
internal OS_Modifiers os_get_modifiers(void);
|
||||
internal Vec2F32 os_mouse_from_window(OS_Handle window);
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
@@ -190,10 +190,10 @@ os_get_events(Arena *arena, B32 wait)
|
||||
return evts;
|
||||
}
|
||||
|
||||
internal OS_EventFlags
|
||||
os_get_event_flags(void)
|
||||
internal OS_Modifiers
|
||||
os_get_modifiers(void)
|
||||
{
|
||||
OS_EventFlags f = 0;
|
||||
OS_Modifiers f = 0;
|
||||
return f;
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ os_w32_push_event(OS_EventKind kind, OS_W32_Window *window)
|
||||
{
|
||||
OS_Event *result = os_event_list_push_new(os_w32_event_arena, &os_w32_event_list, kind);
|
||||
result->window = os_w32_handle_from_window(window);
|
||||
result->flags = os_get_event_flags();
|
||||
result->modifiers = os_get_modifiers();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -475,9 +475,9 @@ os_w32_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
event->repeat_count = lParam & bitmask16;
|
||||
event->is_repeat = is_repeat;
|
||||
event->right_sided = right_sided;
|
||||
if(event->key == OS_Key_Alt && event->flags & OS_EventFlag_Alt) { event->flags &= ~OS_EventFlag_Alt; }
|
||||
if(event->key == OS_Key_Ctrl && event->flags & OS_EventFlag_Ctrl) { event->flags &= ~OS_EventFlag_Ctrl; }
|
||||
if(event->key == OS_Key_Shift && event->flags & OS_EventFlag_Shift) { event->flags &= ~OS_EventFlag_Shift; }
|
||||
if(event->key == OS_Key_Alt && event->modifiers & OS_Modifier_Alt) { event->modifiers &= ~OS_Modifier_Alt; }
|
||||
if(event->key == OS_Key_Ctrl && event->modifiers & OS_Modifier_Ctrl) { event->modifiers &= ~OS_Modifier_Ctrl; }
|
||||
if(event->key == OS_Key_Shift && event->modifiers & OS_Modifier_Shift) { event->modifiers &= ~OS_Modifier_Shift; }
|
||||
}break;
|
||||
|
||||
case WM_SYSCHAR:
|
||||
@@ -493,7 +493,7 @@ os_w32_wnd_proc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
OS_Event *event = os_w32_push_event(OS_EventKind_Text, window);
|
||||
if(lParam & bit29)
|
||||
{
|
||||
event->flags |= OS_EventFlag_Alt;
|
||||
event->modifiers |= OS_Modifier_Alt;
|
||||
}
|
||||
event->character = character;
|
||||
}
|
||||
@@ -1393,23 +1393,23 @@ os_get_events(Arena *arena, B32 wait)
|
||||
return os_w32_event_list;
|
||||
}
|
||||
|
||||
internal OS_EventFlags
|
||||
os_get_event_flags(void)
|
||||
internal OS_Modifiers
|
||||
os_get_modifiers(void)
|
||||
{
|
||||
OS_EventFlags flags = 0;
|
||||
OS_Modifiers modifiers = 0;
|
||||
if(GetKeyState(VK_CONTROL) & 0x8000)
|
||||
{
|
||||
flags |= OS_EventFlag_Ctrl;
|
||||
modifiers |= OS_Modifier_Ctrl;
|
||||
}
|
||||
if(GetKeyState(VK_SHIFT) & 0x8000)
|
||||
{
|
||||
flags |= OS_EventFlag_Shift;
|
||||
modifiers |= OS_Modifier_Shift;
|
||||
}
|
||||
if(GetKeyState(VK_MENU) & 0x8000)
|
||||
{
|
||||
flags |= OS_EventFlag_Alt;
|
||||
modifiers |= OS_Modifier_Alt;
|
||||
}
|
||||
return(flags);
|
||||
return modifiers;
|
||||
}
|
||||
|
||||
internal Vec2F32
|
||||
|
||||
Reference in New Issue
Block a user