module sdl3::sdl; alias EventType = uint; const EventType EVENT_FIRST @builtin = 0; const EventType EVENT_QUIT @builtin = 0x100; const EventType EVENT_TERMINATING @builtin = 0x101; const EventType EVENT_LOW_MEMORY @builtin = 0x102; const EventType EVENT_WILL_ENTER_BACKGROUND @builtin = 0x103; const EventType EVENT_DID_ENTER_BACKGROUND @builtin = 0x104; const EventType EVENT_WILL_ENTER_FOREGROUND @builtin = 0x105; const EventType EVENT_DID_ENTER_FOREGROUND @builtin = 0x106; const EventType EVENT_LOCALE_CHANGED @builtin = 0x107; const EventType EVENT_SYSTEM_THEME_CHANGED @builtin = 0x108; const EventType EVENT_DISPLAY_ORIENTATION @builtin = 0x151; const EventType EVENT_DISPLAY_ADDED @builtin = 0x152; const EventType EVENT_DISPLAY_REMOVED @builtin = 0x153; const EventType EVENT_DISPLAY_MOVED @builtin = 0x154; const EventType EVENT_DISPLAY_DESKTOP_MODE_CHANGED @builtin = 0x155; const EventType EVENT_DISPLAY_CURRENT_MODE_CHANGED @builtin = 0x156; const EventType EVENT_DISPLAY_CONTENT_SCALE_CHANGED @builtin = 0x157; const EventType EVENT_DISPLAY_FIRST @builtin = EVENT_DISPLAY_ORIENTATION; const EventType EVENT_DISPLAY_LAST @builtin = EVENT_DISPLAY_CONTENT_SCALE_CHANGED; const EventType EVENT_WINDOW_SHOWN @builtin = 0x202; const EventType EVENT_WINDOW_HIDDEN @builtin = 0x203; const EventType EVENT_WINDOW_EXPOSED @builtin = 0x204; const EventType EVENT_WINDOW_MOVED @builtin = 0x205; const EventType EVENT_WINDOW_RESIZED @builtin = 0x206; const EventType EVENT_WINDOW_PIXEL_SIZE_CHANGED @builtin = 0x207; const EventType EVENT_WINDOW_METAL_VIEW_RESIZED @builtin = 0x208; const EventType EVENT_WINDOW_MINIMIZED @builtin = 0x208; const EventType EVENT_WINDOW_MAXIMIZED @builtin = 0x209; const EventType EVENT_WINDOW_RESTORED @builtin = 0x20a; const EventType EVENT_WINDOW_MOUSE_ENTER @builtin = 0x20b; const EventType EVENT_WINDOW_MOUSE_LEAVE @builtin = 0x20c; const EventType EVENT_WINDOW_FOCUS_GAINED @builtin = 0x20d; const EventType EVENT_WINDOW_FOCUS_LOST @builtin = 0x20e; const EventType EVENT_WINDOW_CLOSE_REQUESTED @builtin = 0x20f; const EventType EVENT_WINDOW_HIT_TEST @builtin = 0x210; const EventType EVENT_WINDOW_ICCPROF_CHANGED @builtin = 0x211; const EventType EVENT_WINDOW_DISPLAY_CHANGED @builtin = 0x212; const EventType EVENT_WINDOW_DISPLAY_SCALE_CHANGED @builtin = 0x213; const EventType EVENT_WINDOW_SAFE_AREA_CHANGED @builtin = 0x214; const EventType EVENT_WINDOW_OCCLUDED @builtin = 0x215; const EventType EVENT_WINDOW_ENTER_FULLSCREEN @builtin = 0x216; const EventType EVENT_WINDOW_LEAVE_FULLSCREEN @builtin = 0x217; const EventType EVENT_WINDOW_DESTROYED @builtin = 0x218; const EventType EVENT_WINDOW_HDR_STATE_CHANGED @builtin = 0x219; const EventType EVENT_WINDOW_FIRST @builtin = EVENT_WINDOW_SHOWN; const EventType EVENT_WINDOW_LAST @builtin = EVENT_WINDOW_HDR_STATE_CHANGED; const EventType EVENT_KEY_DOWN @builtin = 0x300; const EventType EVENT_KEY_UP @builtin = 0x301; const EventType EVENT_TEXT_EDITING @builtin = 0x302; const EventType EVENT_TEXT_INPUT @builtin = 0x303; const EventType EVENT_KEYMAP_CHANGED @builtin = 0x304; const EventType EVENT_KEYBOARD_ADDED @builtin = 0x305; const EventType EVENT_KEYBOARD_REMOVED @builtin = 0x306; const EventType EVENT_TEXT_EDITING_CANDIDATES @builtin = 0x307; const EventType EVENT_MOUSE_MOTION @builtin = 0x400; const EventType EVENT_MOUSE_BUTTON_DOWN @builtin = 0x401; const EventType EVENT_MOUSE_BUTTON_UP @builtin = 0x402; const EventType EVENT_MOUSE_WHEEL @builtin = 0x403; const EventType EVENT_MOUSE_ADDED @builtin = 0x404; const EventType EVENT_MOUSE_REMOVED @builtin = 0x405; const EventType EVENT_JOYSTICK_AXIS_MOTION @builtin = 0x600; const EventType EVENT_JOYSTICK_BALL_MOTION @builtin = 0x601; const EventType EVENT_JOYSTICK_HAT_MOTION @builtin = 0x602; const EventType EVENT_JOYSTICK_BUTTON_DOWN @builtin = 0x603; const EventType EVENT_JOYSTICK_BUTTON_UP @builtin = 0x604; const EventType EVENT_JOYSTICK_ADDED @builtin = 0x605; const EventType EVENT_JOYSTICK_REMOVED @builtin = 0x606; const EventType EVENT_JOYSTICK_BATTERY_UPDATED @builtin = 0x607; const EventType EVENT_JOYSTICK_UPDATE_COMPLETE @builtin = 0x608; const EventType EVENT_GAMEPAD_AXIS_MOTION @builtin = 0x650; const EventType EVENT_GAMEPAD_BUTTON_DOWN @builtin = 0x651; const EventType EVENT_GAMEPAD_BUTTON_UP @builtin = 0x652; const EventType EVENT_GAMEPAD_ADDED @builtin = 0x653; const EventType EVENT_GAMEPAD_REMOVED @builtin = 0x654; const EventType EVENT_GAMEPAD_REMAPPED @builtin = 0x655; const EventType EVENT_GAMEPAD_TOUCHPAD_DOWN @builtin = 0x656; const EventType EVENT_GAMEPAD_TOUCHPAD_MOTION @builtin = 0x657; const EventType EVENT_GAMEPAD_TOUCHPAD_UP @builtin = 0x658; const EventType EVENT_GAMEPAD_SENSOR_UPDATE @builtin = 0x659; const EventType EVENT_GAMEPAD_UPDATE_COMPLETE @builtin = 0x65a; const EventType EVENT_GAMEPAD_STEAM_HANDLE_UPDATED @builtin = 0x65b; const EventType EVENT_FINGER_DOWN @builtin = 0x700; const EventType EVENT_FINGER_UP @builtin = 0x701; const EventType EVENT_FINGER_MOTION @builtin = 0x702; const EventType EVENT_FINGER_CANCELED @builtin = 0x703; const EventType EVENT_CLIPBOARD_UPDATE @builtin = 0x900; const EventType EVENT_DROP_FILE @builtin = 0x1000; const EventType EVENT_DROP_TEXT @builtin = 0x1001; const EventType EVENT_DROP_BEGIN @builtin = 0x1002; const EventType EVENT_DROP_COMPLETE @builtin = 0x1003; const EventType EVENT_DROP_POSITION @builtin = 0x1004; const EventType EVENT_AUDIO_DEVICE_ADDED @builtin = 0x1100; const EventType EVENT_AUDIO_DEVICE_REMOVED @builtin = 0x1101; const EventType EVENT_AUDIO_DEVICE_FORMAT_CHANGED @builtin = 0x1102; const EventType EVENT_SENSOR_UPDATE @builtin = 0x1200; const EventType EVENT_PEN_PROXIMITY_IN @builtin = 0x1300; const EventType EVENT_PEN_PROXIMITY_OUT @builtin = 0x1301; const EventType EVENT_PEN_DOWN @builtin = 0x1302; const EventType EVENT_PEN_UP @builtin = 0x1303; const EventType EVENT_PEN_BUTTON_DOWN @builtin = 0x1304; const EventType EVENT_PEN_BUTTON_UP @builtin = 0x1305; const EventType EVENT_PEN_MOTION @builtin = 0x1306; const EventType EVENT_PEN_AXIS @builtin = 0x1307; const EventType EVENT_CAMERA_DEVICE_ADDED @builtin = 0x1400; const EventType EVENT_CAMERA_DEVICE_REMOVED @builtin = 0x1401; const EventType EVENT_CAMERA_DEVICE_APPROVED @builtin = 0x1402; const EventType EVENT_CAMERA_DEVICE_DENIED @builtin = 0x1403; const EventType EVENT_RENDER_TARGETS_RESET @builtin = 0x2000; const EventType EVENT_RENDER_DEVICE_RESET @builtin = 0x2001; const EventType EVENT_RENDER_DEVICE_LOST @builtin = 0x2002; const EventType EVENT_PRIVATE0 @builtin = 0x4000; const EventType EVENT_PRIVATE1 @builtin = 0x4001; const EventType EVENT_PRIVATE2 @builtin = 0x4002; const EventType EVENT_PRIVATE3 @builtin = 0x4003; const EventType EVENT_POLL_SENTINEL @builtin = 0x7F00; const EventType EVENT_USER @builtin = 0x8000; const EventType EVENT_LAST @builtin = 0xFFFF; const EventType EVENT_ENUM_PADDING @builtin = 0x7FFFFFFF; struct CommonEvent { uint type; uint reserved; ulong timestamp; } struct DisplayEvent { EventType type; uint reserved; ulong timestamp; DisplayID displayID; int data1; int data2; } struct WindowEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; int data1; int data2; } struct KeyboardDeviceEvent { EventType type; uint reserved; ulong timestamp; KeyboardID which; } struct KeyboardEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; KeyboardID which; Scancode scancode; Keycode key; Keymod mod; ushort raw; bool down; bool repeat; } struct TextEditingEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; ZString text; int start; int length; } struct TextEditingCandidatesEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; ZString* candidates; int num_candidates; int selected_candidate; bool horizontal; char padding1; char padding2; char padding3; } struct TextInputEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; ZString text; } struct MouseDeviceEvent { EventType type; uint reserved; ulong timestamp; MouseID which; } struct MouseMotionEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; MouseID which; MouseButtonFlags state; float x; float y; float xrel; float yrel; } struct MouseButtonEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; MouseID which; char button; bool down; char clicks; char padding; float x; float y; } struct MouseWheelEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; MouseID which; float x; float y; MouseWheelDirection direction; float mouse_x; float mouse_y; int integer_x; int integer_y; } struct JoyAxisEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; char axis; char padding1; char padding2; char padding3; short value; ushort padding4; } struct JoyBallEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; char ball; char padding1; char padding2; char padding3; short xrel; short yrel; } struct JoyHatEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; char hat; char value; char padding1; char padding2; } struct JoyButtonEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; char button; bool down; char padding1; char padding2; } struct JoyDeviceEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; } struct JoyBatteryEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; PowerState state; int percent; } struct GamepadAxisEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; char axis; char padding1; char padding2; char padding3; short value; ushort padding4; } struct GamepadButtonEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; char button; bool down; char padding1; char padding2; } struct GamepadDeviceEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; } struct GamepadTouchpadEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; int touchpad; int finger; float x; float y; float pressure; } struct GamepadSensorEvent { EventType type; uint reserved; ulong timestamp; JoystickID which; int sensor; float[3] data; ulong sensor_timestamp; } struct AudioDeviceEvent { EventType type; uint reserved; ulong timestamp; AudioDeviceID which; bool recording; char padding1; char padding2; char padding3; } struct CameraDeviceEvent { EventType type; uint reserved; ulong timestamp; CameraID which; } struct RenderEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; } struct TouchFingerEvent { EventType type; uint reserved; ulong timestamp; TouchID touchID; FingerID fingerID; float x; float y; float dx; float dy; float pressure; WindowID windowID; } struct PenProximityEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; PenID which; } struct PenMotionEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; PenID which; PenInputFlags pen_state; float x; float y; } struct PenTouchEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; PenID which; PenInputFlags pen_state; float x; float y; bool eraser; bool down; } struct PenButtonEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; PenID which; PenInputFlags pen_state; float x; float y; char button; bool down; } struct PenAxisEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; PenID which; PenInputFlags pen_state; float x; float y; PenAxis axis; float value; } struct DropEvent { EventType type; uint reserved; ulong timestamp; WindowID windowID; float x; float y; ZString source; ZString data; } struct ClipboardEvent { EventType type; uint reserved; ulong timestamp; bool owner; int num_mime_types; ZString* mime_types; } struct SensorEvent { EventType type; uint reserved; ulong timestamp; SensorID which; float[6] data; ulong sensor_timestamp; } struct QuitEvent { EventType type; uint reserved; ulong timestamp; } struct UserEvent { uint type; uint reserved; ulong timestamp; WindowID windowID; int code; void* data1; void* data2; } union Event { uint type; CommonEvent common; DisplayEvent display; WindowEvent window; KeyboardDeviceEvent kdevice; KeyboardEvent key; TextEditingEvent edit; TextEditingCandidatesEvent edit_candidates; TextInputEvent text; MouseDeviceEvent mdevice; MouseMotionEvent motion; MouseButtonEvent button; MouseWheelEvent wheel; JoyDeviceEvent jdevice; JoyAxisEvent jaxis; JoyBallEvent jball; JoyHatEvent jhat; JoyButtonEvent jbutton; JoyBatteryEvent jbattery; GamepadDeviceEvent gdevice; GamepadAxisEvent gaxis; GamepadButtonEvent gbutton; GamepadTouchpadEvent gtouchpad; GamepadSensorEvent gsensor; AudioDeviceEvent adevice; CameraDeviceEvent cdevice; SensorEvent sensor; QuitEvent quit; UserEvent user; TouchFingerEvent tfinger; PenProximityEvent pproximity; PenTouchEvent ptouch; PenMotionEvent pmotion; PenButtonEvent pbutton; PenAxisEvent paxis; RenderEvent render; DropEvent drop; ClipboardEvent clipboard; char[128] padding; } extern fn void pump_events() @extern("SDL_PumpEvents"); enum EventAction : inline CInt { ADDEVENT, PEEKEVENT, GETEVENT } extern fn int peep_events(Event* events, int numevents, EventAction action, uint minType, uint maxType) @extern("SDL_PeepEvents"); extern fn bool has_event(uint type) @extern("SDL_HasEvent"); extern fn bool has_events(uint minType, uint maxType) @extern("SDL_HasEvents"); extern fn void flush_event(uint type) @extern("SDL_FlushEvent"); extern fn void flush_events(uint minType, uint maxType) @extern("SDL_FlushEvents"); extern fn bool poll_event(Event* event) @extern("SDL_PollEvent"); extern fn bool wait_event(Event* event) @extern("SDL_WaitEvent"); extern fn bool wait_event_timeout(Event* event, int timeoutMS) @extern("SDL_WaitEventTimeout"); extern fn bool push_event(Event* event) @extern("SDL_PushEvent"); alias EventFilter = fn bool(void* userdata, Event* event); extern fn void set_event_filter(EventFilter filter, void* userdata) @extern("SDL_SetEventFilter"); extern fn bool get_event_filter(EventFilter *filter, void** userdata) @extern("SDL_GetEventFilter"); extern fn bool add_event_watch(EventFilter filter, void* userdata) @extern("SDL_AddEventWatch"); extern fn void remove_event_watch(EventFilter filter, void* userdata) @extern("SDL_RemoveEventWatch"); extern fn void filter_events(EventFilter filter, void* userdata) @extern("SDL_FilterEvents"); extern fn void set_event_enabled(uint type, bool enabled) @extern("SDL_SetEventEnabled"); extern fn bool event_enabled(uint type) @extern("SDL_EventEnabled"); extern fn uint register_events(int numevents) @extern("SDL_RegisterEvents"); extern fn Window* get_window_from_event(Event* event) @extern("SDL_GetWindowFromEvent");