`transparency.rs` implemented all sixteen blend modes and unit-tested them
against the specification's formulas. Nothing ever called them with a
backdrop. The Makepad renderer's `SetBlendMode` pushed a
`TransparencyError::Unsupported` and then painted the source colour, so a
/Multiply highlight and a /Normal one produced byte-identical output and
every test passed — because every test asked "was the right command
issued", not "does the page look right".
Overprint had no code at all. /OP, /op and /OPM were not parsed, so an
overprinting object knocked out the inks under it. That is not a missing
feature, it is the inverse of the instruction: on a press it is the
difference between a colour and a hole.
- `composite.rs`: a straight-alpha RGBA `Canvas` implementing §11.3.6's
union formula, weighted by backdrop alpha so a Multiply over transparency
is the source rather than black. Constant alpha and per-pixel soft masks.
Transparency groups composite as a unit; knockout groups are refused by
name rather than silently treated as non-knockout.
- Overprint as `composite_cmyk`, separate from the RGB path rather than a
flag on it: overprint is a statement about inks and RGB has none. /op
defaults to /OP per table 58 — defaulting it to false makes the common
`<< /OP true >>` knock out every fill. §10.7.5's "no effect on an RGB
device" is asserted, so our doing nothing there is the spec rather than
an omission.
- `raster.rs`: a CPU rasteriser that replays a command list onto a canvas.
Not on the display path, no anti-aliasing, no fonts; it exists so
compositing has a verifiable output. In pdf-graphics and not pdf-makepad
because a test that needs a GPU is a test that does not run.
- Golden **pixels** for shading, mesh, blend and overprint pages — Phase
7's exit criterion, which the Phase 2 command-text goldens cannot meet.
ASCII grids with a colour legend, quantised to quarter steps; each test
asserts its exact colours before comparing, so a wrong-but-stable render
cannot be blessed by an UPDATE_GOLDEN run.
Six mutations, all killed, including the two that describe the old
behaviour: discarding the blend result, and ignoring the overprint flag.
1364 tests pass. ADR 0030.