handleMouseEvent method

  1. @override
bool handleMouseEvent(
  1. MouseEvent event
)
override

Handles mouse events routed to this renderer. Returns true if the event was consumed.

Implementation

@override
bool handleMouseEvent(term.MouseEvent event) {
  Tracer.record(_traceMouseEventId, Phase.begin, TraceCategory.events);
  try {
    final completer = _completer;
    if (completer == null || completer.isCompleted) return false;

    _lastMousePosition = Point<int>(event.x, event.y);
    var isDone = false;
    final rootElement = _rootElement;
    if (rootElement == null) return false;

    if (_mouseCaptureElement != null &&
        (event.type == term.MouseEventType.drag ||
            event.type == term.MouseEventType.release)) {
      final captureElement = _mouseCaptureElement!;
      final absOffset = _getAbsoluteOffset(captureElement);
      final sx = event.x - 1;
      final sy = event.y - 1;
      final localX = sx - absOffset.dx;
      final localY = sy - absOffset.dy;

      isDone = _routeToElement(captureElement, event, localX, localY);

      if (event.type == term.MouseEventType.release) {
        _mouseCaptureElement = null;
      }
    } else {
      isDone = _routeMouseEvent(rootElement, event, Offset.zero);
    }

    if (isDone || debugPaintHoverEnabled) {
      _scheduleRender();
    }

    return isDone;
  } finally {
    Tracer.record(_traceMouseEventId, Phase.end, TraceCategory.events);
  }
}