From c2f81f8719ae9145623294fa3904c8be39fc3e06 Mon Sep 17 00:00:00 2001 From: PBS Date: Tue, 18 Jan 2022 16:38:19 +0900 Subject: [PATCH 1/2] Fix image overclipping in vector backends Enlarge the image extents calculation by 0.5 device units in vector backends, on top of the existing "fudge factor" of 0.004 present for all backends. Doing so cannot introduce any regressions, and can only change the output if the extents were previously too tight. Fixes https://gitlab.freedesktop.org/cairo/cairo/-/issues/480 --- src/cairo-pattern.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c index fcaaf46b8..73a9ea41a 100644 --- a/src/cairo-pattern.c +++ b/src/cairo-pattern.c @@ -3696,7 +3696,11 @@ _cairo_pattern_get_extents (const cairo_pattern_t *pattern, y1 = raster->extents.y; x2 = raster->extents.x + (int) raster->extents.width; y2 = raster->extents.y + (int) raster->extents.height; + + goto HANDLE_FILTER; } + break; + HANDLE_FILTER: switch (pattern->filter) { case CAIRO_FILTER_NEAREST: @@ -3707,6 +3711,14 @@ _cairo_pattern_get_extents (const cairo_pattern_t *pattern, y1 -= 0.004; x2 += 0.004; y2 += 0.004; + /* Fix clipping issue in vector backends. */ + if (is_vector) + { + x1 -= 0.5; + y1 -= 0.5; + x2 += 0.5; + y2 += 0.5; + } break; case CAIRO_FILTER_BEST: /* Assume best filter will produce nice antialiased edges */ From 50781eac67967215f823f7541bf6a6343a75f871 Mon Sep 17 00:00:00 2001 From: PBS Date: Wed, 19 Jan 2022 17:07:42 +0900 Subject: [PATCH 2/2] Regenerate failing record1414x-paint-alpha-clip-mask tests --- ...14x-paint-alpha-clip-mask.pdf.argb32.ref.png | Bin 522 -> 457 bytes ...rd1414x-paint-alpha-clip-mask.quartz.ref.png | Bin 522 -> 457 bytes .../record1414x-paint-alpha-clip-mask.ref.png | Bin 566 -> 496 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/reference/record1414x-paint-alpha-clip-mask.pdf.argb32.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.pdf.argb32.ref.png index 5bb4bbd1c72ab3ba407f6ab7ce8cbf118b2ff6d5..4b83e051fdd4088d678f0ceede624b9cee392e97 100644 GIT binary patch delta 413 zcmV;O0b>4&1jz%CHh+FeL_t(oh3(iqZi6rs2k>V@rN9tn1GeNK2qZ+4YxD#?0!GR` z$}!4>I7&98cF58)M5rB5KMW=h8xk@2KbmLzCxa~uQWOPUrmA z2OsU=qaA!m7>2?JLpvUZ&xt8rma-m8ahNK7Of!li&-4D87=HtRZI(5bRqgke%|>=i z>GdFlbP@kz)U})E59jl39fT0aafT36C=!kqv0AOrN(IVT$9RMqWt2k}p+F(%J*dAs zf*|NtGX?-^KfuHWaIA9;*s1!{5skL>s$lW^mjm+QA3^ zP8qOHO8~w70)GquN)YUqHZRyLOIZ*69+Yjf&LhD&!59e7m7knWPuFL`*TZgXwB~v! z{laU|ibHjnLZK9V|9u9>`m$E0Pzt{Pw%dKo;83QFM~rnSP^1tN4k?N(LeB9^F+PoX z5z>y9;=Z~=6g32lxd-*5{|DVZ+QCOV_$z&C00000NkvXX Hu0mjfWVW~- delta 478 zcmV<40U`d$1BwKYHh;fKL_t(oh3(kEYQiua2JkOw*LDun%Vs_L27;hoq=E;1k3GO1 z!3w^{?t)L?MeTEV5l?kvOa>}WEIT-+(b_awl^*)xDNX+Q5t|T7Mxzn@(&==3+X1xO z?Z}7FOCxWb#K9(Uut^+jNWEV7eQ;^V=b6^!62QZB3czq(x7plgvqELX{ue?>E|)t+uu;})b1=AD zEUx9)BMigf_LQK6b%aOAQ9?OH5fT)_y$7kPdh%jgmUY_OwgEVfb6#hyC2`x> z;jc%fQVD)BgMV|s+coBMZa2O|*L7*cZw1ebz;T--4mSLAy@%cktK$|6XZr;<00%z% z1pvkOD{q##tOx%dG<+J)QnTYnKIepO!}nYP0BD*wnLG#2!e0*p!tKMU5TXFzQTi;U zb}4BDrKnavB56Y7)qfm-k?Y&S~M&OX9ghzyRNLNsV5CRS%iYP+N@kdcsO0)=J z$DU#iO!Z5p8+!QB4W%1h_YA|ctT#~v!rX(-lY9@lei8?p#K9&mj^uj~o47cB0RK&; U+^o`kCjbBd07*qoM6N<$f_^ID_y7O^ diff --git a/test/reference/record1414x-paint-alpha-clip-mask.quartz.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.quartz.ref.png index 5bb4bbd1c72ab3ba407f6ab7ce8cbf118b2ff6d5..4b83e051fdd4088d678f0ceede624b9cee392e97 100644 GIT binary patch delta 413 zcmV;O0b>4&1jz%CHh+FeL_t(oh3(iqZi6rs2k>V@rN9tn1GeNK2qZ+4YxD#?0!GR` z$}!4>I7&98cF58)M5rB5KMW=h8xk@2KbmLzCxa~uQWOPUrmA z2OsU=qaA!m7>2?JLpvUZ&xt8rma-m8ahNK7Of!li&-4D87=HtRZI(5bRqgke%|>=i z>GdFlbP@kz)U})E59jl39fT0aafT36C=!kqv0AOrN(IVT$9RMqWt2k}p+F(%J*dAs zf*|NtGX?-^KfuHWaIA9;*s1!{5skL>s$lW^mjm+QA3^ zP8qOHO8~w70)GquN)YUqHZRyLOIZ*69+Yjf&LhD&!59e7m7knWPuFL`*TZgXwB~v! z{laU|ibHjnLZK9V|9u9>`m$E0Pzt{Pw%dKo;83QFM~rnSP^1tN4k?N(LeB9^F+PoX z5z>y9;=Z~=6g32lxd-*5{|DVZ+QCOV_$z&C00000NkvXX Hu0mjfWVW~- delta 478 zcmV<40U`d$1BwKYHh;fKL_t(oh3(kEYQiua2JkOw*LDun%Vs_L27;hoq=E;1k3GO1 z!3w^{?t)L?MeTEV5l?kvOa>}WEIT-+(b_awl^*)xDNX+Q5t|T7Mxzn@(&==3+X1xO z?Z}7FOCxWb#K9(Uut^+jNWEV7eQ;^V=b6^!62QZB3czq(x7plgvqELX{ue?>E|)t+uu;})b1=AD zEUx9)BMigf_LQK6b%aOAQ9?OH5fT)_y$7kPdh%jgmUY_OwgEVfb6#hyC2`x> z;jc%fQVD)BgMV|s+coBMZa2O|*L7*cZw1ebz;T--4mSLAy@%cktK$|6XZr;<00%z% z1pvkOD{q##tOx%dG<+J)QnTYnKIepO!}nYP0BD*wnLG#2!e0*p!tKMU5TXFzQTi;U zb}4BDrKnavB56Y7)qfm-k?Y&S~M&OX9ghzyRNLNsV5CRS%iYP+N@kdcsO0)=J z$DU#iO!Z5p8+!QB4W%1h_YA|ctT#~v!rX(-lY9@lei8?p#K9&mj^uj~o47cB0RK&; U+^o`kCjbBd07*qoM6N<$f_^ID_y7O^ diff --git a/test/reference/record1414x-paint-alpha-clip-mask.ref.png b/test/reference/record1414x-paint-alpha-clip-mask.ref.png index 78442bdbc0cc5b818510b68c5a2c144d315706a5..fce5f6be0ffb14e040271e012dcdf340e06c84ac 100644 GIT binary patch delta 452 zcmV;#0XzP-1n>ipHh-l_L_t(oh3%L>Ztk;i7U$sGrD z8STNNJ$SSS51G&Bxf4YlkK%jco+VAmqbVM(Dr;J;<#K6R)_>m+V*nqdit z>YmDZ5JDD<1t;+j<9f9ZhxX<2SPx36Wm%)qsHDaSLwmPtpU;o-AcPEu!%n9otgMiV ztVfcBjKq(MVk%M|@=0(iDyb0RJ1E;7j^m`O83W+^es-U$VeD=DZM!W$MVv>vMHT7B z@k;r(ZRA z05Bu7LMllT<8dfeEV-#_D)LFFc|aus8^Q|w6TyTMBvcpvfsw*=YB62(OIL5+d-KcJ%*$j*r_({08jVJ1 z96-HZPrQU~s{ChV9IP@9Rv8B?QmIrz7dD-EY@QQ;DM^bTX@B96%FWf^L> z0UX@jfsoPh@!T+W&Or!q9H&?;GSSHdz<#d>KpPGRt}BWn_FpKarfL3$U?us!b#;{+ zjdsOB2q_c_nx=6xrRmhVxyg;k$#Z-<5e4E4MbMQ<9MPR%P()lI+Hg%H)=V&M#j+%!Iis;aRezB&X!0v!LN zjDr<_uD8(g;jcz)teqEl0J;b{F90asE_u78#Si{H=(cd%&-YiCLgs|$A#|<)02C#- zzdzr;3*Qd{!p-4yh|qw~aq@DKU*uy$P>R#j=L9&6xqnd`)Z(E~`fl3~M@N$cH~{E# z-5t21D3s#t?CJ2(=ch(LFQTqQcS4KC(qzW@LL N07*qoL