Example #1
0
 private Vector3 TryGetChangeDirection(Vector3 nextPosition, ref Direction direction)
 {
     if (ViewEdge.CheckOverEdge(LocalToWorldSpaceX(nextPosition)))
     {
         nextPosition = GlobalDirection.GetVectorInverse(ref direction) + _lastLocalPosition;
     }
     return(nextPosition);
 }
Example #2
0
        private DropInfo RootViewDropZone(ViewEdge edge, Vector2 mousePos, Rect screenRect)
        {
            float offset = ((edge & ViewEdge.FitsVertical) == ViewEdge.None) ? 50f : 70f;

            if (!this.RectFromEdge(screenRect, edge, 70f, offset).Contains(mousePos))
            {
                return(null);
            }
            return(new DropInfo(this)
            {
                type = DropInfo.Type.Pane,
                userData = new ExtraDropInfo(true, edge, 0),
                rect = this.RectFromEdge(screenRect, edge, 200f, 0f)
            });
        }
        DropInfo RootViewDropZone(ViewEdge edge, Vector2 mousePos, Rect screenRect)
        {
            var offset = (edge & ViewEdge.FitsVertical) != 0 ? kRootDropZoneThickness : kRootDropZoneOffset;

            if (!RectFromEdge(screenRect, edge, kRootDropZoneThickness, offset).Contains(mousePos))
            {
                return(null);
            }

            var dropInfo = new DropInfo(this);

            dropInfo.type     = DropInfo.Type.Pane;
            dropInfo.userData = new ExtraDropInfo(true, edge, 0);
            dropInfo.rect     = RectFromEdge(screenRect, edge, kRootDropDestinationThickness, 0f);
            return(dropInfo);
        }
Example #4
0
        private Rect RectFromEdge(Rect rect, ViewEdge edge, float thickness, float offset)
        {
            switch (edge)
            {
            case ViewEdge.Left:
                return(new Rect(rect.x - offset, rect.y, thickness, rect.height));

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

            case ViewEdge.Top:
                return(new Rect(rect.x, rect.y - offset, rect.width, thickness));

            case ViewEdge.Right:
                return(new Rect((rect.xMax - thickness) + offset, rect.y, thickness, rect.height));
            }
            throw new ArgumentException("Specify exactly one edge");
        }
 public ExtraDropInfo(bool rootWindow, ViewEdge edge, int index)
 {
     this.rootWindow = rootWindow;
     this.edge       = edge;
     this.index      = index;
 }
Example #6
0
        public bool PerformDrop(EditorWindow dropWindow, DropInfo dropInfo, Vector2 screenPos)
        {
            ExtraDropInfo userData   = dropInfo.userData as ExtraDropInfo;
            bool          rootWindow = userData.rootWindow;
            ViewEdge      edge       = userData.edge;
            int           index      = userData.index;
            Rect          r          = dropInfo.rect;
            bool          flag2      = (edge & ViewEdge.Before) != ViewEdge.None;
            bool          flag3      = (edge & ViewEdge.FitsVertical) != ViewEdge.None;
            SplitView     view       = null;

            if ((this.vertical == flag3) || (base.children.Length < 2))
            {
                if (!flag2)
                {
                    if (rootWindow)
                    {
                        index = base.children.Length;
                    }
                    else
                    {
                        index++;
                    }
                }
                view = this;
            }
            else if (rootWindow)
            {
                SplitView view2 = ScriptableObject.CreateInstance <SplitView>();
                view2.position = base.position;
                if (base.window.rootView == this)
                {
                    base.window.rootView = view2;
                }
                else
                {
                    base.parent.AddChild(view2, base.parent.IndexOfChild(this));
                }
                view2.AddChild(this);
                base.position = new Rect(Vector2.zero, base.position.size);
                index         = !flag2 ? 1 : 0;
                view          = view2;
            }
            else
            {
                SplitView view3 = ScriptableObject.CreateInstance <SplitView>();
                view3.AddChild(base.children[index]);
                this.AddChild(view3, index);
                view3.position             = view3.children[0].position;
                view3.children[0].position = new Rect(Vector2.zero, view3.position.size);
                index = !flag2 ? 1 : 0;
                view  = view3;
            }
            r.position -= base.screenPosition.position;
            DockArea child = ScriptableObject.CreateInstance <DockArea>();

            view.vertical = flag3;
            view.MakeRoomForRect(r);
            view.AddChild(child, index);
            child.position = r;
            DockArea.s_OriginalDragSource.RemoveTab(dropWindow);
            dropWindow.m_Parent = child;
            child.AddTab(dropWindow);
            this.Reflow();
            RecalcMinMaxAndReflowAll(this);
            child.MakeVistaDWMHappyDance();
            return(true);
        }
