Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }
Esempio n. 3
0
        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);
        }