Пример #1
0
 NSEvent MakeEvent(string c, NSEventType type, double epochTime, nint winID)
 {
     return(NSEvent.KeyEvent(type, CoreGraphics.CGPoint.Empty,
                             (NSEventModifierMask)0, epochTime, winID,
                             NSGraphicsContext.CurrentContext,
                             c, c, false, 0));
 }
Пример #2
0
        public override void SendEvent(NSEvent theEvent)
        {
            lastEventType = theEvent.Type;
            var monoContentView = (MonoContentView)ContentView;

            switch (theEvent.Type)
            {
            case NSEventType.LeftMouseDown:
            case NSEventType.RightMouseDown:
            case NSEventType.OtherMouseDown:
            case NSEventType.BeginGesture:
                hitTestHandle = (IntPtr)(ContentView.Superview ?? ContentView).HitTest(theEvent.LocationInWindow)?.Handle;
                // Make sure any popup menus are closed when clicking on embedded NSView.
                if (null == Control.FromHandle(hitTestHandle))
                {
                    ToolStripManager.FireAppClicked();
                }
                break;

            case NSEventType.KeyUp:
            case NSEventType.KeyDown:
                // Emulation of ToolStrip's modal filter
                if (Application.KeyboardCapture is ToolStripDropDown)
                {
                    var monoView = (FirstResponder as NSView)?.ClosestParentOfType <MonoView>();
                    if (monoView != null)
                    {
                        if (theEvent.Type == NSEventType.KeyDown)
                        {
                            monoView.eventResponder.KeyDown(theEvent);
                        }
                        else
                        {
                            monoView.eventResponder.KeyUp(theEvent);
                        }
                        return;
                    }
                }
                break;
            }

            if (theEvent.Type == NSEventType.LeftMouseDown)
            {
                var topLevelParent = IntPtr.Zero;                       // FIXME
                mouseActivate = (MouseActivate)driver.SendMessage(ContentView.Handle, Msg.WM_MOUSEACTIVATE, topLevelParent, hitTestHandle).ToInt32();
                if (mouseActivate == MouseActivate.MA_NOACTIVATEANDEAT) // || mouseActivate == MouseActivate.MA_ACTIVATEANDEAT)
                {
                    return;
                }
            }

            base.SendEvent(theEvent);
        }
Пример #3
0
        static bool IsMouseEnterExitEvent(NSEventType type)
        {
            switch (type)
            {
            case NSEventType.MouseEntered:
            case NSEventType.MouseExited:
                return(true);

            default:
                return(false);
            }
        }
Пример #4
0
        public static OxyMouseButton ToButton(this NSEventType theType)
        {
            switch (theType)
            {
            case NSEventType.LeftMouseDown:
                return(OxyMouseButton.Left);

            case NSEventType.RightMouseDown:
                return(OxyMouseButton.Right);

            case NSEventType.OtherMouseDown:
                return(OxyMouseButton.Middle);

            default:
                return(OxyMouseButton.None);
            }
        }
Пример #5
0
        static bool IsMouseEvent(NSEventType type)
        {
            switch (type)
            {
            case NSEventType.LeftMouseDown:
            case NSEventType.LeftMouseUp:
            case NSEventType.LeftMouseDragged:
            case NSEventType.RightMouseDown:
            case NSEventType.RightMouseUp:
            case NSEventType.RightMouseDragged:
            case NSEventType.OtherMouseDown:
            case NSEventType.OtherMouseUp:
            case NSEventType.OtherMouseDragged:
            case NSEventType.MouseEntered:
            case NSEventType.MouseMoved:
            case NSEventType.MouseExited:
                return(true);

            default:
                return(false);
            }
        }
Пример #6
0
		NSEvent MakeEvent (string c, NSEventType type, double epochTime, nint winID)
		{
			return NSEvent.KeyEvent (type, CoreGraphics.CGPoint.Empty, 
									 (NSEventModifierMask) 0, epochTime, winID, 
									 NSGraphicsContext.CurrentContext, 
									 c, c, false, 0);
		}
Пример #7
0
        public override void SendEvent(NSEvent theEvent)
        {
            DebugUtility.WriteInfoIfChanged(theEvent);

            lastEventType = theEvent.Type;
            currentEvent  = theEvent;

            switch (theEvent.Type)
            {
            case NSEventType.LeftMouseDown:
            case NSEventType.RightMouseDown:
            case NSEventType.OtherMouseDown:
            case NSEventType.BeginGesture:
                hitTestHandle = (ContentView.Superview ?? ContentView).HitTest(theEvent.LocationInWindow)?.Handle ?? IntPtr.Zero;
                if (!ToolStripManager.IsChildOfActiveToolStrip(hitTestHandle))
                {
                    ToolStripManager.FireAppClicked();
                }
                break;

            case NSEventType.KeyUp:
            case NSEventType.KeyDown:
                // Emulation of ToolStrip's modal filter
                if (Application.KeyboardCapture is ToolStripDropDown capture)
                {
                    var resp = FirstResponder;
                    var h    = resp?.Handle ?? IntPtr.Zero;
                    if (h != IntPtr.Zero)
                    {
                        if (!ToolStripManager.IsChildOfActiveToolStrip(h))
                        {
                            resp = capture.Handle.AsNSObject <NSResponder>();
                        }
                    }

                    if (resp != null)
                    {
                        if (theEvent.Type == NSEventType.KeyDown)
                        {
                            resp.KeyDown(theEvent);
                        }
                        else
                        {
                            resp.KeyUp(theEvent);
                        }
                        return;
                    }
                }

                // Deliver key messages also to SWF controls that are wrappers of native controls.
                // This gives them a the chance to handle special keys
                if (!(FirstResponder is MonoView) && !(FirstResponder is WindowsEventResponder))
                {
                    var control = Control.FromChildHandle(FirstResponder.Handle);
                    if (control != null && control.Handle.ToNSObject() is NSView obj)
                    {
                        theEvent.ToKeyMsg(out Msg msg, out IntPtr wParam, out IntPtr lParam);
                        if (IntPtr.Zero != driver.SendMessage(control.Handle, msg, wParam, lParam))
                        {
                            return;
                        }
                    }
                }

                break;
            }

            if (theEvent.Type == NSEventType.LeftMouseDown)
            {
                var topLevelParent = IntPtr.Zero;                       // FIXME
                mouseActivate = (MouseActivate)driver.SendMessage(ContentView.Handle, Msg.WM_MOUSEACTIVATE, topLevelParent, hitTestHandle).ToInt32();
                if (mouseActivate == MouseActivate.MA_NOACTIVATEANDEAT) // || mouseActivate == MouseActivate.MA_ACTIVATEANDEAT)
                {
                    return;
                }
            }

            base.SendEvent(theEvent);
            currentEvent = null;
        }
