UnityEditor.TreeViewDragging.DragElement C# (CSharp) Method

DragElement() public method

public DragElement ( TreeViewItem targetItem, Rect targetItemRect, bool firstItem ) : bool
targetItem TreeViewItem
targetItemRect UnityEngine.Rect
firstItem bool
return bool
        public virtual bool DragElement(TreeViewItem targetItem, Rect targetItemRect, bool firstItem)
        {
            DropPosition below;
            TreeViewItem parent;
            if (targetItem == null)
            {
                if (this.m_DropData != null)
                {
                    this.m_DropData.dropTargetControlID = 0;
                    this.m_DropData.rowMarkerControlID = 0;
                }
                bool perform = Event.current.type == EventType.DragPerform;
                DragAndDrop.visualMode = this.DoDrag(null, null, perform, DropPosition.Below);
                if ((DragAndDrop.visualMode != DragAndDropVisualMode.None) && perform)
                {
                    this.FinalizeDragPerformed(true);
                }
                return false;
            }
            Vector2 mousePosition = Event.current.mousePosition;
            bool flag2 = this.m_TreeView.data.CanBeParent(targetItem);
            Rect rect = targetItemRect;
            float betweenHalfHeight = !flag2 ? (targetItemRect.height * 0.5f) : this.m_TreeView.gui.halfDropBetweenHeight;
            if (firstItem)
            {
                rect.yMin -= betweenHalfHeight;
            }
            rect.yMax += betweenHalfHeight;
            if (!rect.Contains(mousePosition))
            {
                return false;
            }
            if (!flag2 || (mousePosition.y >= (targetItemRect.yMax - betweenHalfHeight)))
            {
                below = DropPosition.Below;
            }
            else if (!flag2 || (firstItem && (mousePosition.y <= (targetItemRect.yMin + betweenHalfHeight))))
            {
                below = DropPosition.Above;
            }
            else
            {
                below = DropPosition.Upon;
            }
            if (this.m_TreeView.data.IsExpanded(targetItem) && targetItem.hasChildren)
            {
                parent = targetItem;
            }
            else
            {
                parent = targetItem.parent;
            }
            DragAndDropVisualMode none = DragAndDropVisualMode.None;
            if (Event.current.type == EventType.DragPerform)
            {
                if (below == DropPosition.Upon)
                {
                    none = this.DoDrag(targetItem, targetItem, true, below);
                }
                if ((none == DragAndDropVisualMode.None) && (parent != null))
                {
                    none = this.DoDrag(parent, targetItem, true, below);
                }
                if (none != DragAndDropVisualMode.None)
                {
                    this.FinalizeDragPerformed(false);
                }
                else
                {
                    this.DragCleanup(true);
                    this.m_TreeView.NotifyListenersThatDragEnded(null, false);
                }
            }
            else
            {
                if (this.m_DropData == null)
                {
                    this.m_DropData = new DropData();
                }
                this.m_DropData.dropTargetControlID = 0;
                this.m_DropData.rowMarkerControlID = 0;
                int itemControlID = TreeView.GetItemControlID(targetItem);
                this.HandleAutoExpansion(itemControlID, targetItem, targetItemRect, betweenHalfHeight, mousePosition);
                if (below == DropPosition.Upon)
                {
                    none = this.DoDrag(targetItem, targetItem, false, below);
                }
                if (none != DragAndDropVisualMode.None)
                {
                    this.m_DropData.dropTargetControlID = itemControlID;
                    DragAndDrop.visualMode = none;
                }
                else if ((targetItem != null) && (parent != null))
                {
                    none = this.DoDrag(parent, targetItem, false, below);
                    if (none != DragAndDropVisualMode.None)
                    {
                        this.drawRowMarkerAbove = below == DropPosition.Above;
                        this.m_DropData.rowMarkerControlID = itemControlID;
                        this.m_DropData.dropTargetControlID = !this.drawRowMarkerAbove ? TreeView.GetItemControlID(parent) : 0;
                        DragAndDrop.visualMode = none;
                    }
                }
            }
            Event.current.Use();
            return true;
        }