`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.
72 lines
2 KiB
Text
72 lines
2 KiB
Text
16x16
|
|
. = rgba(0.00, 0.00, 1.00, 1.00)
|
|
: = rgba(0.25, 0.25, 1.00, 1.00)
|
|
- = rgba(0.50, 0.50, 1.00, 1.00)
|
|
= = rgba(0.75, 0.75, 1.00, 1.00)
|
|
+ = rgba(1.00, 1.00, 1.00, 1.00)
|
|
* = rgba(0.00, 0.25, 1.00, 1.00)
|
|
# = rgba(0.25, 0.50, 1.00, 1.00)
|
|
% = rgba(0.50, 0.75, 1.00, 1.00)
|
|
@ = rgba(0.75, 1.00, 1.00, 1.00)
|
|
0 = rgba(0.25, 0.00, 0.75, 1.00)
|
|
1 = rgba(0.00, 0.00, 0.75, 1.00)
|
|
2 = rgba(0.00, 0.25, 0.75, 1.00)
|
|
3 = rgba(0.25, 0.25, 0.75, 1.00)
|
|
4 = rgba(0.25, 0.50, 0.75, 1.00)
|
|
5 = rgba(0.50, 0.50, 0.75, 1.00)
|
|
6 = rgba(0.50, 0.75, 0.75, 1.00)
|
|
7 = rgba(0.75, 0.75, 0.75, 1.00)
|
|
8 = rgba(0.75, 1.00, 0.75, 1.00)
|
|
9 = rgba(0.00, 0.50, 0.75, 1.00)
|
|
a = rgba(0.25, 0.75, 0.75, 1.00)
|
|
b = rgba(0.50, 1.00, 0.75, 1.00)
|
|
c = rgba(0.50, 0.00, 0.50, 1.00)
|
|
d = rgba(0.25, 0.00, 0.50, 1.00)
|
|
e = rgba(0.25, 0.25, 0.50, 1.00)
|
|
f = rgba(0.00, 0.25, 0.50, 1.00)
|
|
g = rgba(0.00, 0.50, 0.50, 1.00)
|
|
h = rgba(0.25, 0.50, 0.50, 1.00)
|
|
i = rgba(0.25, 0.75, 0.50, 1.00)
|
|
j = rgba(0.50, 0.75, 0.50, 1.00)
|
|
k = rgba(0.50, 1.00, 0.50, 1.00)
|
|
l = rgba(0.50, 0.25, 0.50, 1.00)
|
|
m = rgba(0.00, 0.75, 0.50, 1.00)
|
|
n = rgba(0.25, 1.00, 0.50, 1.00)
|
|
o = rgba(0.75, 0.00, 0.25, 1.00)
|
|
p = rgba(0.50, 0.00, 0.25, 1.00)
|
|
q = rgba(0.50, 0.25, 0.25, 1.00)
|
|
r = rgba(0.25, 0.25, 0.25, 1.00)
|
|
s = rgba(0.25, 0.50, 0.25, 1.00)
|
|
t = rgba(0.00, 0.50, 0.25, 1.00)
|
|
u = rgba(0.00, 0.75, 0.25, 1.00)
|
|
v = rgba(0.25, 0.75, 0.25, 1.00)
|
|
w = rgba(0.25, 1.00, 0.25, 1.00)
|
|
x = rgba(0.75, 0.25, 0.25, 1.00)
|
|
y = rgba(0.50, 0.50, 0.25, 1.00)
|
|
z = rgba(0.00, 1.00, 0.25, 1.00)
|
|
A = rgba(1.00, 0.00, 0.00, 1.00)
|
|
B = rgba(0.75, 0.00, 0.00, 1.00)
|
|
C = rgba(0.75, 0.25, 0.00, 1.00)
|
|
D = rgba(0.50, 0.25, 0.00, 1.00)
|
|
E = rgba(0.50, 0.50, 0.00, 1.00)
|
|
F = rgba(0.25, 0.50, 0.00, 1.00)
|
|
G = rgba(0.25, 0.75, 0.00, 1.00)
|
|
H = rgba(0.00, 0.75, 0.00, 1.00)
|
|
I = rgba(0.00, 1.00, 0.00, 1.00)
|
|
---
|
|
..::::----====++
|
|
..*:::#---%===@+
|
|
0122334455667788
|
|
0022234445666788
|
|
0032224444666688
|
|
0033229444a666b8
|
|
cdeeefgghhiijjkk
|
|
cceeeeggghiiijkk
|
|
ccleeehgggiiiikk
|
|
cclleehhggmiiink
|
|
opqqqrssstuuvvww
|
|
ooqqqqssssuuuvww
|
|
ooxqqqysssvuuuww
|
|
ooxxqqyyssvvuuzw
|
|
ABCCCDEEEFGGGHII
|
|
AACCCCEEEEGGGGII
|