Files

22 lines
778 B
JavaScript

/**
* Apply the exact forward transform represented by the Python reverse grid:
* source -> flip -> scale -> rotate -> output-space offset -> canvas zoom.
*
* Canvas composes calls in reverse point order, so offset must be registered
* before rotation/scale/flip here.
*/
export function applyCanvasTransform(ctx, state, zoom, centerX, centerY) {
ctx.translate(centerX, centerY);
ctx.scale(zoom, zoom);
ctx.translate(state.offsetX, state.offsetY);
ctx.rotate((state.rotation * Math.PI) / 180);
ctx.scale(state.scale, state.scale);
if (state.flipH) ctx.scale(-1, 1);
if (state.flipV) ctx.scale(1, -1);
}
export function screenDeltaToOffset(deltaX, deltaY, zoom) {
const safeZoom = Math.max(zoom, 0.0001);
return [deltaX / safeZoom, deltaY / safeZoom];
}