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;
}