updateDrag static method

void updateDrag(
  1. Point<int> mousePosition
)

Updates the mouse coordinate of the active drag session and triggers dropzone hit testing.

Implementation

static void updateDrag(Point<int> mousePosition) {
  final session = _activeSession;
  if (session == null) return;

  if (!session.sourceElement.mounted) {
    cancelDrag();
    return;
  }

  session.currentMousePosition = mousePosition;

  // Find the topmost DragTargetElement under the mouse cursor
  final root = _findRoot(session.sourceElement);
  if (root == null || !root.mounted) return;

  final hitElements = root.hitTest(mousePosition);
  final hoveredTarget = hitElements
      .whereType<DragTargetElement>()
      .firstOrNull;

  if (hoveredTarget != _lastHoveredTarget) {
    final lastTarget = _lastHoveredTarget;
    if (lastTarget != null && lastTarget.mounted) {
      lastTarget.handleDragLeave(session);
    }
    if (hoveredTarget != null && hoveredTarget.mounted) {
      hoveredTarget.handleDragEnter(session);
    }
    _lastHoveredTarget = hoveredTarget;
  }

  if (hoveredTarget != null && hoveredTarget.mounted) {
    hoveredTarget.handleDragOver(session);
  }
  onDragSessionChanged?.call(session);
}