aboutsummaryrefslogtreecommitdiff
path: root/core/sys/darwin/Foundation/NSEvent.odin
diff options
context:
space:
mode:
Diffstat (limited to 'core/sys/darwin/Foundation/NSEvent.odin')
-rw-r--r--core/sys/darwin/Foundation/NSEvent.odin466
1 files changed, 466 insertions, 0 deletions
diff --git a/core/sys/darwin/Foundation/NSEvent.odin b/core/sys/darwin/Foundation/NSEvent.odin
new file mode 100644
index 000000000..b9f247230
--- /dev/null
+++ b/core/sys/darwin/Foundation/NSEvent.odin
@@ -0,0 +1,466 @@
+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")
+}