internal bool DoMouseMove(MouseMoveEventArgs e) { if (Parent == null) { return(false); } if (!isDragged) { Point im = new Point(e.X - inner.X, e.Y - inner.Y); if (hoverChild != null && hoverChild.IsDragged) { hoverChild.DoMouseMove(new MouseMoveEventArgs(im.X - hoverChild.Outer.X, im.Y - hoverChild.Outer.Y, e.XDelta, e.YDelta)); return(true); } if (inner.Contains(e.Position)) { foreach (GLControl control in controls) { if (control.Outer.Contains(im)) { if (control.DoMouseMove(new MouseMoveEventArgs(im.X - control.Outer.X, im.Y - control.Outer.Y, e.XDelta, e.YDelta))) { if (hoverChild != control) { if (hoverChild != null) { hoverChild.DoMouseLeave(); } hoverChild = control; hoverChild.DoMouseEnter(); } return(true); } } } } if (hoverChild != null) { hoverChild.DoMouseLeave(); hoverChild = null; } } if (MouseMove != null) { MouseMove(this, e); return(true); } if (MouseEnter != null || MouseLeave != null) // force correct MouseEnter/Leave handling { return(true); } return(handleMouseEvents); }