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)); }
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); }
static bool IsMouseEnterExitEvent(NSEventType type) { switch (type) { case NSEventType.MouseEntered: case NSEventType.MouseExited: return(true); default: return(false); } }
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); } }
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); } }
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); }
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; }
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); }
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; }
public virtual int SendActionOn(NSEventType mask);