private Vector3 TryGetChangeDirection(Vector3 nextPosition, ref Direction direction) { if (ViewEdge.CheckOverEdge(LocalToWorldSpaceX(nextPosition))) { nextPosition = GlobalDirection.GetVectorInverse(ref direction) + _lastLocalPosition; } return(nextPosition); }
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); }
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; }
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); }
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); }
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) }; }
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"); }