#import "modules/std.sx"; #import "modules/sdl3.sx"; #import "ui/types.sx"; MouseButton :: enum { none; left; middle; right; } MouseButtonData :: struct { position: Point; button: MouseButton; } MouseMotionData :: struct { position: Point; delta: Point; } MouseWheelData :: struct { position: Point; delta: Point; } KeyData :: struct { key: u32; } ResizeData :: struct { size: Size; } Event :: enum { none; quit; mouse_down: MouseButtonData; mouse_up: MouseButtonData; mouse_moved: MouseMotionData; mouse_wheel: MouseWheelData; key_down: KeyData; key_up: KeyData; text_input: string; window_resize: ResizeData; } event_position :: (e: *Event) -> ?Point { if e.* == { case .mouse_down: (d) { return d.position; } case .mouse_up: (d) { return d.position; } case .mouse_moved: (d) { return d.position; } case .mouse_wheel: (d) { return d.position; } } null; } // Translate SDL_Event → our Event type translate_sdl_event :: (sdl: *SDL_Event) -> Event { if sdl.* == { case .quit: { return .quit; } case .key_down: (data) { return .key_down(KeyData.{ key = xx data.key }); } case .key_up: (data) { return .key_up(KeyData.{ key = xx data.key }); } case .mouse_motion: (data) { return .mouse_moved(MouseMotionData.{ position = Point.{ x = data.x, y = data.y }, delta = Point.{ x = data.xrel, y = data.yrel } }); } case .mouse_button_down: (data) { btn :MouseButton = if data.button == { case 1: .left; case 2: .middle; case 3: .right; else: .none; }; return .mouse_down(MouseButtonData.{ position = Point.{ x = data.x, y = data.y }, button = btn }); } case .mouse_button_up: (data) { btn :MouseButton = if data.button == { case 1: .left; case 2: .middle; case 3: .right; else: .none; }; return .mouse_up(MouseButtonData.{ position = Point.{ x = data.x, y = data.y }, button = btn }); } case .mouse_wheel: (data) { return .mouse_wheel(MouseWheelData.{ position = Point.{ x = data.mouse_x, y = data.mouse_y }, delta = Point.{ x = data.x, y = data.y } }); } case .window_resized: (data) { return .window_resize(ResizeData.{ size = Size.{ width = xx data.data1, height = xx data.data2 } }); } } .none; }