From 7d7057cf8896a3558fadc35d160d3bc667972800 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 4 Apr 2008 19:00:28 -0700 Subject: [PATCH] _cairo_pattern_get_extents: Fix to allow for expansion based on filter This fixes the filter-bilinear-extents test case and the related bug entry: bad clipping with EXTEND_NONE http://bugs.freedesktop.org/show_bug.cgi?id=15349 Though there are still differences in the PDF and PostScript backends, (primarily because we can't capture cairo's filter modes in those file formats). --- src/cairo-pattern.c | 22 ++++++++++++++++++ test/paint-source-alpha-svg11-ref.png | Bin 505 -> 756 bytes ...-source-surface-paint-svg11-argb32-ref.png | Bin 182 -> 229 bytes ...e-source-surface-paint-svg11-rgb24-ref.png | Bin 192 -> 243 bytes ...-source-surface-paint-svg12-argb32-ref.png | Bin 182 -> 229 bytes ...e-source-surface-paint-svg12-rgb24-ref.png | Bin 192 -> 243 bytes 6 files changed, 22 insertions(+) diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c index 5c1a02dcc..60cd4a35f 100644 --- a/src/cairo-pattern.c +++ b/src/cairo-pattern.c @@ -2098,6 +2098,28 @@ _cairo_pattern_get_extents (cairo_pattern_t *pattern, x2 = x1 + surface_extents.width; y2 = y1 + surface_extents.height; + /* The filter can effectively enlarge the extents of the + * pattern, so extend as necessary. Note: We aren't doing any + * backend-specific querying of filter box sizes at this time, + * (since currently no specific backends that could do custom + * filters are calling _cairo_pattern_get_extents). */ + switch (pattern->filter) { + case CAIRO_FILTER_GOOD: + case CAIRO_FILTER_BEST: + case CAIRO_FILTER_BILINEAR: + x1 -= 0.5; + y1 -= 0.5; + x2 += 0.5; + y2 += 0.5; + break; + case CAIRO_FILTER_FAST: + case CAIRO_FILTER_NEAREST: + case CAIRO_FILTER_GAUSSIAN: + default: + /* Nothing to do */ + break; + } + imatrix = pattern->matrix; status = cairo_matrix_invert (&imatrix); /* cairo_pattern_set_matrix ensures the matrix is invertible */ diff --git a/test/paint-source-alpha-svg11-ref.png b/test/paint-source-alpha-svg11-ref.png index 3b3a990c68e99fbafbb520ab985df61dd78478d9..8736d44ab6265b2f5a140a4b2beac7158a320058 100644 GIT binary patch delta 732 zcmV<20wewT1M~%uB!32COGiWi{{a60|De66lK=n$sYygZR9J=Wmpg9TKoCIRe)tmz zNF_@jAxF>=d<<8C3&RLp7)D?iE?fkuQsoRff{vn+g$qI;Xo}ihrXWR|k|-rWV7t%= z0|Be~yj{+4R$@M%*X)tIySshM|9xHV{q-H?1aJZn)9G}u3x9+VJq37td~6Jy17kY< zc75IRuZ5siiti5(SRtre|F`i0^dOlKD5W};vN^0INg9Kyf;?}uED6)J=kK(}MiG&< zyeNg)0@%n=0MGOAJP)N*AD}3j@3I7Ab^vS;upWSuYuyJ}E}P_8 zwim#RMgT2$O6>2%r{WEm_Loz7>oo`0@2X&7>Tc}bZhn9a$x@@ZzlU=27N6%_>qOO}|n zjx(~>A_q(xA|_+f^DmGTXexZ%fqf1F7z{a0VU?8l_9g;m9%M z#Ax&&!cl;dl8g-5hIj?gZSoM9>;O2bHbP8{Zt?#SprpjKABWolh=Bx{u$@NA{#MYj{#Vj z6#!uxwg4J(111OkOp=s6{~)l8$7_^&K?pktFgOct?{Be@?X>n9vx|$1#-Q>ck30SK z^LIb6Xp-ODd?ku3p4U%v{6=I2>O~dNd*|Eo;azY7IQYNdJ=Q<`1pWX9CM7#o21vR9 O0000Zaeo{mgl8>^!aLd)>iS}L z`~5)Yl;V`S1e5;}fDnQxijdNWrfKRO z*1~)aLV$C~rn%N;SrFjEYhV_d1w~PywZ7bZyaWwJQ z>4KJ)0|zV?0Dpt&Jq=*{BT@{@H#$KZK0X{#Q`6BgXAVF~*?TO|0SeHR+z)g|98C{> zGl0P$`qz2|kbQCmEUy3@M=aN!@mByAi^IJENC6Ej8T$hM0qP(?a2D+E_Ef5(k^VNj z-OdM?C6xCUTmSeu(5IyGE=U!#dXO&3f6!6H;nkyxBx2a9ZaNh{#!z#T!fr0KBb zlH`n1?skCuH#D)7Hk8uM(b_}t{i!O3IYUY!T;X>@EVu^CV=U`;043m VwVks@lsEtY002ovPDHLkV1mdk+Gzj) diff --git a/test/scale-source-surface-paint-svg11-argb32-ref.png b/test/scale-source-surface-paint-svg11-argb32-ref.png index de274f95d572950cf0676c35974d7f10f6fbc83f..ed946d4d4074352f971058f4cc87c475e53e123e 100644 GIT binary patch delta 201 zcmV;)05<=&0p$UZB!32COGiWi{{a60|De66lK=n!nn^@KR49?1(aQ~jKomydj|qDz zff6jiSc#p`ik+~S2CxH4zy=r>GYCXOqGvhz&z<|=M=D4uozS8IeNWdB&Ry^zS z(Bg)3E>jW0w(x*E9*fYF@a3SJ2Esw$D>d|bRUW4>mM&M48A34&ole+&)|T#8X_j!! zLKJ^WoCWoVLPLGQaZzHAo|B9F3`a00000NkvXXu0mjf D8AV%T delta 154 zcmV;L0A>H>0k#2)+4$_jh14>9I<`5a#Ie>_gIjwf)YiIelhB}l|o|r+-q(nru*MSF&4Lsw1cHwrl z(taV!&H9DuBN{!Bq{f`Q+qKZr10nRPP_OTQz!0rLTnB!32COGiWi{{a60|De66lK=n!s7XXYR49?1(ZO-VAP_{+w=Ug9 z2!ucg3PqtQB$NRm3=ymk2-)&&Jr}AQx_W-`!rKS4z`Cw-&QeOlji5Dp9}*3H26E2! zeOF2ufm%5Z&T~i{IAX0000GYCXOqGvhz&z<|=M=D4uozS8IeNWdB&Ry^zS z(Bg)3E>jW0w(x*E9*fYF@a3SJ2Esw$D>d|bRUW4>mM&M48A34&ole+&)|T#8X_j!! zLKJ^WoCWoVLPLGQaZzHAo|B9F3`a00000NkvXXu0mjf D8AV%T delta 154 zcmV;L0A>H>0k#2)+4$_jh14>9I<`5a#Ie>_gIjwf)YiIelhB}l|o|r+-q(nru*MSF&4Lsw1cHwrl z(taV!&H9DuBN{!Bq{f`Q+qKZr10nRPP_OTQz!0rLTnB!32COGiWi{{a60|De66lK=n!s7XXYR49?1(ZO-VAP_{+w=Ug9 z2!ucg3PqtQB$NRm3=ymk2-)&&Jr}AQx_W-`!rKS4z`Cw-&QeOlji5Dp9}*3H26E2! zeOF2ufm%5Z&T~i{IAX0000