Example #7
0
        public DropInfo DragOver(EditorWindow w, Vector2 mouseScreenPosition)
        {
            for (int i = 0; i < base.children.Length; i++)
            {
                View view = base.children[i];
                if ((view != DockArea.s_IgnoreDockingForView) && !(view is SplitView))
                {
                    ViewEdge none           = ViewEdge.None;
                    Rect     screenPosition = view.screenPosition;
                    Rect     rect           = this.RectFromEdge(screenPosition, ViewEdge.Bottom, screenPosition.height - 39f, 0f);
                    float    thickness      = Mathf.Min(Mathf.Round(rect.width / 3f), 300f);
                    float    num3           = Mathf.Min(Mathf.Round(rect.height / 3f), 300f);
                    Rect     rect3          = this.RectFromEdge(rect, ViewEdge.Left, thickness, 0f);
                    Rect     rect4          = this.RectFromEdge(rect, ViewEdge.Right, thickness, 0f);
                    Rect     rect5          = this.RectFromEdge(rect, ViewEdge.Bottom, num3, 0f);
                    Rect     rect6          = this.RectFromEdge(rect, ViewEdge.Top, num3, 0f);
                    if (rect3.Contains(mouseScreenPosition))
                    {
                        none |= ViewEdge.Left;
                    }
                    if (rect4.Contains(mouseScreenPosition))
                    {
                        none |= ViewEdge.Right;
                    }
                    if (rect5.Contains(mouseScreenPosition))
                    {
                        none |= ViewEdge.Bottom;
                    }
                    if (rect6.Contains(mouseScreenPosition))
                    {
                        none |= ViewEdge.Top;
                    }
                    Vector2  zero    = Vector2.zero;
                    Vector2  vector2 = Vector2.zero;
                    ViewEdge bottom  = none;
                    ViewEdge left    = none;
                    switch (none)
                    {
                    case ViewEdge.BottomLeft:
                        bottom  = ViewEdge.Bottom;
                        left    = ViewEdge.Left;
                        zero    = new Vector2(rect.x, rect.yMax) - mouseScreenPosition;
                        vector2 = new Vector2(-thickness, num3);
                        break;

                    case ViewEdge.Before:
                        bottom  = ViewEdge.Left;
                        left    = ViewEdge.Top;
                        zero    = new Vector2(rect.x, rect.y) - mouseScreenPosition;
                        vector2 = new Vector2(-thickness, -num3);
                        break;

                    case ViewEdge.After:
                        bottom  = ViewEdge.Right;
                        left    = ViewEdge.Bottom;
                        zero    = new Vector2(rect.xMax, rect.yMax) - mouseScreenPosition;
                        vector2 = new Vector2(thickness, num3);
                        break;

                    case ViewEdge.TopRight:
                        bottom  = ViewEdge.Top;
                        left    = ViewEdge.Right;
                        zero    = new Vector2(rect.xMax, rect.y) - mouseScreenPosition;
                        vector2 = new Vector2(thickness, -num3);
                        break;
                    }
                    none = (((zero.x * vector2.y) - (zero.y * vector2.x)) >= 0f) ? left : bottom;
                    if (none != ViewEdge.None)
                    {
                        float num4 = Mathf.Max(Mathf.Round((((none & ViewEdge.FitsHorizontal) == ViewEdge.None) ? screenPosition.height : screenPosition.width) / 3f), 100f);
                        return(new DropInfo(this)
                        {
                            userData = new ExtraDropInfo(false, none, i),
                            type = DropInfo.Type.Pane,
                            rect = this.RectFromEdge(screenPosition, none, num4, 0f)
                        });
                    }
                }
            }
            if (base.screenPosition.Contains(mouseScreenPosition) && !(base.parent is SplitView))
            {
                return(new DropInfo(null));
            }
            return(null);
        }
Example #8
0
 private DropInfo RootViewDropZone(ViewEdge edge, Vector2 mousePos, Rect screenRect)
 {
     float offset = ((edge & ViewEdge.FitsVertical) == ViewEdge.None) ? 50f : 70f;
     if (!this.RectFromEdge(screenRect, edge, 70f, offset).Contains(mousePos))
     {
         return null;
     }
     return new DropInfo(this) { 
         type = DropInfo.Type.Pane,
         userData = new ExtraDropInfo(true, edge, 0),
         rect = this.RectFromEdge(screenRect, edge, 200f, 0f)
     };
 }
Example #9
0
        private Rect RectFromEdge(Rect rect, ViewEdge edge, float thickness, float offset)
        {
            switch (edge)
            {
                case ViewEdge.Left:
                    return new Rect(rect.x - offset, rect.y, thickness, rect.height);

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

                case ViewEdge.Top:
                    return new Rect(rect.x, rect.y - offset, rect.width, thickness);

                case ViewEdge.Right:
                    return new Rect((rect.xMax - thickness) + offset, rect.y, thickness, rect.height);
            }
            throw new ArgumentException("Specify exactly one edge");
        }