Пример #8
0
        private void Print(NSEvent theEvent)
        {
            // イベントの種類
            NSEventType eventType = theEvent.Type;

            // ウィンドウ座標
            var windowLocation = theEvent.LocationInWindow;
            // ビュー座標
            var viewLocation = ConvertPointFromView(theEvent.LocationInWindow, null);
            // スクリーン座標
            var screenLocation = NSEvent.CurrentMouseLocation;

            // 押されている修飾キー
            var modifier = "";

            if ((theEvent.ModifierFlags & NSEventModifierMask.ShiftKeyMask) > 0)
            {
                modifier += "Shift ";
            }
            if ((theEvent.ModifierFlags & NSEventModifierMask.CommandKeyMask) > 0)
            {
                modifier += "Command ";
            }
            if ((theEvent.ModifierFlags & NSEventModifierMask.ControlKeyMask) > 0)
            {
                modifier += "Ctrl ";
            }
            if ((theEvent.ModifierFlags & NSEventModifierMask.AlternateKeyMask) > 0)
            {
                modifier += "Alt ";
            }
            modifier = modifier.Trim();

            // マウスイベントのボタン番号
            var button = theEvent.ButtonNumber;

            // 押されているマウスのボタン
            var buttons = "";

            if ((NSEvent.CurrentPressedMouseButtons & 1) > 0)
            {
                buttons += "Left ";
            }
            if ((NSEvent.CurrentPressedMouseButtons & 2) > 0)
            {
                buttons += "Right ";
            }
            buttons = buttons.Trim();

            // マウスホイールのスクロール量
            var scrollX = theEvent.DeltaX;
            var scrollY = theEvent.DeltaY;
            var scrollZ = theEvent.DeltaZ;

            var log =
                $"EventType={eventType} " +
                $"View=({Format(viewLocation.X)}, {Format(viewLocation.Y)}) " +
                $"Window=({Format(windowLocation.X)}, {Format(windowLocation.Y)}) " +
                $"Screen=({Format(screenLocation.X)}, {Format(screenLocation.Y)}) " +
                $"modifier={modifier} " +
                $"buttons={buttons} " +
                $"button={button} " +
                $"Wheel=(x:{Format(scrollX)}, y:{Format(scrollY)}, z:{Format(scrollZ)})";

            Debug.WriteLine(log);
        }
Пример #9
0
        public override void SendEvent(NSEvent theEvent)
        {
            DebugUtility.WriteInfoIfChanged(theEvent);

            // See notes in IsKeyWindow below.
            if (disposed)
            {
                return;
            }

            lastEventType = theEvent.Type;
            currentEvent  = theEvent;

            switch (theEvent.Type)
            {
            case NSEventType.LeftMouseDown:
            case NSEventType.RightMouseDown:
            case NSEventType.OtherMouseDown:
            case NSEventType.BeginGesture:
                if (!PreprocessMouseDown(theEvent))
                {
                    return;
                }
                break;

            case NSEventType.KeyUp:
            case NSEventType.KeyDown:
                // Emulation of ToolStrip's modal filter
                if (Application.KeyboardCapture is ToolStripDropDown capture)
                {
                    var resp = FirstResponder;
                    var h    = resp?.Handle ?? IntPtr.Zero;
                    if (h != IntPtr.Zero)
                    {
                        if (!ToolStripManager.IsChildOfActiveToolStrip(h))
                        {
                            resp = capture.Handle.AsNSObject <NSResponder>();
                        }
                    }

                    if (resp != null)
                    {
                        if (theEvent.Type == NSEventType.KeyDown)
                        {
                            resp.KeyDown(theEvent);
                        }
                        else
                        {
                            resp.KeyUp(theEvent);
                        }
                        return;
                    }
                }

                // Deliver key messages also to SWF controls that are wrappers of native controls.
                // This gives them a the chance to handle special keys
                if (!(FirstResponder is MonoView) && !(FirstResponder is WindowsEventResponder))
                {
                    var control = Control.FromChildHandle(FirstResponder.Handle);
                    if (control != null && control.Handle.ToNSObject() is NSView obj)
                    {
                        theEvent.ToKeyMsg(out Msg msg, out IntPtr wParam, out IntPtr lParam);
                        if (IntPtr.Zero != driver.SendMessage(control.Handle, msg, wParam, lParam))
                        {
                            return;
                        }
                    }
                }

                break;
            }

            base.SendEvent(theEvent);
            currentEvent = null;
        }
Пример #10
0
 public virtual int SendActionOn(NSEventType mask);