123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- package objc_Foundation
- @(objc_class="NSEvent")
- Event :: struct {using _: Object}
- EventMask :: distinct bit_set[EventType; UInteger]
- EventMaskAny :: ~EventMask{}
- when size_of(UInteger) == 4 {
- // We don't support a 32-bit darwin system but this is mostly to shut up the type checker for the time being
- EventType :: enum UInteger {
- LeftMouseDown = 1,
- LeftMouseUp = 2,
- RightMouseDown = 3,
- RightMouseUp = 4,
- MouseMoved = 5,
- LeftMouseDragged = 6,
- RightMouseDragged = 7,
- MouseEntered = 8,
- MouseExited = 9,
- KeyDown = 10,
- KeyUp = 11,
- FlagsChanged = 12,
- AppKitDefined = 13,
- SystemDefined = 14,
- ApplicationDefined = 15,
- Periodic = 16,
- CursorUpdate = 17,
- Rotate = 18,
- BeginGesture = 19,
- EndGesture = 20,
- ScrollWheel = 22,
- TabletPoint = 23,
- TabletProximity = 24,
- OtherMouseDown = 25,
- OtherMouseUp = 26,
- OtherMouseDragged = 27,
- Gesture = 29,
- Magnify = 30,
- Swipe = 31,
- }
- } else {
- EventType :: enum UInteger {
- LeftMouseDown = 1,
- LeftMouseUp = 2,
- RightMouseDown = 3,
- RightMouseUp = 4,
- MouseMoved = 5,
- LeftMouseDragged = 6,
- RightMouseDragged = 7,
- MouseEntered = 8,
- MouseExited = 9,
- KeyDown = 10,
- KeyUp = 11,
- FlagsChanged = 12,
- AppKitDefined = 13,
- SystemDefined = 14,
- ApplicationDefined = 15,
- Periodic = 16,
- CursorUpdate = 17,
- Rotate = 18,
- BeginGesture = 19,
- EndGesture = 20,
- ScrollWheel = 22,
- TabletPoint = 23,
- TabletProximity = 24,
- OtherMouseDown = 25,
- OtherMouseUp = 26,
- OtherMouseDragged = 27,
- Gesture = 29,
- Magnify = 30,
- Swipe = 31,
- SmartMagnify = 32,
- QuickLook = 33,
- Pressure = 34,
- DirectTouch = 37,
- ChangeMode = 38,
- }
- }
- EventPhase :: distinct bit_set[EventPhaseFlag; UInteger]
- EventPhaseFlag :: enum UInteger {
- Began = 0,
- Stationary = 1,
- Changed = 2,
- Ended = 3,
- Cancelled = 4,
- MayBegin = 5,
- }
- EventPhaseNone :: EventPhase{}
- EventPhaseBegan :: EventPhase{.Began}
- EventPhaseStationary :: EventPhase{.Stationary}
- EventPhaseChanged :: EventPhase{.Changed}
- EventPhaseEnded :: EventPhase{.Ended}
- EventPhaseCancelled :: EventPhase{.Cancelled}
- EventPhaseMayBegin :: EventPhase{.MayBegin}
- /* pointer types for NSTabletProximity events or mouse events with subtype NSTabletProximityEventSubtype*/
- PointingDeviceType :: enum UInteger {
- Unknown = 0,
- Pen = 1,
- Cursor = 2,
- Eraser = 3,
- }
- // Defined in Carbon.framework Events.h
- kVK :: enum {
- ANSI_A = 0x00,
- ANSI_S = 0x01,
- ANSI_D = 0x02,
- ANSI_F = 0x03,
- ANSI_H = 0x04,
- ANSI_G = 0x05,
- ANSI_Z = 0x06,
- ANSI_X = 0x07,
- ANSI_C = 0x08,
- ANSI_V = 0x09,
- ANSI_B = 0x0B,
- ANSI_Q = 0x0C,
- ANSI_W = 0x0D,
- ANSI_E = 0x0E,
- ANSI_R = 0x0F,
- ANSI_Y = 0x10,
- ANSI_T = 0x11,
- ANSI_1 = 0x12,
- ANSI_2 = 0x13,
- ANSI_3 = 0x14,
- ANSI_4 = 0x15,
- ANSI_6 = 0x16,
- ANSI_5 = 0x17,
- ANSI_Equal = 0x18,
- ANSI_9 = 0x19,
- ANSI_7 = 0x1A,
- ANSI_Minus = 0x1B,
- ANSI_8 = 0x1C,
- ANSI_0 = 0x1D,
- ANSI_RightBracket = 0x1E,
- ANSI_O = 0x1F,
- ANSI_U = 0x20,
- ANSI_LeftBracket = 0x21,
- ANSI_I = 0x22,
- ANSI_P = 0x23,
- ANSI_L = 0x25,
- ANSI_J = 0x26,
- ANSI_Quote = 0x27,
- ANSI_K = 0x28,
- ANSI_Semicolon = 0x29,
- ANSI_Backslash = 0x2A,
- ANSI_Comma = 0x2B,
- ANSI_Slash = 0x2C,
- ANSI_N = 0x2D,
- ANSI_M = 0x2E,
- ANSI_Period = 0x2F,
- ANSI_Grave = 0x32,
- ANSI_KeypadDecimal = 0x41,
- ANSI_KeypadMultiply = 0x43,
- ANSI_KeypadPlus = 0x45,
- ANSI_KeypadClear = 0x47,
- ANSI_KeypadDivide = 0x4B,
- ANSI_KeypadEnter = 0x4C,
- ANSI_KeypadMinus = 0x4E,
- ANSI_KeypadEquals = 0x51,
- ANSI_Keypad0 = 0x52,
- ANSI_Keypad1 = 0x53,
- ANSI_Keypad2 = 0x54,
- ANSI_Keypad3 = 0x55,
- ANSI_Keypad4 = 0x56,
- ANSI_Keypad5 = 0x57,
- ANSI_Keypad6 = 0x58,
- ANSI_Keypad7 = 0x59,
- ANSI_Keypad8 = 0x5B,
- ANSI_Keypad9 = 0x5C,
- Return = 0x24,
- Tab = 0x30,
- Space = 0x31,
- Delete = 0x33,
- Escape = 0x35,
- Command = 0x37,
- Shift = 0x38,
- CapsLock = 0x39,
- Option = 0x3A,
- Control = 0x3B,
- RightCommand = 0x36,
- RightShift = 0x3C,
- RightOption = 0x3D,
- RightControl = 0x3E,
- Function = 0x3F,
- F17 = 0x40,
- VolumeUp = 0x48,
- VolumeDown = 0x49,
- Mute = 0x4A,
- F18 = 0x4F,
- F19 = 0x50,
- F20 = 0x5A,
- F5 = 0x60,
- F6 = 0x61,
- F7 = 0x62,
- F3 = 0x63,
- F8 = 0x64,
- F9 = 0x65,
- F11 = 0x67,
- F13 = 0x69,
- F16 = 0x6A,
- F14 = 0x6B,
- F10 = 0x6D,
- F12 = 0x6F,
- F15 = 0x71,
- Help = 0x72,
- Home = 0x73,
- PageUp = 0x74,
- ForwardDelete = 0x75,
- F4 = 0x76,
- End = 0x77,
- F2 = 0x78,
- PageDown = 0x79,
- F1 = 0x7A,
- LeftArrow = 0x7B,
- RightArrow = 0x7C,
- DownArrow = 0x7D,
- UpArrow = 0x7E,
- JIS_Yen = 0x5D,
- JIS_Underscore = 0x5E,
- JIS_KeypadComma = 0x5F,
- JIS_Eisu = 0x66,
- JIS_Kana = 0x68,
- ISO_Section = 0x0A,
- }
- /* these messages are valid for all events */
- @(objc_type=Event, objc_name="type")
- Event_type :: proc "c" (self: ^Event) -> EventType {
- return msgSend(EventType, self, "type")
- }
- @(objc_type=Event, objc_name="modifierFlags")
- Event_modifierFlags :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "modifierFlags")
- }
- @(objc_type=Event, objc_name="timestamp")
- Event_timestamp :: proc "c" (self: ^Event) -> TimeInterval {
- return msgSend(TimeInterval, self, "timestamp")
- }
- @(objc_type=Event, objc_name="window")
- Event_window :: proc "c" (self: ^Event) -> ^Window {
- return msgSend(^Window, self, "window")
- }
- @(objc_type=Event, objc_name="windowNumber")
- Event_windowNumber :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "windowNumber")
- }
- /* these messages are valid for all mouse down/up/drag events */
- @(objc_type=Event, objc_name="clickCount")
- Event_clickCount :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "clickCount")
- }
- // for NSOtherMouse events, but will return valid constants for NSLeftMouse and NSRightMouse
- @(objc_type=Event, objc_name="buttonNumber")
- Event_buttonNumber :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "buttonNumber")
- }
- /* these messages are valid for all mouse down/up/drag and enter/exit events */
- @(objc_type=Event, objc_name="eventNumber")
- Event_eventNumber :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "eventNumber")
- }
- /* -pressure is valid for all mouse down/up/drag events, and is also valid for NSTabletPoint events on 10.4 or later */
- @(objc_type=Event, objc_name="pressure")
- Event_pressure :: proc "c" (self: ^Event) -> f32 {
- return msgSend(f32, self, "pressure")
- }
- /* -locationInWindow is valid for all mouse-related events */
- @(objc_type=Event, objc_name="locationInWindow")
- Event_locationInWindow :: proc "c" (self: ^Event) -> Point {
- return msgSend(Point, self, "locationInWindow")
- }
- @(objc_type=Event, objc_name="deltaX")
- Event_deltaX :: proc "c" (self: ^Event) -> Float {
- return msgSend(Float, self, "deltaX")
- }
- @(objc_type=Event, objc_name="deltaY")
- Event_deltaY :: proc "c" (self: ^Event) -> Float {
- return msgSend(Float, self, "deltaY")
- }
- @(objc_type=Event, objc_name="deltaZ")
- Event_deltaZ :: proc "c" (self: ^Event) -> Float {
- return msgSend(Float, self, "deltaZ")
- }
- @(objc_type=Event, objc_name="delta")
- Event_delta :: proc "c" (self: ^Event) -> (x, y, z: Float) {
- x = self->deltaX()
- y = self->deltaY()
- z = self->deltaZ()
- return
- }
- @(objc_type=Event, objc_name="hasPreciseScrollingDeltas")
- Event_hasPreciseScrollingDeltas :: proc "c" (self: ^Event) -> BOOL {
- return msgSend(BOOL, self, "hasPreciseScrollingDeltas")
- }
- @(objc_type=Event, objc_name="scrollingDeltaX")
- Event_scrollingDeltaX :: proc "c" (self: ^Event) -> Float {
- return msgSend(Float, self, "scrollingDeltaX")
- }
- @(objc_type=Event, objc_name="scrollingDeltaY")
- Event_scrollingDeltaY :: proc "c" (self: ^Event) -> Float {
- return msgSend(Float, self, "scrollingDeltaY")
- }
- @(objc_type=Event, objc_name="scrollingDelta")
- Event_scrollingDelta :: proc "c" (self: ^Event) -> (x, y: Float) {
- x = self->scrollingDeltaX()
- y = self->scrollingDeltaY()
- return
- }
- @(objc_type=Event, objc_name="momentumPhase")
- Event_momentumPhase :: proc "c" (self: ^Event) -> EventPhase {
- return msgSend(EventPhase, self, "momentumPhase")
- }
- @(objc_type=Event, objc_name="phase")
- Event_phase :: proc "c" (self: ^Event) -> EventPhase {
- return msgSend(EventPhase, self, "phase")
- }
- @(objc_type=Event, objc_name="isDirectionInvertedFromDevice")
- Event_isDirectionInvertedFromDevice :: proc "c" (self: ^Event) -> BOOL {
- return msgSend(BOOL, self, "isDirectionInvertedFromDevice")
- }
- @(objc_type=Event, objc_name="characters")
- Event_characters :: proc "c" (self: ^Event) -> ^String {
- return msgSend(^String, self, "characters")
- }
- @(objc_type=Event, objc_name="charactersIgnoringModifiers")
- Event_charactersIgnoringModifiers :: proc "c" (self: ^Event) -> ^String {
- return msgSend(^String, self, "charactersIgnoringModifiers")
- }
- @(objc_type=Event, objc_name="isARepeat")
- Event_isARepeat :: proc "c" (self: ^Event) -> BOOL {
- return msgSend(BOOL, self, "isARepeat")
- }
- @(objc_type=Event, objc_name="keyCode")
- Event_keyCode :: proc "c" (self: ^Event) -> u16 {
- return msgSend(u16, self, "keyCode")
- }
- @(objc_type=Event, objc_name="subtype")
- Event_subtype :: proc "c" (self: ^Event) -> i16 {
- return msgSend(i16, self, "subtype")
- }
- @(objc_type=Event, objc_name="data1")
- Event_data1 :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "data1")
- }
- @(objc_type=Event, objc_name="data2")
- Event_data2 :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "data2")
- }
- @(objc_type=Event, objc_name="absoluteX")
- Event_absoluteX :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "absoluteX")
- }
- @(objc_type=Event, objc_name="absoluteY")
- Event_absoluteY :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "absoluteY")
- }
- @(objc_type=Event, objc_name="absoluteZ")
- Event_absoluteZ :: proc "c" (self: ^Event) -> Integer {
- return msgSend(Integer, self, "absoluteZ")
- }
- @(objc_type=Event, objc_name="absolute")
- Event_absolute :: proc "c" (self: ^Event) -> (x, y, z: Integer) {
- x = self->absoluteX()
- y = self->absoluteY()
- z = self->absoluteZ()
- return
- }
- @(objc_type=Event, objc_name="buttonMask")
- Event_buttonMask :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "buttonMask")
- }
- @(objc_type=Event, objc_name="tilt")
- tilt :: proc "c" (self: ^Event) -> Point {
- return msgSend(Point, self, "tilt")
- }
- @(objc_type=Event, objc_name="tangentialPressure")
- Event_tangentialPressure :: proc "c" (self: ^Event) -> f32 {
- return msgSend(f32, self, "tangentialPressure")
- }
- @(objc_type=Event, objc_name="vendorDefined")
- Event_vendorDefined :: proc "c" (self: ^Event) -> id {
- return msgSend(id, self, "vendorDefined")
- }
- @(objc_type=Event, objc_name="vendorID")
- Event_vendorID :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "vendorID")
- }
- @(objc_type=Event, objc_name="tabletID")
- Event_tabletID :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "tabletID")
- }
- @(objc_type=Event, objc_name="pointingDeviceID")
- Event_pointingDeviceID :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "pointingDeviceID")
- }
- @(objc_type=Event, objc_name="systemTabletID")
- Event_systemTabletID :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "systemTabletID")
- }
- @(objc_type=Event, objc_name="vendorPointingDeviceType")
- Event_vendorPointingDeviceType :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "vendorPointingDeviceType")
- }
- @(objc_type=Event, objc_name="pointingDeviceSerialNumber")
- Event_pointingDeviceSerialNumber :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "pointingDeviceSerialNumber")
- }
- @(objc_type=Event, objc_name="uniqueID")
- Event_uniqueID :: proc "c" (self: ^Event) -> u64 {
- return msgSend(u64, self, "uniqueID")
- }
- @(objc_type=Event, objc_name="capabilityMask")
- Event_capabilityMask :: proc "c" (self: ^Event) -> UInteger {
- return msgSend(UInteger, self, "capabilityMask")
- }
- @(objc_type=Event, objc_name="pointingDeviceType")
- Event_pointingDeviceType :: proc "c" (self: ^Event) -> PointingDeviceType {
- return msgSend(PointingDeviceType, self, "pointingDeviceType")
- }
- @(objc_type=Event, objc_name="isEnteringProximity")
- Event_isEnteringProximity :: proc "c" (self: ^Event) -> BOOL {
- return msgSend(BOOL, self, "isEnteringProximity")
- }
- @(objc_type=Event, objc_name="isSwipeTrackingFromScrollEventsEnabled")
- Event_isSwipeTrackingFromScrollEventsEnabled :: proc "c" (self: ^Event) -> BOOL {
- return msgSend(BOOL, self, "isSwipeTrackingFromScrollEventsEnabled")
- }
|