Example #1
0
 internal static Control GetTopMostControl(
     ControlContainerBase container,
     Vector2 position,
     bool validatePosition = true,
     bool checkOverlay     = true)
 {
     return(GetTopMostControl <Control>(container, position, validatePosition, checkOverlay));
 }
Example #2
0
        internal static T GetTopMostControl <T>(
            ControlContainerBase container,
            Vector2 position,
            bool validatePosition = true,
            bool checkOverlay     = true) where T : Control
        {
            // Overlay control handling
            if (checkOverlay)
            {
                for (var i = Control.OverlayControls.Count - 1; i >= 0; i--)
                {
                    var overlay = Control.OverlayControls[i];
                    if (overlay.IsVisible && overlay.IsInside(position))
                    {
                        var overlayContainer = overlay as ControlContainerBase;
                        if (overlayContainer != null && !overlayContainer.GetType().IsAssignableFrom(typeof(T)))
                        {
                            return(GetTopMostControl <T>(overlayContainer, position, false, false));
                        }
                        var typedOverlay = overlay as T;
                        if (typedOverlay != null)
                        {
                            return(typedOverlay);
                        }
                    }
                }
            }

            if (validatePosition && !container.IsInside(position))
            {
                return(null);
            }

            // Regular control handling
            for (var i = container.Children.Count - 1; i >= 0; i--)
            {
                var child = container.Children[i];
                if (child.IsVisible && !child.ExcludeFromParent && child.IsInside(position))
                {
                    var childContainer = child as ControlContainerBase;
                    if (childContainer != null && !childContainer.GetType().IsAssignableFrom(typeof(T)))
                    {
                        return(GetTopMostControl <T>(childContainer, position, false, false));
                    }
                    var typedChild = child as T;
                    if (typedChild != null)
                    {
                        return(typedChild);
                    }
                }
            }

            return(container as T);
        }
 internal virtual void SetParent(ControlContainerBase parent)
 {
     if (parent == null)
     {
         Parent      = null;
         AlignOffset = Vector2.Zero;
         RecalculatePosition();
     }
     else
     {
         Parent = parent;
     }
 }
        internal ContainerView(ControlContainerBase container)
        {
            if (container == null)
            {
                throw new ArgumentNullException("container");
            }

            // Initialize properties
            Handle = container;

            // Listen to required events
            Handle.OnMouseMove  += OnMouseMove;
            Handle.OnMouseWheel += OnMouseWheel;
            Messages.RegisterEventHandler <Messages.LeftButtonUp>(OnLeftMouseUp);
        }
        internal void UpdateChildrenCropping(ControlContainerBase container)
        {
            if (!container.CropChildren)
            {
                return;
            }

            foreach (var child in container.Children)
            {
                UpdateCropping(child);
                var containerChild = child as ControlContainerBase;
                if (containerChild != null)
                {
                    containerChild.ContainerView.UpdateChildrenCropping();
                }
            }
        }
Example #6
0
        internal static void CallMouseUpMethods(ControlContainerBase container, bool leftButton = true)
        {
            CallMouseUpMethods(leftButton, container);
            foreach (var child in container.Children)
            {
                if (child.ExcludeFromParent)
                {
                    continue;
                }

                var childContainer = child as ControlContainerBase;
                if (childContainer != null)
                {
                    CallMouseUpMethods(childContainer, leftButton);
                }
                else
                {
                    CallMouseUpMethods(leftButton, child);
                }
            }
        }
Example #7
0
        internal static void RemoveAllMouseInteractions(ControlContainerBase container)
        {
            container.IsLeftMouseDown  = false;
            container.IsRightMouseDown = false;
            container.IsMouseInside    = false;
            foreach (var child in container.Children)
            {
                child.IsLeftMouseDown  = false;
                child.IsRightMouseDown = false;
                child.IsMouseInside    = false;

                var childContainer = child as ControlContainerBase;
                if (childContainer != null)
                {
                    RemoveAllMouseInteractions(childContainer);
                    continue;
                }
                var dynamicControl = child as DynamicControl;
                if (dynamicControl != null)
                {
                    dynamicControl.SetDefaultState();
                }
            }
        }
Example #8
0
        internal static void CallMouseMoveMethods(ControlContainerBase container, Vector2 mousePosition, bool isOnOverlay = false, bool overlayCheck = true)
        {
            while (true)
            {
                var children = new List <Control>();

                if (overlayCheck)
                {
                    children.AddRange(Control.OverlayControls.Where(o => o.IsVisible));
                }
                else
                {
                    if (container.IsVisible)
                    {
                        children.Add(container);
                        children.AddRange(container.Children.Where(o => o.IsVisible));
                    }
                }

                foreach (var child in children)
                {
                    if (child.ExcludeFromParent)
                    {
                        continue;
                    }

                    var mouseInside = child.IsInside(mousePosition);

                    // Mouse is on overlay, but child is not an overlay
                    if (isOnOverlay && !child.IsOverlay)
                    {
                        // Make the mouse disappear from the child which is no overlay itself
                        if (child.IsMouseInside)
                        {
                            child.IsMouseInside = false;
                            child.CallMouseLeave();
                        }
                    }
                    else
                    {
                        if (mouseInside == child.IsMouseInside)
                        {
                            child.CallMouseMove();
                        }
                        else
                        {
                            child.IsMouseInside = mouseInside;
                            if (mouseInside)
                            {
                                child.CallMouseEnter();
                            }
                            else
                            {
                                child.CallMouseLeave();
                            }
                        }
                    }

                    if (child == container)
                    {
                        continue;
                    }

                    var childContainer = child as ControlContainerBase;
                    if (childContainer != null)
                    {
                        CallMouseMoveMethods(childContainer, mousePosition, isOnOverlay, false);
                    }
                }

                if (overlayCheck)
                {
                    overlayCheck = false;
                    continue;
                }
                break;
            }
        }