hitOffset method
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();
}