mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 21:08:40 +00:00
x11 event coverage
This commit is contained in:
@@ -367,8 +367,10 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
if(evt.xkey.state & ControlMask) { modifiers |= OS_Modifier_Ctrl; }
|
if(evt.xkey.state & ControlMask) { modifiers |= OS_Modifier_Ctrl; }
|
||||||
if(evt.xkey.state & Mod1Mask) { modifiers |= OS_Modifier_Alt; }
|
if(evt.xkey.state & Mod1Mask) { modifiers |= OS_Modifier_Alt; }
|
||||||
|
|
||||||
// rjf: map keycode -> keysym
|
// rjf: map keycode -> keysym & codepoint
|
||||||
U32 keysym = XLookupKeysym(&evt.xkey, 0);
|
KeySym keysym = 0;
|
||||||
|
U8 text[256] = {0};
|
||||||
|
U64 text_size = XLookupString(&evt.xkey, (char *)text, sizeof(text), &keysym, 0);
|
||||||
|
|
||||||
// rjf: map keysym -> OS_Key
|
// rjf: map keysym -> OS_Key
|
||||||
OS_Key key = OS_Key_Null;
|
OS_Key key = OS_Key_Null;
|
||||||
@@ -381,6 +383,19 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
else if('0' <= keysym && keysym <= '9') { key = OS_Key_0 + (keysym-'0'); }
|
else if('0' <= keysym && keysym <= '9') { key = OS_Key_0 + (keysym-'0'); }
|
||||||
}break;
|
}break;
|
||||||
case XK_Escape:{key = OS_Key_Esc;};break;
|
case XK_Escape:{key = OS_Key_Esc;};break;
|
||||||
|
case XK_BackSpace:{key = OS_Key_Backspace;}break;
|
||||||
|
case XK_Delete:{key = OS_Key_Delete;}break;
|
||||||
|
case XK_Return:{key = OS_Key_Return;}break;
|
||||||
|
case XK_Pause:{key = OS_Key_Pause;}break;
|
||||||
|
case XK_Tab:{key = OS_Key_Tab;}break;
|
||||||
|
case XK_Left:{key = OS_Key_Left;}break;
|
||||||
|
case XK_Right:{key = OS_Key_Right;}break;
|
||||||
|
case XK_Up:{key = OS_Key_Up;}break;
|
||||||
|
case XK_Down:{key = OS_Key_Down;}break;
|
||||||
|
case XK_Home:{key = OS_Key_Home;}break;
|
||||||
|
case XK_End:{key = OS_Key_End;}break;
|
||||||
|
case XK_Page_Up:{key = OS_Key_PageUp;}break;
|
||||||
|
case XK_Page_Down:{key = OS_Key_PageDown;}break;
|
||||||
case '-':{key = OS_Key_Minus;}break;
|
case '-':{key = OS_Key_Minus;}break;
|
||||||
case '=':{key = OS_Key_Equal;}break;
|
case '=':{key = OS_Key_Equal;}break;
|
||||||
case '[':{key = OS_Key_LeftBracket;}break;
|
case '[':{key = OS_Key_LeftBracket;}break;
|
||||||
@@ -421,12 +436,34 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
case ' ':{key = OS_Key_Space;}break;
|
case ' ':{key = OS_Key_Space;}break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// rjf: push event
|
// rjf: push text event
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xkey.window);
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, evt.type == KeyPress ? OS_EventKind_Press : OS_EventKind_Release);
|
if(evt.type == KeyPress && text_size != 0)
|
||||||
e->window.u64[0] = (U64)window;
|
{
|
||||||
e->modifiers = modifiers;
|
for(U64 off = 0; off < text_size;)
|
||||||
e->key = key;
|
{
|
||||||
|
UnicodeDecode decode = utf8_decode(text+off, text_size-off);
|
||||||
|
if(decode.codepoint != 0 && (decode.codepoint >= 32 || decode.codepoint == '\t'))
|
||||||
|
{
|
||||||
|
OS_Event *e = os_event_list_push_new(arena, &evts, OS_EventKind_Text);
|
||||||
|
e->window.u64[0] = (U64)window;
|
||||||
|
e->character = decode.codepoint;
|
||||||
|
}
|
||||||
|
if(decode.inc == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
off += decode.inc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// rjf: push key event
|
||||||
|
{
|
||||||
|
OS_Event *e = os_event_list_push_new(arena, &evts, evt.type == KeyPress ? OS_EventKind_Press : OS_EventKind_Release);
|
||||||
|
e->window.u64[0] = (U64)window;
|
||||||
|
e->modifiers = modifiers;
|
||||||
|
e->key = key;
|
||||||
|
}
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
//- rjf: mouse button presses/releases
|
//- rjf: mouse button presses/releases
|
||||||
@@ -450,7 +487,7 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rjf: push event
|
// rjf: push event
|
||||||
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xclient.window);
|
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xbutton.window);
|
||||||
OS_Event *e = os_event_list_push_new(arena, &evts, evt.type == ButtonPress ? OS_EventKind_Press : OS_EventKind_Release);
|
OS_Event *e = os_event_list_push_new(arena, &evts, evt.type == ButtonPress ? OS_EventKind_Press : OS_EventKind_Release);
|
||||||
e->window.u64[0] = (U64)window;
|
e->window.u64[0] = (U64)window;
|
||||||
e->modifiers = modifiers;
|
e->modifiers = modifiers;
|
||||||
@@ -470,9 +507,13 @@ os_get_events(Arena *arena, B32 wait)
|
|||||||
|
|
||||||
//- rjf: window focus/unfocus
|
//- rjf: window focus/unfocus
|
||||||
case FocusIn:
|
case FocusIn:
|
||||||
|
{
|
||||||
|
}break;
|
||||||
case FocusOut:
|
case FocusOut:
|
||||||
{
|
{
|
||||||
|
OS_LNX_Window *window = os_lnx_window_from_x11window(evt.xfocus.window);
|
||||||
|
OS_Event *e = os_event_list_push_new(arena, &evts, OS_EventKind_WindowLoseFocus);
|
||||||
|
e->window.u64[0] = (U64)window;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
//- rjf: client messages
|
//- rjf: client messages
|
||||||
|
|||||||
Reference in New Issue
Block a user