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"); }
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); }
public ExtraDropInfo(bool rootWindow, SplitView.ViewEdge edge, int index) { this.rootWindow = rootWindow; this.edge = edge; this.index = index; }
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); }
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); }