22 lines
778 B
JavaScript
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];
|
|
}
|