excalidraw/src/scene/zoom.ts

28 lines
821 B
TypeScript
Raw Normal View History

2020-11-04 17:49:15 +00:00
import { NormalizedZoomValue, PointerCoords, Zoom } from "../types";
2020-11-04 17:49:15 +00:00
export const getNewZoom = (
newZoomValue: NormalizedZoomValue,
prevZoom: Zoom,
zoomOnViewportPoint: PointerCoords = { x: 0, y: 0 },
): Zoom => {
return {
2020-11-04 17:49:15 +00:00
value: newZoomValue,
translation: {
x:
zoomOnViewportPoint.x -
(zoomOnViewportPoint.x - prevZoom.translation.x) *
(newZoomValue / prevZoom.value),
y:
zoomOnViewportPoint.y -
(zoomOnViewportPoint.y - prevZoom.translation.y) *
(newZoomValue / prevZoom.value),
},
};
};
2020-11-04 17:49:15 +00:00
export const normalizeZoomValue = (zoom: number): NormalizedZoomValue => {
const normalizedZoom = parseFloat(zoom.toFixed(2));
const clampedZoom = Math.max(0.1, Math.min(normalizedZoom, 2));
2020-11-04 17:49:15 +00:00
return clampedZoom as NormalizedZoomValue;
};