fix: anchor board zoom to pointer

This commit is contained in:
2026-08-14 16:44:43 +02:00
parent f97dceb4fe
commit a4b22a574b
4 changed files with 34 additions and 4 deletions
+7
View File
@@ -31,6 +31,13 @@ export function zoomFromPinch(currentZoom: number, previousDistance: number, nex
return clampBoardZoom(currentZoom * nextDistance / previousDistance)
}
export function zoomViewportAt(viewport: Viewport, nextZoom: number, screenAnchor: BoardPoint): Viewport {
if (!Number.isFinite(viewport.zoom) || viewport.zoom <= 0) throw new RangeError('Board zoom must be positive')
const zoom = clampBoardZoom(nextZoom)
const boardPoint = { x: (screenAnchor.x - viewport.x) / viewport.zoom, y: (screenAnchor.y - viewport.y) / viewport.zoom }
return { x: screenAnchor.x - boardPoint.x * zoom, y: screenAnchor.y - boardPoint.y * zoom, zoom }
}
export function moveBoardPoint(origin: { x: number; y: number }, screenDelta: { x: number; y: number }, zoom: number) {
if (!Number.isFinite(zoom) || zoom <= 0) throw new RangeError('Board zoom must be positive')
return { x: origin.x + screenDelta.x / zoom, y: origin.y + screenDelta.y / zoom }