vectorcraft/crates/render/src
arhammusheer 0724aafbb6 #1172: share an object's appearance with its undo history until it changes
Every edit of an object copied its whole appearance (its fills, strokes and effects, about
540 bytes for a basic object) into the new node, though a move leaves it as it is. Over 45
whole-selection moves of 10,000 paths, undo history grew by 589 MB; now 349 MB (41 % less), and
a nudge or a drag of the selection takes 12 ms instead of 15.

- Node::appearance is a vectorcraft_doc::Shared<Appearance>: copy-on-write. A clone shares it,
  and the first change through DerefMut copies it (Arc::make_mut). Reads, writes, equality (also
  against a plain Appearance) and the saved form are those of the Appearance itself, so call
  sites read and change it as before. Sites that build or assign a whole appearance add .into(),
  and the few that need a plain copy take (*n.appearance).clone().
- Node::transform changes the appearance only when it has gradients to transform, and pattern
  paints are transformed only when there are some: a move no longer copies an appearance it
  doesn't change.

The workspace suite (5,301 tests) and clippy pass with the change; the doc and engine suites
pass again after the transform guard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VmMmc1J8XeNLxhRihWv9cc
2026-10-11 23:27:21 +07:00
..
encode #983: supersample Art Optimized edges in exports 2026-10-11 03:48:03 +07:00
brush_fx.rs M4.39: SVG symbols as <symbol>/<use>, hidden layers on Save, Dublin Core metadata 2026-10-05 09:03:52 +07:00
freeform.rs M4.98: freeform gradients export to SVG as images clipped to their shapes 2026-10-05 13:25:16 +07:00
fx.rs #1172: share an object's appearance with its undo history until it changes 2026-10-11 23:27:21 +07:00
group.rs Fix #787: raster exports keep translucent edges over opaque art opaque 2026-10-10 11:12:13 +07:00
ink.rs Fix #320: CMYK images stay CMYK from PDF import to PDF export 2026-10-08 06:04:07 +07:00
lib.rs #1172: rasterize with up to 8 threads instead of 4 2026-10-11 23:26:53 +07:00
live.rs Placed documents: the object, drawn exactly and kept as art by every exporter 2026-10-08 12:20:51 -07:00
paint.rs Fix #1140: gradient stops blend colour and opacity apart on the canvas, as the exports do 2026-10-11 16:00:36 +07:00
pattern.rs Fix #787: raster exports keep translucent edges over opaque art opaque 2026-10-10 11:12:13 +07:00
placed_document.rs Placed documents: on screen, cached bitmaps made in the background 2026-10-08 12:20:51 -07:00
proof.rs M4.75: File → Print writes the job as a print-ready PDF: paper, scale, tiles, marks and bleed, separations 2026-10-05 15:13:10 +07:00
tests.rs #983: supersample Art Optimized edges in exports 2026-10-11 03:48:03 +07:00
tests_adjust.rs Fix #122: colour adjustment live effects (Effect > Color Adjustments) 2026-10-06 00:42:26 +07:00
tests_blend.rs M3.73: blend modes follow the reference formulas on screen, in SVG and in PDF 2026-10-05 00:27:31 +07:00
tests_charstroke.rs M3.40: stroke on type — the Stroke panel edits the characters' stroke 2026-10-05 01:09:55 +07:00
tests_clip.rs M3.26: clipping sets with any clip shape 2026-10-04 17:23:57 +07:00
tests_cmykblend.rs M4.63: Links panel with status, Relink, Go To, Update, Edit Original, Embed/Unembed, Link Info and Placement Options 2026-10-05 12:40:05 +07:00
tests_container.rs M3.68: groups, layers and type have their own fills, strokes and effects, with Contents and Characters rows 2026-10-05 00:59:34 +07:00
tests_fontchange.rs Fix #36: the font menus list the installed fonts, with a search field 2026-10-06 00:49:22 +07:00
tests_freeform.rs M3.81: freeform gradients: colour points with spread, smooth lines, first points placed inside the shape 2026-10-05 01:21:38 +07:00
tests_fxzoom.rs Fix #755: blurred type no longer shifts as the view moves 2026-10-10 10:27:49 +07:00
tests_isolation.rs Fix #833: isolation mode locks and dims the art around the group 2026-10-10 10:27:57 +07:00
tests_knockout.rs M3.48: Page Isolated Blending and Page Knockout Group 2026-10-04 23:10:06 +07:00
tests_layeropts.rs Fix #743: raster export leaves guides out 2026-10-09 11:31:29 +00:00
tests_objectfx.rs M9: add live Revolve with artboard rotation and lighting controls 2026-10-10 23:44:46 +07:00
tests_placed_document.rs Placed documents: on screen, cached bitmaps made in the background 2026-10-08 12:20:51 -07:00
tests_setup.rs M4.63: Links panel with status, Relink, Go To, Update, Edit Original, Embed/Unembed, Link Info and Placement Options 2026-10-05 12:40:05 +07:00
tests_strokegradient.rs M3.83: gradients within, along or across a stroke 2026-10-05 05:47:54 +07:00
tests_tileedge.rs M3.72: Tile Edge Color dialog and Show Swatch Bounds in pattern editing 2026-10-05 01:50:25 +07:00