Holding shift while rotating snaps to whole increments. Kept in one place because three
handlers need it — element, multi-element and image content — and they would otherwise
drift apart.
Mirrors kRotationSnapDegrees in typograph-canvas (mousemanagers.ts), which does the same for
the viewer's image-content rotation. Duplicated rather than imported: canvas does not export
it, and a cross-repo pin for one number is not worth the coupling. Change both together.
Shared rotation behaviour for the drag handlers.
Holding shift while rotating snaps to whole increments. Kept in one place because three handlers need it — element, multi-element and image content — and they would otherwise drift apart.
Mirrors kRotationSnapDegrees in typograph-canvas (mousemanagers.ts), which does the same for the viewer's image-content rotation. Duplicated rather than imported: canvas does not export it, and a cross-repo pin for one number is not worth the coupling. Change both together.