diff --git a/src/appkit.rs b/src/appkit.rs index 00e017d..62eca8f 100644 --- a/src/appkit.rs +++ b/src/appkit.rs @@ -224,6 +224,16 @@ pub enum NSEventType { NSEventTypeEndGesture = 20, } +#[repr(u64)] +pub enum NSEventSubtype { + NSWindowExposedEventType = 0, + NSApplicationActivatedEventType = 1, + NSApplicationDeactivatedEventType = 2, + NSWindowMovedEventType = 4, + NSScreenChangedEventType = 8, + NSAWTEventType = 16, +} + #[repr(u64)] pub enum NSEventMask { NSLeftMouseDownMask = 1 << NSLeftMouseDown as uint, @@ -473,6 +483,7 @@ pub trait NSWindow { unsafe fn setContentView_(self, view: id); unsafe fn setAcceptsMouseMovedEvents_(self, accept: bool); + unsafe fn isVisible(self) -> bool; } impl NSWindow for id { @@ -736,6 +747,10 @@ impl NSWindow for id { unsafe fn setAcceptsMouseMovedEvents_(self, accept: bool) { self.send_void("setAcceptsMouseMovedEvents:", accept); } + + unsafe fn isVisible(self) -> bool { + self.send_bool("isVisible", ()) + } } pub trait NSString { @@ -746,6 +761,7 @@ pub trait NSString { unsafe fn initWithUTF8String_(self, c_string: *const u8) -> id; unsafe fn stringByAppendingString_(self, other: id) -> id; unsafe fn init_str(self, string: &str) -> Self; + unsafe fn UTF8String(self) -> *const libc::c_char; } impl NSString for id { @@ -760,6 +776,10 @@ impl NSString for id { unsafe fn init_str(self, string: &str) -> id { self.initWithUTF8String_(string.as_ptr()) } + + unsafe fn UTF8String(self) -> *const libc::c_char { + self.send_string("UTF8String", ()) + } } pub trait NSView { @@ -874,7 +894,9 @@ impl NSDate for id { pub trait NSEvent { unsafe fn get_type(self) -> NSEventType; + unsafe fn get_subtype(self) -> NSEventSubtype; unsafe fn locationInWindow(self) -> NSPoint; + unsafe fn characters(self) -> id; } impl NSEvent for id { @@ -882,7 +904,15 @@ impl NSEvent for id { self.send_event("type", ()) } + unsafe fn get_subtype(self) -> NSEventSubtype { + self.send_eventSubtype("subtype", ()) + } + unsafe fn locationInWindow(self) -> NSPoint { self.send_point("locationInWindow", ()) } + + unsafe fn characters(self) -> id { + self.send("characters", ()) + } } diff --git a/src/base.rs b/src/base.rs index 965e128..47d1ef3 100644 --- a/src/base.rs +++ b/src/base.rs @@ -7,7 +7,7 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -use appkit::{CGFloat, NSPoint, NSRect, NSSize, NSEventType}; +use appkit::{CGFloat, NSPoint, NSRect, NSSize, NSEventType, NSEventSubtype}; use appkit::{NSWindowOrderingMode, NSAlignmentOptions}; use libc::{c_double, c_long, c_ulong, c_char}; @@ -96,6 +96,8 @@ pub trait ObjCMethodCall { unsafe fn send_rect(self, selector: S, args: A) -> NSRect; unsafe fn send_size(self, selector: S, args: A) -> NSSize; unsafe fn send_event(self, selector: S, args: A) -> NSEventType; + unsafe fn send_eventSubtype(self, selector: S, args: A) -> NSEventSubtype; + unsafe fn send_string(self, selector: S, args: A) -> *const libc::c_char; } impl ObjCMethodCall for id { @@ -150,6 +152,16 @@ impl ObjCMethodCall for id { -> NSEventType { args.send_event_args(self, selector.as_selector()) } + #[inline] + unsafe fn send_eventSubtype(self, selector: S, args: A) + -> NSEventSubtype { + args.send_eventSubtype_args(self, selector.as_selector()) + } + #[inline] + unsafe fn send_string(self, selector: S, args: A) + -> *const libc::c_char { + args.send_string_args(self, selector.as_selector()) + } } /// A convenience implementation that allows methods on class names to be called directly, as in: @@ -212,6 +224,16 @@ impl<'a> ObjCMethodCall for &'a str { -> NSEventType { args.send_event_args(class(self), selector.as_selector()) } + #[inline] + unsafe fn send_eventSubtype(self, selector: S, args: A) + -> NSEventSubtype { + args.send_eventSubtype_args(class(self), selector.as_selector()) + } + #[inline] + unsafe fn send_string(self, selector: S, args: A) + -> *const libc::c_char { + args.send_string_args(class(self), selector.as_selector()) + } } /// A trait that allows C strings to be used as selectors without having to convert them first. @@ -270,6 +292,14 @@ pub trait ObjCMethodEventArgs { unsafe fn send_event_args(self, receiver: id, selector: SEL) -> NSEventType; } +pub trait ObjCMethodEventSubtypeArgs { + unsafe fn send_eventSubtype_args(self, receiver: id, selector: SEL) -> NSEventSubtype; +} + +pub trait ObjCMethodStringArgs { + unsafe fn send_string_args(self, receiver: id, selector: SEL) -> *const libc::c_char; +} + impl ObjCMethodArgs for () { #[inline] unsafe fn send_args(self, receiver: id, selector: SEL) -> id { @@ -457,6 +487,13 @@ impl ObjCMethodBoolArgs for () { } } +impl ObjCMethodBoolArgs for () { + #[inline] + unsafe fn send_bool_args(self, receiver: id, selector: SEL) -> bool { + invoke_msg_bool(receiver, selector) + } +} + impl ObjCMethodBoolArgs for c_long { #[inline] unsafe fn send_bool_args(self, receiver: id, selector: SEL) -> bool { @@ -535,6 +572,21 @@ impl ObjCMethodPointArgs for (NSPoint, id) { invoke_msg_NSPoint_NSPoint_id(receiver, selector, first, second) } } + +impl ObjCMethodEventSubtypeArgs for () { + #[inline] + unsafe fn send_eventSubtype_args(self, receiver: id, selector: SEL) -> NSEventSubtype { + invoke_msg_NSEventSubtype(receiver, selector) + } +} + +impl ObjCMethodStringArgs for () { + #[inline] + unsafe fn send_string_args(self, receiver: id, selector: SEL) -> *const libc::c_char { + invoke_msg_string(receiver, selector) + } +} + /// A trait that simulates variadic parameters for method calls. #[cfg(test)]