hitOffset method

int hitOffset(
  1. DiagramPoint localPoint
)

Implementation

int hitOffset(DiagramPoint localPoint) {
  if (lines.isEmpty) return 0;
  final regionLines = lines
      .where((line) => line.regionBounds.contains(localPoint))
      .toList();
  final candidates = regionLines.isEmpty ? lines : regionLines;
  final line = candidates.reduce((current, candidate) {
    final currentDistance = (current.bounds.center.y - localPoint.y).abs();
    final candidateDistance = (candidate.bounds.center.y - localPoint.y)
        .abs();
    return candidateDistance < currentDistance ? candidate : current;
  });
  if (line.geometry case final geometry?) {
    return line.startOffset +
        geometry.hitOffset(
          localPoint - DiagramPoint(line.bounds.left, line.bounds.top),
        );
  }
  final relative =
      ((localPoint.x - line.contentBounds.left) / line.contentBounds.width)
          .clamp(0.0, 1.0);
  return line.startOffset +
      ((line.endOffset - line.startOffset) * relative).round();
}