private void Reset() { this.m_Active = false; this.m_Edge = null; this.m_ConnectedPort = null; this.m_ConnectedEdgeDragHelper = null; this.m_DetachedPort = null; this.m_DetachedFromInputPort = false; }
protected void OnMouseMove(MouseMoveEvent evt) { if (this.m_Edge != null) { evt.StopPropagation(); if (this.m_DetachedPort == null) { float magnitude = (evt.mousePosition - this.m_PressPos).magnitude; if (magnitude < (float)EdgeManipulator.s_StartDragDistance) { return; } Vector2 b = new Vector2(this.m_Edge.output.GetGlobalCenter().x, this.m_Edge.output.GetGlobalCenter().y); Vector2 b2 = new Vector2(this.m_Edge.input.GetGlobalCenter().x, this.m_Edge.input.GetGlobalCenter().y); float magnitude2 = (this.m_PressPos - b).magnitude; float magnitude3 = (this.m_PressPos - b2).magnitude; this.m_DetachedFromInputPort = (magnitude3 < magnitude2); if (this.m_DetachedFromInputPort) { this.m_ConnectedPort = this.m_Edge.output; this.m_DetachedPort = this.m_Edge.input; this.m_DetachedPort.Disconnect(this.m_Edge); this.m_Edge.input = null; if (this.m_EdgePresenter != null) { this.m_EdgePresenter.input = null; } } else { this.m_ConnectedPort = this.m_Edge.input; this.m_DetachedPort = this.m_Edge.output; this.m_DetachedPort.Disconnect(this.m_Edge); this.m_Edge.output = null; if (this.m_EdgePresenter != null) { this.m_EdgePresenter.output = null; } } this.m_ConnectedEdgeDragHelper = this.m_ConnectedPort.edgeConnector.edgeDragHelper; this.m_ConnectedEdgeDragHelper.draggedPort = this.m_ConnectedPort; this.m_ConnectedEdgeDragHelper.edgeCandidate = this.m_Edge; this.m_Edge.candidatePosition = evt.mousePosition; if (this.m_ConnectedEdgeDragHelper.HandleMouseDown(this.m_LastMouseDownEvent)) { this.m_Active = true; } else { this.Reset(); } this.m_LastMouseDownEvent = null; } if (this.m_Active) { if (this.m_EdgePresenter != null) { this.m_EdgePresenter.candidatePosition = evt.mousePosition; } this.m_ConnectedEdgeDragHelper.HandleMouseMove(evt); } } }
protected void OnMouseMove(MouseMoveEvent evt) { /// If the left mouse button is not down then return if (m_Edge == null) { return; } evt.StopPropagation(); bool alreadyDetached = (m_DetachedPort != null); // If one end of the edge is not already detached then if (!alreadyDetached) { float delta = (evt.mousePosition - m_PressPos).magnitude; if (delta < s_StartDragDistance) { return; } /// Determine which end is the nearest to the mouse position then detach it. Vector2 outputPos = new Vector2(m_Edge.output.GetGlobalCenter().x, m_Edge.output.GetGlobalCenter().y); Vector2 inputPos = new Vector2(m_Edge.input.GetGlobalCenter().x, m_Edge.input.GetGlobalCenter().y); float distanceFromOutput = (m_PressPos - outputPos).magnitude; float distanceFromInput = (m_PressPos - inputPos).magnitude; m_DetachedFromInputPort = distanceFromInput < distanceFromOutput; if (m_DetachedFromInputPort) { m_ConnectedPort = m_Edge.output; m_DetachedPort = m_Edge.input; m_DetachedPort.Disconnect(m_Edge); m_Edge.input = null; if (m_EdgePresenter != null) { m_EdgePresenter.input = null; } } else { m_ConnectedPort = m_Edge.input; m_DetachedPort = m_Edge.output; m_DetachedPort.Disconnect(m_Edge); m_Edge.output = null; if (m_EdgePresenter != null) { m_EdgePresenter.output = null; } } // Use the edge drag helper of the still connected port m_ConnectedEdgeDragHelper = m_ConnectedPort.edgeConnector.edgeDragHelper; m_ConnectedEdgeDragHelper.draggedPort = m_ConnectedPort; m_ConnectedEdgeDragHelper.edgeCandidate = m_Edge; m_Edge.candidatePosition = evt.mousePosition; // Redirect the last mouse down event to active the drag helper if (m_ConnectedEdgeDragHelper.HandleMouseDown(m_LastMouseDownEvent)) { m_Active = true; } else { Reset(); } m_LastMouseDownEvent = null; } if (m_Active) { if (m_EdgePresenter != null) { m_EdgePresenter.candidatePosition = evt.mousePosition; } m_ConnectedEdgeDragHelper.HandleMouseMove(evt); } }