コード例 #1
0
        private Rect RectFromEdge(Rect rect, SplitView.ViewEdge edge, float thickness, float offset)
        {
            switch (edge)
            {
            case SplitView.ViewEdge.Left:
            {
                Rect result = new Rect(rect.x - offset, rect.y, thickness, rect.height);
                return(result);
            }

            case SplitView.ViewEdge.Bottom:
            {
                Rect result = new Rect(rect.x, rect.yMax - thickness + offset, rect.width, thickness);
                return(result);
            }

            case SplitView.ViewEdge.Top:
            {
                Rect result = new Rect(rect.x, rect.y - offset, rect.width, thickness);
                return(result);
            }

            case SplitView.ViewEdge.Right:
            {
                Rect result = new Rect(rect.xMax - thickness + offset, rect.y, thickness, rect.height);
                return(result);
            }
            }
            throw new ArgumentException("Specify exactly one edge");
        }
コード例 #2
0
        private DropInfo RootViewDropZone(SplitView.ViewEdge edge, Vector2 mousePos, Rect screenRect)
        {
            float    offset = ((edge & SplitView.ViewEdge.FitsVertical) == SplitView.ViewEdge.None) ? 50f : 70f;
            DropInfo result;

            if (!this.RectFromEdge(screenRect, edge, 70f, offset).Contains(mousePos))
            {
                result = null;
            }
            else
            {
                result = new DropInfo(this)
                {
                    type     = DropInfo.Type.Pane,
                    userData = new SplitView.ExtraDropInfo(true, edge, 0),
                    rect     = this.RectFromEdge(screenRect, edge, 200f, 0f)
                };
            }
            return(result);
        }
コード例 #3
0
 public ExtraDropInfo(bool rootWindow, SplitView.ViewEdge edge, int index)
 {
     this.rootWindow = rootWindow;
     this.edge       = edge;
     this.index      = index;
 }
コード例 #4
0
        public bool PerformDrop(EditorWindow dropWindow, DropInfo dropInfo, Vector2 screenPos)
        {
            SplitView.ExtraDropInfo extraDropInfo = dropInfo.userData as SplitView.ExtraDropInfo;
            bool rootWindow = extraDropInfo.rootWindow;

            SplitView.ViewEdge edge = extraDropInfo.edge;
            int       num           = extraDropInfo.index;
            Rect      rect          = dropInfo.rect;
            bool      flag          = (edge & SplitView.ViewEdge.TopLeft) != SplitView.ViewEdge.None;
            bool      flag2         = (edge & SplitView.ViewEdge.FitsVertical) != SplitView.ViewEdge.None;
            SplitView splitView;

            if (this.vertical == flag2 || base.children.Length < 2)
            {
                if (!flag)
                {
                    if (rootWindow)
                    {
                        num = base.children.Length;
                    }
                    else
                    {
                        num++;
                    }
                }
                splitView = this;
            }
            else if (rootWindow)
            {
                SplitView splitView2 = ScriptableObject.CreateInstance <SplitView>();
                splitView2.position = base.position;
                if (base.window.rootView == this)
                {
                    base.window.rootView = splitView2;
                }
                else
                {
                    base.parent.AddChild(splitView2, base.parent.IndexOfChild(this));
                }
                splitView2.AddChild(this);
                base.position = new Rect(Vector2.zero, base.position.size);
                num           = ((!flag) ? 1 : 0);
                splitView     = splitView2;
            }
            else
            {
                SplitView splitView3 = ScriptableObject.CreateInstance <SplitView>();
                splitView3.AddChild(base.children[num]);
                this.AddChild(splitView3, num);
                splitView3.position             = splitView3.children[0].position;
                splitView3.children[0].position = new Rect(Vector2.zero, splitView3.position.size);
                num       = ((!flag) ? 1 : 0);
                splitView = splitView3;
            }
            rect.position -= base.screenPosition.position;
            DockArea dockArea = ScriptableObject.CreateInstance <DockArea>();

            splitView.vertical = flag2;
            splitView.MakeRoomForRect(rect);
            splitView.AddChild(dockArea, num);
            dockArea.position = rect;
            DockArea.s_OriginalDragSource.RemoveTab(dropWindow);
            dropWindow.m_Parent = dockArea;
            dockArea.AddTab(dropWindow);
            this.Reflow();
            SplitView.RecalcMinMaxAndReflowAll(this);
            dockArea.MakeVistaDWMHappyDance();
            return(true);
        }
