mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-27 03:17:05 -06:00
Merging or stamping converts the straight-RGBA composite into the document's colour model. Transparent black converts to K = 100% in CMYK and neutral a/b in Lab, so those pixels no longer equal the surface's default pixel, prune() keeps them, and the layer's content bounds span everything that was rendered: the whole canvas for Stamp Visible, Stamp Down and Copy Merged, and for Merge Layers, Merge Visible and Merge Down whenever an input may draw anywhere (a fill layer, even a masked one). Fully transparent pixels are now written as the default pixel in both conversion paths: photocraft_compose::flatten_to_surface (stamps, Copy Merged) and engine pixels::composite_layers (merges). Only formats with alpha are affected; over a Background everything stays opaque. Tests: engine merge_transparent_bounds (Merge Layers, Merge Visible over a transparent document, with a masked fill layer and onto a Background, Stamp Visible, Stamp Down, undo) in RGB/Gray at 8/16/32 bit and CMYK/Lab at 8/16 bit, and a compose unit test for flatten_to_surface. The masked fill layer test fails on main (merged layer = full canvas in CMYK). Co-authored-by: dgliwa <2328690+dgliwa@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: Brandon Thomas <echelon@gmail.com>