From 5b6c912667f62f808b9cf533b4486ce906197543 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Tue, 8 Nov 2005 17:43:13 +0000 Subject: [PATCH] Note that PS is now passing all tests except for self-copy. Add missing glue to hook up PS backend with new meta-surface support for the 5 basic drawing operations. Currently, this forces image fallbacks for all operations. Switch from gs device of pngalpha to png16m which for some reason gives the correct result for nil-surface now, while pngalpha does not. Key off of N_OPERATORS as the loop control for easier trimming down of this test case when debugging. Rename stroke_style parameter to style in backend->stroke parameter list. Remove PS-specific reference images for many tests which are now using more fallback paths than before. --- ChangeLog | 46 ++++ ROADMAP | 10 +- src/cairo-ps-surface.c | 196 ++++++++++++++++-- src/cairoint.h | 2 +- test/cairo-test.c | 2 +- test/caps-joins-ps-rgb24-ref.png | Bin 1420 -> 0 bytes test/caps-sub-paths-ps-rgb24-ref.png | Bin 237 -> 0 bytes test/clip-fill-rule-ps-rgb24-ref.png | Bin 309 -> 0 bytes test/clip-nesting-ps-rgb24-ref.png | Bin 517 -> 0 bytes test/clip-operator.c | 2 +- test/clip-twice-ps-rgb24-ref.png | Bin 605 -> 0 bytes test/dash-caps-joins-ps-rgb24-ref.png | Bin 2362 -> 0 bytes test/dash-offset-negative-ps-rgb24-ref.png | Bin 202 -> 0 bytes test/fill-and-stroke-ps-rgb24-ref.png | Bin 328 -> 0 bytes test/fill-rule-ps-rgb24-ref.png | Bin 2167 -> 0 bytes test/leaky-polygon-ps-rgb24-ref.png | Bin 353 -> 0 bytes test/line-width-ps-rgb24-ref.png | Bin 242 -> 0 bytes test/path-data-ps-rgb24-ref.png | Bin 440 -> 0 bytes .../rectangle-rounding-error-ps-rgb24-ref.png | Bin 365 -> 0 bytes test/show-text-current-point-ps-rgb24-ref.png | Bin 1477 -> 0 bytes test/text-antialias-gray-ps-rgb24-ref.png | Bin 714 -> 0 bytes test/text-antialias-none-ps-rgb24-ref.png | Bin 714 -> 0 bytes test/text-antialias-subpixel-ps-rgb24-ref.png | Bin 714 -> 0 bytes test/transforms-ps-rgb24-ref.png | Bin 418 -> 0 bytes test/unantialiased-shapes-ps-rgb24-ref.png | Bin 9899 -> 0 bytes 25 files changed, 231 insertions(+), 27 deletions(-) delete mode 100644 test/caps-joins-ps-rgb24-ref.png delete mode 100644 test/caps-sub-paths-ps-rgb24-ref.png delete mode 100644 test/clip-fill-rule-ps-rgb24-ref.png delete mode 100644 test/clip-nesting-ps-rgb24-ref.png delete mode 100644 test/clip-twice-ps-rgb24-ref.png delete mode 100644 test/dash-caps-joins-ps-rgb24-ref.png delete mode 100644 test/dash-offset-negative-ps-rgb24-ref.png delete mode 100644 test/fill-and-stroke-ps-rgb24-ref.png delete mode 100644 test/fill-rule-ps-rgb24-ref.png delete mode 100644 test/leaky-polygon-ps-rgb24-ref.png delete mode 100644 test/line-width-ps-rgb24-ref.png delete mode 100644 test/path-data-ps-rgb24-ref.png delete mode 100644 test/rectangle-rounding-error-ps-rgb24-ref.png delete mode 100644 test/show-text-current-point-ps-rgb24-ref.png delete mode 100644 test/text-antialias-gray-ps-rgb24-ref.png delete mode 100644 test/text-antialias-none-ps-rgb24-ref.png delete mode 100644 test/text-antialias-subpixel-ps-rgb24-ref.png delete mode 100644 test/transforms-ps-rgb24-ref.png delete mode 100644 test/unantialiased-shapes-ps-rgb24-ref.png diff --git a/ChangeLog b/ChangeLog index 7b34bd3ec..dbe6e5ce0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,49 @@ +2005-11-08 Carl Worth + + * ROADMAP: Note that PS is now passing all tests except for + self-copy. + + * src/cairo-ps-surface.c: (_cairo_ps_surface_paint), + (_cairo_ps_surface_mask), (_cairo_ps_surface_stroke), + (_cairo_ps_surface_fill), (_cairo_ps_surface_show_glyphs), + (_ps_output_paint), (_ps_output_mask), (_ps_output_stroke), + (_ps_output_fill), (_ps_output_show_glyphs): Add missing glue to + hook up PS backend with new meta-surface support for the 5 basic + drawing operations. Currently, this forces image fallbacks for all + operations. + + * test/cairo-test.c: (ps_surface_write_to_png): Switch from gs + device of pngalpha to png16m which for some reason gives the + correct result for nil-surface now, while pngalpha does not. + + * test/clip-operator.c: (draw): Key off of N_OPERATORS as the loop + control for easier trimming down of this test case when debugging. + + * src/cairoint.h: Rename stroke_style parameter to style in + backend->stroke parameter list. + + * test/caps-joins-ps-rgb24-ref.png: + * test/caps-sub-paths-ps-rgb24-ref.png: + * test/clip-fill-rule-ps-rgb24-ref.png: + * test/clip-nesting-ps-rgb24-ref.png: + * test/clip-twice-ps-rgb24-ref.png: + * test/dash-caps-joins-ps-rgb24-ref.png: + * test/dash-offset-negative-ps-rgb24-ref.png: + * test/fill-and-stroke-ps-rgb24-ref.png: + * test/fill-rule-ps-rgb24-ref.png: + * test/leaky-polygon-ps-rgb24-ref.png: + * test/line-width-ps-rgb24-ref.png: + * test/path-data-ps-rgb24-ref.png: + * test/rectangle-rounding-error-ps-rgb24-ref.png: + * test/show-text-current-point-ps-rgb24-ref.png: + * test/text-antialias-gray-ps-rgb24-ref.png: + * test/text-antialias-none-ps-rgb24-ref.png: + * test/text-antialias-subpixel-ps-rgb24-ref.png: + * test/transforms-ps-rgb24-ref.png: + * test/unantialiased-shapes-ps-rgb24-ref.png: Remove PS-specific + reference images for many tests which are now using more fallback + paths than before. + 2005-11-08 Carl Worth * src/cairo-meta-surface-private.h: diff --git a/ROADMAP b/ROADMAP index 6154c0339..b44e23285 100644 --- a/ROADMAP +++ b/ROADMAP @@ -16,15 +16,15 @@ The release won't happen without these being complete. ✓a. Incorporate into test suite b. Correct output for the entire test suite - clip-operator + ✓clip-operator ✓composite-integer-translate-source - linear-gradient - operator-clear + ✓linear-gradient + ✓operator-clear ✓operator-source self-copy - text-pattern + ✓text-pattern ✓trap-clip - unbounded-operator + ✓unbounded-operator 2. Image fallbacks at finer-than-whole-page granularity diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c index 7b9ec7253..36db6f5a4 100644 --- a/src/cairo-ps-surface.c +++ b/src/cairo-ps-surface.c @@ -467,10 +467,57 @@ _cairo_ps_surface_old_show_glyphs (cairo_scaled_font_t *scaled_font, num_glyphs); } +static cairo_int_status_t +_cairo_ps_surface_paint (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source) +{ + cairo_ps_surface_t *surface = abstract_surface; + + assert (_cairo_surface_is_meta (surface->current_page)); + + return _cairo_surface_paint (surface->current_page, operator, source); +} + +static cairo_int_status_t +_cairo_ps_surface_mask (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source, + cairo_pattern_t *mask) +{ + cairo_ps_surface_t *surface = abstract_surface; + + assert (_cairo_surface_is_meta (surface->current_page)); + + return _cairo_surface_mask (surface->current_page, operator, source, + mask); +} + +static cairo_int_status_t +_cairo_ps_surface_stroke (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source, + cairo_path_fixed_t *path, + cairo_stroke_style_t *style, + cairo_matrix_t *ctm, + cairo_matrix_t *ctm_inverse, + double tolerance, + cairo_antialias_t antialias) +{ + cairo_ps_surface_t *surface = abstract_surface; + + assert (_cairo_surface_is_meta (surface->current_page)); + + return _cairo_surface_stroke (surface->current_page, operator, source, + path, style, + ctm, ctm_inverse, + tolerance, antialias); +} + static cairo_int_status_t _cairo_ps_surface_fill (void *abstract_surface, cairo_operator_t operator, - cairo_pattern_t *pattern, + cairo_pattern_t *source, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, @@ -480,13 +527,26 @@ _cairo_ps_surface_fill (void *abstract_surface, assert (_cairo_surface_is_meta (surface->current_page)); - return _cairo_surface_fill (surface->current_page, - operator, - pattern, - path, - fill_rule, - tolerance, - antialias); + return _cairo_surface_fill (surface->current_page, operator, source, + path, fill_rule, + tolerance, antialias); +} + +static cairo_int_status_t +_cairo_ps_surface_show_glyphs (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source, + const cairo_glyph_t *glyphs, + int num_glyphs, + cairo_scaled_font_t *scaled_font) +{ + cairo_ps_surface_t *surface = abstract_surface; + + assert (_cairo_surface_is_meta (surface->current_page)); + + return _cairo_surface_show_glyphs (surface->current_page, operator, source, + glyphs, num_glyphs, + scaled_font); } static const cairo_surface_backend_t cairo_ps_surface_backend = { @@ -514,11 +574,11 @@ static const cairo_surface_backend_t cairo_ps_surface_backend = { /* Here are the drawing functions */ - NULL, /* paint */ - NULL, /* mask */ - NULL, /* stroke */ + _cairo_ps_surface_paint, + _cairo_ps_surface_mask, + _cairo_ps_surface_stroke, _cairo_ps_surface_fill, - NULL /* show_glyphs */ + _cairo_ps_surface_show_glyphs }; static cairo_int_status_t @@ -1379,10 +1439,83 @@ _ps_output_old_show_glyphs (cairo_scaled_font_t *scaled_font, return CAIRO_STATUS_SUCCESS; } +/* XXX: Just stubbing this out for now. Should be able to do much + * better here. */ +static cairo_int_status_t +_ps_output_paint (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source) +{ + ps_output_surface_t *surface = abstract_surface; + + if (pattern_operation_needs_fallback (operator, source)) + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); + + /* XXX: Should be able to do much better here. */ + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); +} + +/* XXX: Just stubbing this out for now. Should be able to do much + * better here. */ +static cairo_int_status_t +_ps_output_mask (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source, + cairo_pattern_t *mask) +{ + ps_output_surface_t *surface = abstract_surface; + + if (pattern_operation_needs_fallback (operator, source)) + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); + + /* XXX: Should be able to do much better here. */ + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); +} + +/* XXX: Just stubbing this out for now. Should be able to do much + * better here. */ +static cairo_int_status_t +_ps_output_stroke (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source, + cairo_path_fixed_t *path, + cairo_stroke_style_t *style, + cairo_matrix_t *ctm, + cairo_matrix_t *ctm_inverse, + double tolerance, + cairo_antialias_t antialias) +{ + ps_output_surface_t *surface = abstract_surface; + + if (pattern_operation_needs_fallback (operator, source)) + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); + + /* XXX: Should be able to do much better here. */ + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); +} + static cairo_int_status_t _ps_output_fill (void *abstract_surface, cairo_operator_t operator, - cairo_pattern_t *pattern, + cairo_pattern_t *source, cairo_path_fixed_t *path, cairo_fill_rule_t fill_rule, double tolerance, @@ -1394,7 +1527,7 @@ _ps_output_fill (void *abstract_surface, ps_output_path_info_t info; const char *ps_operator; - if (pattern_operation_needs_fallback (operator, pattern)) + if (pattern_operation_needs_fallback (operator, source)) return _ps_output_add_fallback_area (surface, 0, 0, surface->parent->width, @@ -1402,7 +1535,7 @@ _ps_output_fill (void *abstract_surface, _cairo_output_stream_printf (stream, "%% _ps_output_fill\n"); - emit_pattern (surface->parent, pattern); + emit_pattern (surface->parent, source); info.output_stream = stream; info.has_current_point = FALSE; @@ -1432,6 +1565,31 @@ _ps_output_fill (void *abstract_surface, return status; } +/* XXX: Just stubbing this out for now. Should be able to do much + * better here. */ +static cairo_int_status_t +_ps_output_show_glyphs (void *abstract_surface, + cairo_operator_t operator, + cairo_pattern_t *source, + const cairo_glyph_t *glyphs, + int num_glyphs, + cairo_scaled_font_t *scaled_font) +{ + ps_output_surface_t *surface = abstract_surface; + + if (pattern_operation_needs_fallback (operator, source)) + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); + + /* XXX: Should be able to do much better here. */ + return _ps_output_add_fallback_area (surface, + 0, 0, + surface->parent->width, + surface->parent->height); +} + static const cairo_surface_backend_t ps_output_backend = { NULL, /* create_similar */ _ps_output_finish, @@ -1457,11 +1615,11 @@ static const cairo_surface_backend_t ps_output_backend = { /* Here are the drawing functions */ - NULL, /* paint */ - NULL, /* mask */ - NULL, /* stroke */ + _ps_output_paint, + _ps_output_mask, + _ps_output_stroke, _ps_output_fill, - NULL /* show_glyphs */ + _ps_output_show_glyphs }; static cairo_int_status_t diff --git a/src/cairoint.h b/src/cairoint.h index 45cdcfeaa..b27624dcb 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -768,7 +768,7 @@ struct _cairo_surface_backend { cairo_operator_t operator, cairo_pattern_t *source, cairo_path_fixed_t *path, - cairo_stroke_style_t *stroke_style, + cairo_stroke_style_t *style, cairo_matrix_t *ctm, cairo_matrix_t *ctm_inverse, double tolerance, diff --git a/test/cairo-test.c b/test/cairo-test.c index 2136dde29..712749edb 100644 --- a/test/cairo-test.c +++ b/test/cairo-test.c @@ -519,7 +519,7 @@ ps_surface_write_to_png (cairo_surface_t *surface, const char *filename) char command[4096]; cairo_surface_finish (surface); - sprintf (command, "gs -q -r72 -g%dx%d -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pngalpha -sOutputFile=%s %s", + sprintf (command, "gs -q -r72 -g%dx%d -dSAFER -dBATCH -dNOPAUSE -sDEVICE=png16m -sOutputFile=%s %s", ptc->width, ptc->height, filename, ptc->filename); if (system (command) == 0) return CAIRO_STATUS_SUCCESS; diff --git a/test/caps-joins-ps-rgb24-ref.png b/test/caps-joins-ps-rgb24-ref.png deleted file mode 100644 index db31cc65ffb00edc8ac8dfea658eb803eced6c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 zcmZ{kdsLEV7{EU-A*7r*d7-JPt+bjqnv}WbCB>0PG;d^Tky;9wn>UuIn2KHIZJw0E z&@C6o;y~e+mkc2f8l^)~LuYuGGRT>iP?~9DAFTe{&UfDLJ-_Gtp67kubKdimgoR?^ zo2@qk000jJey8-IJj@W8w!;}+4u?oHW>tA4o6Yy z-uyK9y#j>@tS0-po)x(c815~yA{Ei6V@XA^$pz=tSGO0r^e}g4EPAQ;o+EoK8rvpL z_VrEzex;Qv2ryj$bt-f)Hupo&U=C1`G2&vpA=DpbV7#MdprWy{QDt?xDBj=mQAY=i z=wxip_dlq1s2SMaxn@g)?LbJMB5=^+^xHdX5SwRk@d|-ZcxmW0nX{08GCJ=1tdc3Y z|D4b3<00`4O46G{qg_p$ga`4H-+8v5a2p;ev4}I5%3cqx@GE(qr8g%>%6QgH6Lqd| zRH-CZ&m1UYoO-6^^FkVHvxMx?x3x_zi>fAHt~JwGeW7D)joR8ZGmzR=U~PdAv}nf} zwGT(|lr<(NDTb+a$r562eux)-l+!b`KhZ0k0s-TaqnC-+b!=R2!c;Q z2cb?6$KO9)CfsL%)hR&>gWSVO@^B;4Wu#!2MkTN3%y%20yChs)!HN1?^C}%VgY*L_ zETpv)V9w0qg>8A5{p?+FNkHGy+fuOR=QdGS@1YBmDM9pvqz^s2-Y z0l$by@>1{whDB3O#=EeysEF1%u#Te`2d2`k%d75vtxqjOW^ZYM>^#HWqEDR$@0YS1 z3fEls)*b68R)IRlYVmpeQ8~*@rru=Pqd>DMdsgOC9;_r2e&C>Fw7 z+5(D`*ClotV82y~X!iv>eA%Ir17pz|w!W>MU|a0i@$lxDjom((H^h=|5!&WySvz)E zA-&c21gdl)WIp;aq0*iAZI2xRnryh5E>$=xL|;iV4p4%8Sdx-0(GgX-$I0zRaGGE1us29 zP<`YxFT^J9YdA}s2VAaKWt(I!gnw1K2wkhafohl*V_oZH5LxO1v2&;pY2T0@x*gY) za}yS6N}xt{dgY_~UQwNJrb`MILh2^6eW;;2^>$xkoG0iW+$PKlTQW;yKmxW+G;)w5 z_~AqYnD^ZI_8G_Uyp6FDGkiYlZpv?kg~D?ZU&D?n##Y}!p@zq?NfJAs!mO<3iY3*Z z!Ti!Ry5+t1!LKK{;dAK+=|Pq%A#r9l!*XKJm_UK_xT2=|Aia8Wj!9j_!E(VUm6iJE zKu)ieQf H$J71+8=a=N diff --git a/test/caps-sub-paths-ps-rgb24-ref.png b/test/caps-sub-paths-ps-rgb24-ref.png deleted file mode 100644 index 319e492e7de186b948d0c7beb73760f0684cc693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc1|)ksWqE-VTavfC3&Vd9T(EcfWS|IVfk$L9 z0|U1Z2s2)~TlWVjC|lwhQ4*Y=R#Ki=l*-^9;G^K4kzZU=oLrPyP@-U=XJ{J4!Mz%& zFvZiwF~p+x?G!`4!wwuQ)Bhy=u&pV(`$T7_x8IK4YcGf>-)P#9%lph&vzlXf^vsoK zLdvtJpT5s9Eya^<&*|h+3BmrW;amTI`fg=&NZIC4d`pAcv){KvrZO_G(|Z5u_wAnf bHdDD<>)Z8up`d?3`39FNO*8`VZ`QeZJc5>cumsUq17Cmh)Gk zIY6fR+O8~V^Gr4Y@uRt$W>?FrWd^RFz;e!X`8`4Z-zu8P5|fwt^nG&D-F@{Mn`P-W z>BE(5&u>({+u~+?{h%iIRJ*>Eb&q93f9|wqh~Nz1OP7_K33NAur>mdKI;Vst0Qj+Y AY5)KL diff --git a/test/clip-nesting-ps-rgb24-ref.png b/test/clip-nesting-ps-rgb24-ref.png deleted file mode 100644 index f5b638590ea75d22f5fa60bfce357191550873d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^DIm3kcv5PZ+mk!J4moRH2c1PbL5c+#oG0b;jsrA`{!NVvF7!zV+OU$_!FM9 zG^%pwI3{p1c?(1|9S~xfrm*3d!?e^_r{B1VE1lZ=QQLb;@neNDKE_90-vksoHU1j_ z2~M6P4GM3y4>qdY)$o|GM4XlTl9bevLe-23$FP`(DkR1H@&5hiF&t|G1;UH+YZMpF zk!JUFv20`5Xv@=~{j-(P)5S9ZXotmwZxa;GYCATm?A3^v@I+SRS9PMviRg)eT8=_` zUb-AxvjiS_t#TBS^Ro3gB18)RI90i#B7g4E-Tp-!}y(|J;7$DbT=sh1Bp*C3}Uw2EEkY{8_6z!A1qFB%sZ$&f&0eeC7ZSQC$diPDm=Ge ziQ|W%`<`p=pB^%Ma8F?}HZEObzJ+m%48tvkC_aW<23__BvxaHR4$=;%85i&_Naa#! z@p)XaV9xVL8!gY9^s#d(N?TZKN0>No_c?BHq3pNgCAlX=YCB)Q=d0-IAngvX5JsSoTr7Q>8IEPws`BZwOx!;QsR{xCRwW7 zzO;tPWOI5Xry7F}Pqd>3Tf)T&87n)TFKmj@eI~}3v5{-Zyj}G|BFq^pxw7_DumZjE zlwk>T^bYQbkjF>09gJ2ieWO3ADrh~!$yBzYyvt=ju4XNh-F9M1XzEParde&e+oxt) zuSwjK(x-Ooq4!mX4QKwmm#Wi^`zopr02?szq5uE@ diff --git a/test/dash-caps-joins-ps-rgb24-ref.png b/test/dash-caps-joins-ps-rgb24-ref.png deleted file mode 100644 index 5ca095453b983d89335675654eba6ac4b03bddb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2362 zcma)8c~lbE9!68b1qakdN^`-;3uecfR}G^L^*s?c8(jFVhY02v$Cz3;+PY z&Q4gOOs8cegMhOBKGlpX6Cf4mhy{HA2i1amw`7h|n3Go|0HC7&59QvBC4Q5c2czsS zM7f6sM#WMh0sxL~uKJF@hDJt3`bGQ}7Nw82KprE4R2l#PP_r}k4C(iZ#mYs-9gJ%F zNqWehadoB)PD-vyc%@(&+~iGDiU5cFUHXb9w*5la1Ffz(@q$%qq&m9`YAw+CWX-w`6`iGFl6j3UbeI80Eq7 z`fyhRGdLb56AXMP8q2g($5sqvAa3|)prufXvNJRs-*t&;X=&NeyLl~!mxR_aq7fAa zW}~*K-^0+Xx3k#5A0nO#1Z>~-#FT}+kF0TtWcbx>TP@nwrCvkMWcSyOL+KBmC7yWt zAO)7*A&g$6Ihu0g|DCWL+-{QP#qWUy$w=hm*7Y5$r0em5p^?xsAWegQuz8V^%Z8D& zz8Xfj@>Sz_ zyRm+5;AJhOmOFc6HsZ)@?f6!2r^Pe5Y{J8Ovmm-XA$dohtF-nQ6e*i3*sFLv<*CA6 z3bjco{$p940arTLz^23C03^y_cl;qj@MDtfRK{9zBfQ#e=wKR;)=x{kb}fHYtU?yeE~C6FI=xb8qv%ZmA~Wm36|L0K?U`D` zSCJ1+{?aZswsqrt<*R?(eL+G2@+G->N!Gb{FuHkji;L$3&z=o&e(&v`!m#38Mf5T; zx#o|I**Vnl6b$PS5GzRVX|B zvuf8I7(ZJwzlJH@Px2V1E-h*@lhZ#f)ve-GDbK!%+^lr(8PUmRwv~9_AFpQBxb?t1 zil-#)HoAG$TC?n()y++IPdLeC$IC4uP9T2{^;;S6gwMGTS~HX7qNBGzK_~mf?&0SR zr3dmAi-T5iIX)H_^-B?=kmtIUC+&*^&g-RZJP8RME%z-1X>5_iQ50%xG-Vdqf0+)>i za)LTKI=8|?loBGl9+T>!@fH)GE4xn={uE-~9XmbVtkwnKNe{dhceh@okoijsN3zw+ zHzV_K5IbDaW?s2_w@vK|Js(QNW$Pe!YPf2sTh;3W{@UJ{nL^ETiXy3csGeco6wJhL(ZU!E7?fkAs659EJT57SMruo z-_1sa33btY^vYT~4ieID8Tl~Ph7hqT+twvxYxU_JFlcRuH>-NcL|c*##OT61kiKiKu{r6C(8Om#09bencobgZfL zHD|eO2XC)-90QefGg>CB_x(MoNwG+dM#Vf%=-a)aBk)NLTl$kxKVf~WXfh}KVE^NU zO~9D^-$&0C=2hD%pZeo@ttZ~AxPHFv{r5bt&o(3{;xJ?+p(99HSe4f7=wfl%F~fX- z7;B?kVP;_79QWTx6SQv%>T>b){S@B%+ zTJ9Oi2G1N<9#H!7i}-+FO>WU^wqI~vck53tM)_maYsJ^S5+jI$-n@S=#@SpPy8 zEhr`1aKsYJ43o1G95fI>4A^x;l()*+_CMTIguj4H`nMA>(b@)AJH-z8nMdp4$jmnI zpc>hz^ec8EAWEGU|cHwD)!DVtQL$A!X!w;uwb1sAJI?HTD~<5Rol)#pyxc6uFc9sy`E9O7bbv}(`Ga^j~JJ9T;VAz0eXmy=?9 zjXPi#`nXRH4zivls=u!fqChCh@@KKk>(3$3I(-B-%@m|6`{Ms!Ygh5>MBNJ7Bfq$$IJqdZphUq!&(Ji8gL^el zp`)jZV~9oX+esUF85DR9&*@rR?X+LdoI!HJ0q<>EVXNNd`LHyo$VjdWV<^hvYdB+L p7ZMs@%)I(p{VmgXai0axau#c9IDNEv$pbWu!PC{xWt~$(698CFJ;wk5 diff --git a/test/fill-and-stroke-ps-rgb24-ref.png b/test/fill-and-stroke-ps-rgb24-ref.png deleted file mode 100644 index 003f44baef50745085ec74fdbdf8969aea16e7e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328 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 diff --git a/test/path-data-ps-rgb24-ref.png b/test/path-data-ps-rgb24-ref.png deleted file mode 100644 index ae6f60f0f60116ca06a620c901f7a4b0bb96ac5e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 440 zcmV;p0Z0CcP)4M`&+z zbaP{JX>fEPI4&_YQV0vH0003mNklXCN;&OSN)h){In&FsOsRPh);GKVQFvZETl;@9x!-f#V>XC5rRIf6 z(QbKX5D~{1xBW3jCZgd!UH7;U2HTMReKBbSP1 i{_Ni9cSJ2riv9&|Do{40dlhPP)4M`&+z zbaP{JX>fEPI4&_YQV0vH000F%Nkl{3|4lo0jC5~f>VMifs|lMfD%jz zPy#N&lmI0xCEyZtKlbbgjxi?7?%uuOo5@T9wxmxIvZCx>5E0?Ti4!Lry#2HRCr+IB zJ8>3=6DLl1@df};mL&|su(&Y{1C(VMB_vH#=(_Id{T@gu;dZ-0nx@b+&F=l5MOl_G zj^pCm<#Kt6%N~4(4i`SIe}k-_!dG+H^Gw9pa+JMWa^3(w3W3&oaYJkUR4~30QcB3O z43tv9IsZ1j231x4^GP0yBf0(`{Pxuxgb+X}JuW_-Rgk7BJRXmzN~pDl zvMeD@Q^@mtwb(RG1H&-bZe<)t+s)*84r!Wh%5&FCDHrQQU6AQiq?AyW<${~m+RF5G zG_gLBQo`f$u(r>G64J58x$C;c+NNnhO1ZGh7x)lY9~Yy4et1+>1;a1|Wv%(i<>$-&;Ump0bt=aEe@A@r#jeY>IK3J1E=e*?;S3V&G+qSi9`@WCTvBtUY zdrXqVt|NpXr4$j-`fr-1Xs#hHoO9%yBO+o^6jslgEEidpS=ok%!JibgD2f7$qFCH_ z^T2m4WPixVu^e2TNs?IIp*Wd)N7=GBervfGqstZtN+~kN?8|&M1`$FQ8-)-yVSL5G zD4!=N=X??PIT&M4Nilc+mOOX8E3YUD%(Bd@+w6BAY**$yakqRjhbd0JhjmLwh_gvR zr4(jaW_7e}yD02iT(`JP(}a{#EQ;c(!2A3*hmV76%N)MqF!zt|+LrwxAIESoYvzYb zUDr=VaxG47aX7-3*!XSbUP#w3(?JL!fH7t}imvORsw&$u0l=b#(^>-|>$~NB7JGbB*EI+sY|+(PdmmI6A zW{lavYmy|klNg4<+m5F zyWJqmvX_6RJX)R$&N<|H4wuU%>hC-D_+%VMxL&VzT5nF@7#$(b^CDr^n^tlU*AN#e zB{WR~ZQBCC$0;PGv=8x?-+Z$3Jh%7f{L(btw0+G_d-F5okC2}G{SNp09ma9Ar|*%u z8Dq4M`&+z zbaP{JX>fEPI4&_YQV0vH0006(Nkl)fqbbicQSA8nQ?>(BPfl>-u>rL`Fj+xiCExh+n{=V;_l=^3!zVBhJMF{{}Yg{fD06^QeV2t5> zKEG}9-enEkK!|B9~b(Dyxr5V?Q@fT!WmTCd)BI%P_1t<4FA z5C|bW#Yy}GAq0#uXxldP$`tT)I%T3U<}JCD5}b1!kH_40DP=Cm7=x;+ptS~L42&@h z!?0RF8cw9kUzUZObE^aMh*5qk852F;Wjb|L w#R3?M*VlD%rdE+AZ&`>wP}h%m^ZZ$?A0s`9oV47VoB#j-07*qoM6N<$f@(%Vj{pDw diff --git a/test/text-antialias-none-ps-rgb24-ref.png b/test/text-antialias-none-ps-rgb24-ref.png deleted file mode 100644 index 9b52a93891ff1c3148952a2a866be9a6603674c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmV;*0yX`KP)4M`&+z zbaP{JX>fEPI4&_YQV0vH0006(Nkl)fqbbicQSA8nQ?>(BPfl>-u>rL`Fj+xiCExh+n{=V;_l=^3!zVBhJMF{{}Yg{fD06^QeV2t5> zKEG}9-enEkK!|B9~b(Dyxr5V?Q@fT!WmTCd)BI%P_1t<4FA z5C|bW#Yy}GAq0#uXxldP$`tT)I%T3U<}JCD5}b1!kH_40DP=Cm7=x;+ptS~L42&@h z!?0RF8cw9kUzUZObE^aMh*5qk852F;Wjb|L w#R3?M*VlD%rdE+AZ&`>wP}h%m^ZZ$?A0s`9oV47VoB#j-07*qoM6N<$f@(%Vj{pDw diff --git a/test/text-antialias-subpixel-ps-rgb24-ref.png b/test/text-antialias-subpixel-ps-rgb24-ref.png deleted file mode 100644 index 9b52a93891ff1c3148952a2a866be9a6603674c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 714 zcmV;*0yX`KP)4M`&+z zbaP{JX>fEPI4&_YQV0vH0006(Nkl)fqbbicQSA8nQ?>(BPfl>-u>rL`Fj+xiCExh+n{=V;_l=^3!zVBhJMF{{}Yg{fD06^QeV2t5> zKEG}9-enEkK!|B9~b(Dyxr5V?Q@fT!WmTCd)BI%P_1t<4FA z5C|bW#Yy}GAq0#uXxldP$`tT)I%T3U<}JCD5}b1!kH_40DP=Cm7=x;+ptS~L42&@h z!?0RF8cw9kUzUZObE^aMh*5qk852F;Wjb|L w#R3?M*VlD%rdE+AZ&`>wP}h%m^ZZ$?A0s`9oV47VoB#j-07*qoM6N<$f@(%Vj{pDw diff --git a/test/transforms-ps-rgb24-ref.png b/test/transforms-ps-rgb24-ref.png deleted file mode 100644 index 2399148b721bb512280592e30504c10569cabf6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 418 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