mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-25 20:14:42 +01:00
The Elliptical Marquee tested and wrote every pixel one at a time (Surface::write_pixel), single-threaded, with no shared full tiles. The add/subtract/intersect modes read both selections over the whole canvas into f32 buffers. On 6000x4000 an ellipse took ~0.6-1.1 s and a mode combination ~0.3-0.5 s. ellipse_surface builds the shape per row: a run of fully selected pixels (bounded analytically, checked with the exact f32 tests at both ends) and edge pixels that get the original per-pixel coverage test. Tiles are built in parallel, and fully selected tiles share one tile. combine_surfaces maps two GRAY8 selections tile by tile through a 256x256 byte table, sharing tiles that come through unchanged. Both produce exactly the old bytes (equivalence test against the old per-pixel code). Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>