mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-24 09:46:59 -06:00
A live rectangle kept every transform in its `xf`, so a non-uniform scale (a bounding-box drag, Object > Transform > Scale) stretched the rounded corners built in untransformed space into elliptical arcs. Scale Corners off divided the radii by the mean scale, which only compensated uniform scales. LiveShape::transform now folds a scale along the rectangle's own sides (any rotation or reflection, no shear) into w/h and keeps only rotation, reflection and position in `xf`, so the radii are document lengths and the path is regenerated with circular corners. Radii scale by the mean scale (sqrt|det|), which keep_corners undoes for Scale Corners off. Shears and plain moves keep composing into `xf` as before, so files saved with a scale in `xf` keep their exact geometry until next scaled or rotated. A corner-widget drag starts from the radius as drawn (clamped to fit). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>