private HeliosVisual ControlAt(HeliosVisual visual, Point location) { if (!visual.IsHidden) { Point localLocation = location; switch (visual.Rotation) { case HeliosVisualRotation.CW: localLocation.X = location.Y; localLocation.Y = visual.Height - location.X; break; case HeliosVisualRotation.CCW: localLocation.X = visual.Width - location.Y; localLocation.Y = location.X; break; } foreach (HeliosVisual child in visual.Children.Reverse()) { if (!child.IsHidden && child.DisplayRectangle.Contains(localLocation)) { localLocation.X -= child.Left; localLocation.Y -= child.Top; HeliosVisual childHit = ControlAt(child, localLocation); if (childHit != null) { return(childHit); } } } if (visual.HitTest(localLocation)) { return(visual); } } return(null); }
private HeliosVisual ControlAt(HeliosVisual visual, Point location) { if (!visual.IsHidden) { Point localLocation = location; switch (visual.Rotation) { case HeliosVisualRotation.CW: localLocation.X = location.Y; localLocation.Y = visual.Height - location.X; break; case HeliosVisualRotation.CCW: localLocation.X = visual.Width - location.Y; localLocation.Y = location.X; break; } foreach (HeliosVisual child in visual.Children.Reverse()) { if (!child.IsHidden && child.DisplayRectangle.Contains(localLocation)) { localLocation.X -= child.Left; localLocation.Y -= child.Top; HeliosVisual childHit = ControlAt(child, localLocation); if (childHit != null) { return childHit; } } } if (visual.HitTest(localLocation)) { return visual; } } return null; }