mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-31 21:48:09 -06:00
Review of #4898 (CodeRabbit): a shading clearing in another blend-mode pass cleared its whole drawing path, so a small mesh triangle erased the earlier elements of its pass around it. The same happened in the shading's own pass, and in any knockout group, because a knockout paint is copied over the path and a mesh texture is transparent outside its triangles. A shading in a knockout group now goes through knockout_shading: the shading at full opacity, composited with Compose::DestOut, clears its own shape (mesh triangles, /BBox), then in its own pass it is painted with SrcOver. A shading that paints nothing still clears nothing. The clear uses the shading without the fill opacity it carries, so a half-transparent shading still replaces all of what is under it. Test: it::knockout_backdrop::a_small_mesh_replaces_only_what_is_under_its_triangle (own pass, another pass, isolated group). Revert-proven per half; keeping the opacity in the clear fails raster::tests::knockout_groups_replace_what_their_elements_cover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SqmHYx8FiWM5PcsoiErgp9