private void Input_MouseMove(object sender, MouseEventArgs e) { var ipos = new Point(e.X, e.Y); var widget = this.GetWidgetFromPosition(ipos); if (widget != this.currentMouseWidget) { if (this.currentMouseWidget != null) { var localPos = this.currentMouseWidget.PointToClient(ipos); this.currentMouseWidget.OnMouseLeave(MouseEventArgs.CreateLeave((int)localPos.X, (int)localPos.Y)); } this.currentMouseWidget = widget; if (this.currentMouseWidget != null) { var localPos = this.currentMouseWidget.PointToClient(ipos); this.currentMouseWidget.OnMouseEnter(MouseEventArgs.CreateEnter((int)localPos.X, (int)localPos.Y)); } } if (widget == null) { return; } var cpos = widget.PointToClient(ipos); widget.OnMouseMove(MouseEventArgs.CreateMovement((int)cpos.X, (int)cpos.Y)); }