diff --git a/Sources/Editor/AnnotationCanvasView.swift b/Sources/Editor/AnnotationCanvasView.swift index 476d661..71e7d3a 100644 --- a/Sources/Editor/AnnotationCanvasView.swift +++ b/Sources/Editor/AnnotationCanvasView.swift @@ -108,7 +108,8 @@ final class AnnotationCanvasView: NSView { let handleRect: CGRect if item.kind == .arrow { let start = item.rect.origin - let end = CGPoint(x: item.rect.maxX, y: item.rect.maxY) + let end = CGPoint(x: item.rect.origin.x + item.rect.size.width, + y: item.rect.origin.y + item.rect.size.height) handleRect = CGRect(x: min(start.x, end.x), y: min(start.y, end.y), width: abs(end.x - start.x), height: abs(end.y - start.y)) } else if item.kind == .text { diff --git a/Sources/Editor/AnnotationRenderer.swift b/Sources/Editor/AnnotationRenderer.swift index 977850d..ccb0b03 100644 --- a/Sources/Editor/AnnotationRenderer.swift +++ b/Sources/Editor/AnnotationRenderer.swift @@ -48,7 +48,8 @@ enum AnnotationRenderer { private static func drawArrow(_ item: AnnotationItem, in context: CGContext) { let start = item.rect.origin - let end = CGPoint(x: item.rect.maxX, y: item.rect.maxY) + let end = CGPoint(x: item.rect.origin.x + item.rect.size.width, + y: item.rect.origin.y + item.rect.size.height) context.move(to: start) context.addLine(to: end) @@ -98,9 +99,11 @@ enum AnnotationRenderer { static func hitTest(point: CGPoint, item: AnnotationItem, tolerance: CGFloat = 6) -> Bool { switch item.kind { case .arrow: + let arrowEnd = CGPoint(x: item.rect.origin.x + item.rect.size.width, + y: item.rect.origin.y + item.rect.size.height) return distanceToLine(point: point, from: item.rect.origin, - to: CGPoint(x: item.rect.maxX, y: item.rect.maxY)) < tolerance + item.lineWidth + to: arrowEnd) < tolerance + item.lineWidth case .rectangle: let outer = item.rect.insetBy(dx: -(tolerance + item.lineWidth), dy: -(tolerance + item.lineWidth))