public static bool IsMouse(this NSEvent e, out NSMouseFlags flags) { switch (e.Type) { case NSEventType.LeftMouseDown: case NSEventType.RightMouseDown: case NSEventType.OtherMouseDown: flags = NSMouseFlags.ClickCount | NSMouseFlags.Pressure | NSMouseFlags.Down; return(true); case NSEventType.LeftMouseUp: case NSEventType.RightMouseUp: case NSEventType.OtherMouseUp: flags = NSMouseFlags.ClickCount | NSMouseFlags.Pressure | NSMouseFlags.Up; return(true); case NSEventType.LeftMouseDragged: case NSEventType.RightMouseDragged: case NSEventType.OtherMouseDragged: flags = NSMouseFlags.Drag; return(true); case NSEventType.ScrollWheel: case NSEventType.MouseMoved: flags = NSMouseFlags.None; return(true); } flags = NSMouseFlags.None; return(false); }
public static NSEvent RetargetMouseEvent(this NSEvent e, NSView target, NSMouseFlags props) { var p = target.Window.ConvertScreenToBase(e.Window.ConvertBaseToScreen(e.LocationInWindow)); var clickCount = props.HasFlag(NSMouseFlags.ClickCount) ? e.ClickCount : 0; var pressure = props.HasFlag(NSMouseFlags.Pressure) ? e.Pressure : 0; return(e.Type == NSEventType.ScrollWheel ? e // Creating ScrollWheel fails, we need to use CGEvent() or derive custom event from NSEvent : NSEvent.MouseEvent(e.Type, p, e.ModifierFlags, e.Timestamp, target.Window.WindowNumber, null, 0, clickCount, pressure)); }
public static NSEvent RetargetMouseEvent(this NSEvent e, CGPoint locationOnScreen, NSMouseFlags props) { var wnum = NSWindow.WindowNumberAtPoint(locationOnScreen, 0); var target = NSApplication.SharedApplication.WindowWithWindowNumber(wnum); if (target != null) { var location = target.ConvertScreenToBase(locationOnScreen); var clickCount = props.HasFlag(NSMouseFlags.ClickCount) ? e.ClickCount : 0; var pressure = props.HasFlag(NSMouseFlags.Pressure) ? e.Pressure : 0; return(e.Type == NSEventType.ScrollWheel ? e // Creating ScrollWheel fails, we need to use CGEvent() or derive custom event from NSEvent : NSEvent.MouseEvent(e.Type, location, e.ModifierFlags, e.Timestamp, target.WindowNumber, null, 0, clickCount, pressure)); } return(e); }