Ejemplo n.º 1
0
        public void AnchorPanel(IPanelGroupElement source, IPanelGroupElement anchor, Direction anchorDirection)
        {
            PanelGroup group = anchor.Group;

            if (group is UnanchoredPanelGroup)
            {
                Debug.LogError("Can not anchor to an unanchored panel!");
                return;
            }

            Vector2 size;
            Panel   panel = source as Panel;

            if (panel != null)
            {
                size = panel.IsDocked ? panel.FloatingSize : panel.Size;
            }
            else
            {
                ((PanelGroup)source).Internal.UpdateLayout();
                size = source.Size;
            }

            // Fill the whole anchored area in order not to break other elements' sizes on layout update
            if (anchorDirection == Direction.Left || anchorDirection == Direction.Right)
            {
                if (anchor.Size.y > 0f)
                {
                    size.y = anchor.Size.y;
                }
            }
            else
            {
                if (anchor.Size.x > 0f)
                {
                    size.x = anchor.Size.x;
                }
            }

            if (panel != null)
            {
                panel.RectTransform.sizeDelta = size;
            }
            else
            {
                ((PanelGroup)source).Internal.UpdateBounds(source.Position, size);
            }

            bool addElementAfter = anchorDirection == Direction.Right || anchorDirection == Direction.Top;

            if (group.IsInSameDirection(anchorDirection))
            {
                if (addElementAfter)
                {
                    group.AddElementAfter(anchor, source);
                }
                else
                {
                    group.AddElementBefore(anchor, source);
                }
            }
            else
            {
                IPanelGroupElement element1, element2;
                if (addElementAfter)
                {
                    element1 = anchor;
                    element2 = source;
                }
                else
                {
                    element1 = source;
                    element2 = anchor;
                }

                PanelGroup newGroup = new PanelGroup(anchor.Canvas, anchorDirection);
                newGroup.AddElement(element1);
                newGroup.AddElement(element2);

                group.Internal.ReplaceElement(anchor, newGroup);
            }

            if (panel != null)
            {
                if (draggedPanel == panel)
                {
                    draggedPanel = null;
                }

                panel.RectTransform.SetAsFirstSibling();

                if (panel.Internal.ContentScrollRect != null)
                {
                    panel.Internal.ContentScrollRect.OnDrag(nullPointerEventData);
                }
            }
        }