fix: anchor board zoom to pointer
This commit is contained in:
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user