mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-29 10:42:03 +01:00
blend_into takes every tile in the selection's bounds and blended each one into a fresh copy. History holds the previous document, so Arc::try_unwrap always failed and a tile with nothing selected was deep-copied too, unchanged: a 4 px Edit › Stroke on Select All of a 20 MP layer stored +82.5 MB per step for a ring of edge tiles. blend_tile skips every pixel whose weight (selection × opacity) is zero, so such a tile comes out byte-identical: keep the tile itself. Mask::empty sits beside Mask::full. Measured on the same layer: the stroke step now stores +17.5 MB and a 4000×3000 ellipse fill +14.2 MB instead of +26.0 MB. The new test fails on the old code. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>