/// <summary> /// Handler for dock widget drag event. /// </summary> /// <param name="eventData">Pointer data.</param> /// <param name="dragCorners">Cached drag corners.</param> public void ProcessDockWidgetDrag(PointerEventData eventData, Vector3[] dragCorners) { DebugEx.VerboseFormat("DockingGroupScript.ProcessDockWidgetDrag(eventData = {0}, dragCorners = {1})", eventData, dragCorners); float x = Mouse.scaledX - dragCorners[0].x; DragInfoHolder.dockingArea = mParent; #region Insert dummy dock widget if absent if ( DummyDockWidgetScript.instance == null || DummyDockWidgetScript.instance.parent != this ) { DummyDockWidgetScript.Create(DragInfoHolder.dockWidget). InsertToDockingGroup(this, 0); } #endregion int dummyIndex = -1; #region Find dummy dock widget position float contentWidth = 0f; int index = 0; for (int i = 0; i < mChildren.Count; ++i) { if (mChildren[i] == DummyDockWidgetScript.instance) { dummyIndex = i; } else { RectTransform tabTransform = mTabsTransform.GetChild(i) as RectTransform; float tabWidth = tabTransform.sizeDelta.x; if ( x >= contentWidth && x <= contentWidth + tabWidth ) { if (x <= contentWidth + tabWidth / 2) { index = i; } else { index = i + 1; } } contentWidth += tabWidth; } } if (x >= contentWidth) { index = mChildren.Count; } if (dummyIndex < index) { --index; } dummyIndex = index; #endregion InsertDockWidget(DummyDockWidgetScript.instance, dummyIndex); int dockWidgetIndex = -1; #region Place tabs where it should be contentWidth = 0f; for (int i = 0; i < mChildren.Count; ++i) { if (mChildren[i] == DragInfoHolder.dockWidget) { dockWidgetIndex = i; } else { RectTransform tabTransform = mTabsTransform.GetChild(i) as RectTransform; float tabWidth = tabTransform.sizeDelta.x; if (i == dummyIndex) { Utils.AlignRectTransformStretchLeft(tabTransform, tabWidth, x - tabWidth * 0.3f, 0f, -1f); } else { Utils.AlignRectTransformStretchLeft(tabTransform, tabWidth, contentWidth, 0f, -1f); } contentWidth += tabWidth; } } #endregion if (dockWidgetIndex >= 0) { RectTransform tabTransform = mTabsTransform.GetChild(dockWidgetIndex) as RectTransform; RectTransform dummyTabTransform = mTabsTransform.GetChild(dummyIndex) as RectTransform; tabTransform.offsetMin = dummyTabTransform.offsetMin; tabTransform.offsetMax = dummyTabTransform.offsetMax; } }