Beispiel #1
0
        /// <summary>
        /// Get the currently hovered element.
        /// </summary>
        private BaseElement GetHoveredElement()
        {
            List <BaseElement> blockers = this.GetAllElements(true).Where(element => element.Blocker).ToList();

            List <BaseElement> hoveredElements = this.GetAllElements(true)
                                                 .Where(element => element.GetBounds().Contains(MouseInfo.Position))
                                                 .ToList();

            hoveredElements.Reverse(); // Ensures that elements rendered last are selected first when priorities are equal

            if (hoveredElements.Count <= 0)
            {
                return(null);
            }

            BaseElement result = hoveredElements.OrderByDescending(element => element.Priority).First();

            if (!blockers.Any())
            {
                return(result);
            }

            // Get the highest priority blocker and check whether the hovered element is that blocker or any of it's children
            BaseElement topBlocker = blockers.OrderByDescending(element => element.Priority).First();

            if (!topBlocker.BuildFlattenedSubTree(true).Contains(result))
            {
                result = null;
            }

            return(result);
        }