SVG-Edit recalculates rotation centers when element attributes change. Two bugs cause this recalculation to corrupt elements with compound transforms (e.g. word art characters on a curve).
When undoing/redoing a stroke-width change, the old code replaces the
entire transform attribute with just rotate(...), destroying any
translate() or scale() transforms. Characters positioned via
compound transforms collapse to the SVG origin.
Each character has translate(x,y) rotate(angle)
stroke-width: 2
Old code replaces transform with just rotate() — translate destroyed
Characters collapse to origin — translate() destroyed
New code skips recalculation for non-geometric attrs — transform untouched
Characters unchanged — non-geometric attrs skip recalculation
When a geometric attribute (e.g. width) changes on an element with
translate(tx,ty) rotate(angle), the rotation center should be computed
from the bbox center alone. The old code transforms the center through all remaining
transforms (including the pre-rotation translate), shifting the rotation center by (tx, ty).
translate(200,60) rotate(25, 50, 40) on 100×80 rect
Old code: center through all transforms → rotate(25, 260, 100)
translate(200,60) leaks into rotation center calculation
New code: center through post-rotation transforms only → rotate(25, 60, 40)
Center computed from bbox only, translate excluded