コード例 #5
0
        public DropInfo DragOver(EditorWindow w, Vector2 mouseScreenPosition)
        {
            DropInfo result;

            for (int i = 0; i < base.children.Length; i++)
            {
                View view = base.children[i];
                if (!(view == DockArea.s_IgnoreDockingForView))
                {
                    if (!(view is SplitView))
                    {
                        SplitView.ViewEdge viewEdge = SplitView.ViewEdge.None;
                        Rect  screenPosition        = view.screenPosition;
                        Rect  rect  = this.RectFromEdge(screenPosition, SplitView.ViewEdge.Bottom, screenPosition.height - 39f, 0f);
                        float num   = Mathf.Min(Mathf.Round(rect.width / 3f), 300f);
                        float num2  = Mathf.Min(Mathf.Round(rect.height / 3f), 300f);
                        Rect  rect2 = this.RectFromEdge(rect, SplitView.ViewEdge.Left, num, 0f);
                        Rect  rect3 = this.RectFromEdge(rect, SplitView.ViewEdge.Right, num, 0f);
                        Rect  rect4 = this.RectFromEdge(rect, SplitView.ViewEdge.Bottom, num2, 0f);
                        Rect  rect5 = this.RectFromEdge(rect, SplitView.ViewEdge.Top, num2, 0f);
                        if (rect2.Contains(mouseScreenPosition))
                        {
                            viewEdge |= SplitView.ViewEdge.Left;
                        }
                        if (rect3.Contains(mouseScreenPosition))
                        {
                            viewEdge |= SplitView.ViewEdge.Right;
                        }
                        if (rect4.Contains(mouseScreenPosition))
                        {
                            viewEdge |= SplitView.ViewEdge.Bottom;
                        }
                        if (rect5.Contains(mouseScreenPosition))
                        {
                            viewEdge |= SplitView.ViewEdge.Top;
                        }
                        Vector2            vector    = Vector2.zero;
                        Vector2            zero      = Vector2.zero;
                        SplitView.ViewEdge viewEdge2 = viewEdge;
                        SplitView.ViewEdge viewEdge3 = viewEdge;
                        switch (viewEdge)
                        {
                        case SplitView.ViewEdge.BottomLeft:
                            viewEdge2 = SplitView.ViewEdge.Bottom;
                            viewEdge3 = SplitView.ViewEdge.Left;
                            vector    = new Vector2(rect.x, rect.yMax) - mouseScreenPosition;
                            zero      = new Vector2(-num, num2);
                            goto IL_22E;

                        case SplitView.ViewEdge.Top:
IL_14C:
                            switch (viewEdge)
                            {
                            case SplitView.ViewEdge.BottomRight:
                                viewEdge2 = SplitView.ViewEdge.Right;
                                viewEdge3 = SplitView.ViewEdge.Bottom;
                                vector    = new Vector2(rect.xMax, rect.yMax) - mouseScreenPosition;
                                zero      = new Vector2(num, num2);
                                goto IL_22E;

                            case SplitView.ViewEdge.Left | SplitView.ViewEdge.Bottom | SplitView.ViewEdge.Right:
                                goto IL_22E;

                            case SplitView.ViewEdge.TopRight:
                                viewEdge2 = SplitView.ViewEdge.Top;
                                viewEdge3 = SplitView.ViewEdge.Right;
                                vector    = new Vector2(rect.xMax, rect.y) - mouseScreenPosition;
                                zero      = new Vector2(num, -num2);
                                goto IL_22E;

                            default:
                                goto IL_22E;
                            }
                            break;

                        case SplitView.ViewEdge.TopLeft:
                            viewEdge2 = SplitView.ViewEdge.Left;
                            viewEdge3 = SplitView.ViewEdge.Top;
                            vector    = new Vector2(rect.x, rect.y) - mouseScreenPosition;
                            zero      = new Vector2(-num, -num2);
                            goto IL_22E;
                        }
                        goto IL_14C;
IL_22E:
                        viewEdge = ((vector.x * zero.y - vector.y * zero.x >= 0f) ? viewEdge3 : viewEdge2);
                        if (viewEdge != SplitView.ViewEdge.None)
                        {
                            float num3 = Mathf.Round((((viewEdge & SplitView.ViewEdge.FitsHorizontal) == SplitView.ViewEdge.None) ? screenPosition.height : screenPosition.width) / 3f);
                            num3   = Mathf.Max(num3, 100f);
                            result = new DropInfo(this)
                            {
                                userData = new SplitView.ExtraDropInfo(false, viewEdge, i),
                                type     = DropInfo.Type.Pane,
                                rect     = this.RectFromEdge(screenPosition, viewEdge, num3, 0f)
                            };
                            return(result);
                        }
                    }
                }
            }
            if (base.screenPosition.Contains(mouseScreenPosition) && !(base.parent is SplitView))
            {
                result = new DropInfo(null);
                return(result);
            }
            result = null;
            return(result);
        }
コード例 #6
0
 public ExtraDropInfo(bool rootWindow, SplitView.ViewEdge edge, int index)
 {
     this.rootWindow = rootWindow;
     this.edge = edge;
     this.index = index;
 }