static void ProcessMouseEvent(MouseEvent me) { var view = FindDeepestView(Current, me.X, me.Y, out int rx, out int ry); if (view != null && view.WantContinuousButtonPressed) { wantContinuousButtonPressedView = view; } else { wantContinuousButtonPressedView = null; } RootMouseEvent?.Invoke(me); if (mouseGrabView != null) { var newxy = mouseGrabView.ScreenToView(me.X, me.Y); var nme = new MouseEvent() { X = newxy.X, Y = newxy.Y, Flags = me.Flags, OfX = me.X - newxy.X, OfY = me.Y - newxy.Y, View = view }; if (OutsideFrame(new Point(nme.X, nme.Y), mouseGrabView.Frame)) { lastMouseOwnerView?.OnMouseLeave(me); } if (mouseGrabView != null) { mouseGrabView.OnMouseEvent(nme); return; } } if (view != null) { var nme = new MouseEvent() { X = rx, Y = ry, Flags = me.Flags, OfX = rx, OfY = ry, View = view }; if (lastMouseOwnerView == null) { lastMouseOwnerView = view; view.OnMouseEnter(nme); } else if (lastMouseOwnerView != view) { lastMouseOwnerView.OnMouseLeave(nme); view.OnMouseEnter(nme); lastMouseOwnerView = view; } if (!view.WantMousePositionReports && me.Flags == MouseFlags.ReportMousePosition) { return; } if (view.WantContinuousButtonPressed) { wantContinuousButtonPressedView = view; } else { wantContinuousButtonPressedView = null; } // Should we bubbled up the event, if it is not handled? view.OnMouseEvent(nme); } }