internal static Control GetTopMostControl( ControlContainerBase container, Vector2 position, bool validatePosition = true, bool checkOverlay = true) { return(GetTopMostControl <Control>(container, position, validatePosition, checkOverlay)); }
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(); } } }
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); } } }
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(); } } }
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; } }