/// <summary>
        /// Assigns an event handler to capture mouse events.
        /// </summary>
        /// <param name="handler">The event handler that captures mouse events.</param>
        /// <remarks>
        /// If an event handler is already set to capture mouse events, the event handler is replaced with the handler specified by this method.
        /// </remarks>
        public static void CaptureMouse(this IEventHandler handler)
        {
            VisualElement ve = handler as VisualElement;

            if (ve != null)
            {
                ve.CapturePointer(PointerId.mousePointerId);
                ve.panel.ProcessPointerCapture(PointerId.mousePointerId);
            }
        }
        public static void CaptureMouse(this IEventHandler handler)
        {
            VisualElement visualElement = handler as VisualElement;
            bool          flag          = visualElement != null;

            if (flag)
            {
                visualElement.CapturePointer(PointerId.mousePointerId);
                visualElement.panel.ProcessPointerCapture(PointerId.mousePointerId);
            }
        }
        private void OnPointerMoveEvent(PointerMoveEvent evt)
        {
            if (useDragEvents)
            {
                if (m_DragState != DragState.CanStartDrag)
                {
                    return;
                }
            }
            else
            {
                if (m_DragState == DragState.Dragging)
                {
                    UpdateDrag(evt.position);
                    return;
                }

                if (m_DragState != DragState.CanStartDrag)
                {
                    return;
                }
            }

            if (Mathf.Abs(m_Start.x - evt.position.x) > k_DistanceToActivation ||
                Mathf.Abs(m_Start.y - evt.position.y) > k_DistanceToActivation)
            {
                var startDragArgs = StartDrag(m_Start);

                if (useDragEvents)
                {
                    // Drag can only be started by mouse events or else it will throw an error, so we leave early.
                    if (Event.current.type != EventType.MouseDown && Event.current.type != EventType.MouseDrag)
                    {
                        return;
                    }

                    DragAndDropUtility.dragAndDrop.StartDrag(startDragArgs);
                }
                else // Force default drag and drop client for runtime panels.
                {
                    m_Target.CapturePointer(evt.pointerId);
                    evt.StopPropagation();

                    dragAndDropClient = new DefaultDragAndDropClient();
                    dragAndDropClient.StartDrag(startDragArgs);
                }

                m_DragState = DragState.Dragging;
            }
        }
示例#4
0
 private void UpdateValueOnPointerDown(PointerDownEvent evt)
 {
     if (CanStartDrag(evt.button, evt.localPosition))
     {
         // We want to allow dragging when using a mouse in any context and when in an Editor context with any pointer type.
         if (evt.pointerType == PointerType.mouse)
         {
             m_DragElement.CaptureMouse();
             ProcessDownEvent(evt);
         }
         else if (m_DragElement.panel.contextType == ContextType.Editor)
         {
             evt.PreventDefault();
             m_DragElement.CapturePointer(evt.pointerId);
             ProcessDownEvent(evt);
         }
     }
 }