Пример #1
0
        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);
        }
Пример #2
0
        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;
        }