From cf04242047a8437a78e8c4643422512af76d63da Mon Sep 17 00:00:00 2001 From: "zimmermann@webkit.org" Date: Mon, 23 Jan 2012 12:42:42 +0000 Subject: [PATCH] has problems referencing local elements https://bugs.webkit.org/show_bug.cgi?id=76800 Reviewed by Zoltan Herczeg. Source/WebCore: referencing local elements are currently rendered into an ImageBuffer by SVGFEImageElement, using the local coordinates of the referenced renderer. This approach is buggy and should be avoided, by moving the rendering fully into SVGFEImage, which takes care of respecting the correct transformations. This fixes + local references, which currently breaks two tests in trunk. Covered by existing tests. * rendering/svg/RenderSVGResourceFilterPrimitive.cpp: (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion): * svg/SVGFEImageElement.cpp: (WebCore::SVGFEImageElement::build): * svg/graphics/filters/SVGFEImage.cpp: (WebCore::FEImage::FEImage): (WebCore::FEImage::createWithImage): (WebCore::FEImage::createWithIRIReference): (WebCore::FEImage::determineAbsolutePaintRect): (WebCore::FEImage::referencedRenderer): (WebCore::FEImage::platformApplySoftware): (WebCore::FEImage::externalRepresentation): * svg/graphics/filters/SVGFEImage.h: (WebCore::FEImage::~FEImage): * svg/graphics/filters/SVGFilter.h: (WebCore::SVGFilter::absoluteTransform): LayoutTests: Update svg/filters/feImage-reference-* results, which are fixed now. * platform/chromium/test_expectations.txt : Updated. * platform/mac/svg/W3C-SVG-1.1/filters-composite-02-b-expected.png: Update for marginal change. * svg/filters/feImage-reference-invalidation-expected.png: * svg/filters/feImage-reference-svg-primitive-expected.png: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@105612 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 14 +++++ .../platform/chromium/test_expectations.txt | 5 ++ .../filters-composite-02-b-expected.png | Bin 29566 -> 27972 bytes .../feImage-reference-invalidation-expected.png | Bin 11174 -> 10551 bytes .../feImage-reference-svg-primitive-expected.png | Bin 12790 -> 12344 bytes Source/WebCore/ChangeLog | 33 ++++++++++++ .../svg/RenderSVGResourceFilterPrimitive.cpp | 2 +- Source/WebCore/svg/SVGFEImageElement.cpp | 25 ++------- Source/WebCore/svg/graphics/filters/SVGFEImage.cpp | 59 ++++++++++++++++++--- Source/WebCore/svg/graphics/filters/SVGFEImage.h | 10 +++- Source/WebCore/svg/graphics/filters/SVGFilter.h | 2 +- 11 files changed, 119 insertions(+), 31 deletions(-) diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index 23df13d..b4e3d88 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,17 @@ +2012-01-23 Nikolas Zimmermann + + has problems referencing local elements + https://bugs.webkit.org/show_bug.cgi?id=76800 + + Reviewed by Zoltan Herczeg. + + Update svg/filters/feImage-reference-* results, which are fixed now. + + * platform/chromium/test_expectations.txt : Updated. + * platform/mac/svg/W3C-SVG-1.1/filters-composite-02-b-expected.png: Update for marginal change. + * svg/filters/feImage-reference-invalidation-expected.png: + * svg/filters/feImage-reference-svg-primitive-expected.png: + 2012-01-23 Csaba Osztrogonác WebKit fails IETC composition event types diff --git a/LayoutTests/platform/chromium/test_expectations.txt b/LayoutTests/platform/chromium/test_expectations.txt index 6875d1d..e737985 100644 --- a/LayoutTests/platform/chromium/test_expectations.txt +++ b/LayoutTests/platform/chromium/test_expectations.txt @@ -3923,6 +3923,11 @@ BUGWK76647 : svg/zoom/page/zoom-background-images.html = IMAGE // Just needs a rebaseline. BUGWK76780 : svg/filters/feImage-preserveAspectratio.svg = IMAGE+TEXT +// Just needs a rebaseline. +BUGWK76800 : svg/W3C-SVG-1.1/filters-composite-02-b.svg = IMAGE +BUGWK76800 : svg/filters/feImage-reference-invalidation.svg = IMAGE +BUGWK76800 : svg/filters/feImage-reference-svg-primitive.svg = IMAGE + // Change error (misspelling) underlines from Windows look to Mac look. BUG_CARYCLARK MAC : editing/deleting/delete-3928305-fix.html = IMAGE BUG_CARYCLARK MAC : editing/deleting/delete-3959464-fix.html = IMAGE diff --git a/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-composite-02-b-expected.png b/LayoutTests/platform/mac/svg/W3C-SVG-1.1/filters-composite-02-b-expected.png index e18f5bda17cb6e04cd81c294ac3b8441db151d2d..8048156f8aa1b21203faa9b76dda7dff683639e0 100644 GIT binary patch literal 27972 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 literal 29566 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 %3;0%!y7 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 diff --git a/LayoutTests/svg/filters/feImage-reference-invalidation-expected.png b/LayoutTests/svg/filters/feImage-reference-invalidation-expected.png index bdb6ba2f439f54b99612f4dcbc0b1166a399ade9..c319b37188e47ef6c8b0dc079af4c3dcdafa5a23 100644 GIT binary patch literal 10551 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>i1B%QlYbpRznkB9gCCM47$=SuFxeP|; zNoEE~$%&?hCWhuomc~ZLNhTJ_mPw|D#%V@|#ul}rX<7^n3Jjhujv*C{Z*LytZFUfG zcJz4c`CNLIL)E4<=>zpOn|7?fU#j=MwDI%NKUSOg1r!__7#NvYIG(WD{cK?pf^h{D z43rZZ&V;-a0LnoX)iN?Kxj(T5&Syzu;h8W~OV$Zu0#MZg{e*@u){`cHO$6yW(9^(Z z6ui_KW&{hz7gnALb?!n4i)IKKIHavA;Q%=TY*FLB2F6S8J)B^CMkZq>wi7;6`4pi} z6;QY!Zs71s*3$!Sae~_chM6lbDI(nVi;2x+zcME$)a@)BXE-Djj6Kfv&^ zTtyLKu_PmN$}+EZxE6sI+!6|Z`&3lm7LNuB$7rB5Ff@*)l!nplGaSp5@0It?m?D+5 z4hp&t_&s*XJw%k?Ih+y-(Y3qU5Cv(}0S3?O$})(8R2Nu~uJ*rcBw?J4N4Xjw3aEDu* z;C+DM=Bvx52)A7V)-I!gG8!nODTQe?`!F<)mMH?G1uYB5XzkN5S|uw0n@pqal+nf; zBhzS$R$;W6&ml0{_hD!p?GQFNjP{Z_Mu!fVSVo5q97e}e1QbRGnHWch4uCTWqeBOy zLkGaI=+U8r(V+w2bP3gl4rJQB6Brmc_JY;|j81oq&H;^gTe~DWM4f)w<){ literal 11174 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYV2a>i1B%QlYbpRznkB9gCCM47$=SuFxeTVJ zX{i=Q7N%)tsTLMViN+~O#%Tu0#;N8hsfI}gMoHQ|yLJIhk;`;;4)An#RtPA{Ps_|n zWnidaYz?`eeK|nn->uZS8y&$LET`mM z{{7YelCRF1$|LweMq%F+(<4d`BNt@GTqzNLaIN$GTtm}CXMKtzma}lmr(5JFH$Lp? zRi2h+V(Ku9^AP({CoAtA4i+;qAAIJ$ajsG1iMra#NqXHjt6hWipQgBO;`#PLzPR~Q z{Du`%Ud~?oT%b31mZaasny!2DmbC>v&ls*Aw2znA>$qcXL4?`k#in&mXI0h-s_lLL zt|W8D+tgXpBQ=FoWmNVgg{(8q$$ZAm+&Syn<+on~CT*B+vfsow^7G@j0aICC8y@}o z&D-tEuD#c9Pn^vD*wk*h=Cyi63cG##$=PMfhmVv8 z+B17NHTB7)Xgrwc#FIEH`N*mtK4OweUP~@zmV{JpvbbigF?rfs8TX2l@q9bt#J)yv z+VSnd?|FAsulMZ{Z9Teu@r}T@TN_{Q+9W(ny1q1V>EgVH<~yIxmd;(x%@O#o>*+?1 zxYSerO@Y@-&7MsNp8ltl`@GSVcdBJV5j?xre2Dv@mBZ!VDt>7C{wpWW-CHYox}i|V zZuPw2v&Y`3Uh=v0I%UWHuCGqVBz{gXbdH+4PsMjmm*uBh0o>|rvU4M)AWw<9&AV+w(gTm*3uZIpy_Y!>HH0FHhXHXk*os{@d!` zZ2MLTOK#e@Z)05;hxV35$yr{TOZ*v_RdfBOe`cNhUa*C`remFMXaDM?@Cp9fT=_G3 z;->R>uJ^d9x52vqE%UbEYq8HVs zv@qU?fkA=6)5S5Qg7NLmi@b*%cvuf|_c}jU3|%9#cOm2BkAK$`&Aq>~|Nd*1ck4Ir zeV6gifRTxXLqNfy;lNJ=AjtsZI;bi*Xk`|Ir67VISdT~}saPQVfpy7dvrf2<1A7`6 zX4W$?AheV)F^#Gi4G&lX8%-ahxnVRnjOGS#jWN9HhU?%|fL{yI(bRKY@`1JLy zAG}6Y5ED=^+))UrY(YUVjg@6o#b|iI+E1hDV>CC6=7!PS0Io1b>xR*~aDUG%Zfo)mL`q1nnqhqBd68$gIQaUXZapaJ5k`mTLw>8 KKbLh*2~7Y-&t7=| diff --git a/LayoutTests/svg/filters/feImage-reference-svg-primitive-expected.png b/LayoutTests/svg/filters/feImage-reference-svg-primitive-expected.png index b5695970799abdf141bbe133b2ec6f81b1ea90f2..7e19e76ecb27d24cc0eef3b1c1af802668042af2 100644 GIT binary patch literal 12344 zcmeHO_g_=j-%moKfnbSX1*A$uDYh&DnKGgvU{OIOOo0d#6o|wkdnFF61&!8$3J6ui zny{+OG7_r{Q9%m{h>Qpbl#Lj|=6ho9MgM{4_56}wkk`5QoX>i{KjU1y;B>%ljm!oa z1Ol;Uuf5G71VV~{K%m^PtH8?bh|^T?&kv{exSjGl_OoAbSU3gY@2jV;zunOIsF9w2 zfWF~TfBzl6ekK71ekMCi0*w52uq$@eAP@w^UYlLcQOMCwN=iU@^s0%p&W#aA71c)a zpAl2f)g&n@;(OldtfJc#`8esdJ6|Dg&f%?pxb7#)?h%I&CS{hW5@f&ipnQtnUyHBX z<#^BRt@VmLD8bFVlH<*#+54|1sQ=MahF3g#>+P+9BVmo@iD@Abw=xEf3@mjnXM0;T zy-fc&(&IW?>`eEnxDjKjxWy@P&W1~JJwqVU5J(gnyU&OG?vveiBz+c_o=9CXxPAHa zGJbG#7VT5p;~zA%3S;jFjdw}Q@p;mC@vb`QZG^g`Gn#ZgneQseDUl!UV4)`}3Qk0$ z{(chL7uA*U?Y;FjVj*bsy32@1SXA2D3ADdKjJJb$Ib}Z)sr=5iLyoR0ZxS_e-jZ(x zi%?kaMEt(eytK=jqi}gstdY7%SNxz_7VXsAB2x`b>ZJPBs&L~2;)C!}S2#Z;;NK_j zGg?Gi{Yq^CxCIls?1awr>t9)jKEd<*DLYwa=cQ zVAfqOVHwY?Lwkos$wdCQ3D#s-(TT_l{a_&d4D*f8CdN8@NTiZ8Q2ttLjdaKXzM)Kg zKceck*mFu5G?f0|*UL7etnd@-b5-4DR6Z+D*e-{}_-~5cQ6r0K?DQ#4oP4J%G79L$ zNe2!xr8H|jmXB(F<9^Xk34S2Nti!LSbL@e3S9EGAYsCRblLv0D8K^-gDVX#~*Hg># z_ldO%xkbx7Yl)~5{Rn#OFy{Smu3%YUjZMqzEc+}f>l{skpv?=Ze<)qKw5Fl1C89q; zY$;s;qBDBP!zDzsF0XJ{Z3XsZVpXycq zh!)#ab4n~Xalw(>m~k=5=tr@|uWdo}j95m4&glHA1G6_9@;fxdPpBVJGWE~XqA~Pc zn69~!UAp5vaEP?Obt0Br^D&_-;yPxg6%$|D!RQKG>qP8-v^VVKZvJaJ)B1dX-fx@X zXSzRR(JHql%gMKGKss8L)OtZGTn32zh4(u)7d+41+ou5G-~w*Os8UMnb?N(!h~g*e zJ||tS39MPux|*d=b&G}NQG!>(HkH`628 zk=D9XYH+-=(Uq8BT6i>$hxpTg-PdKnT$=4>MU32>&8poZrd&HN3ia<27NK;8v$N}d zT*^_oF*<}CZvd$-Hx%6vQ@I$lUo8{j=t~=pXW=Th>{9X?npv;IoiG=!aH%+Gep*@X z_zqZd80rqqLd~G+W+zy}-G2^{@Q@fYI zaoMFfY(VzBfxI}lL_QiQla8o8FDm(vi5T?SckDDywng_wI#c zX0qG#N4&sK~%(sb|k%mZWtlxnrZY+FiZtGxJxW<`+G zXd7ct`iLP}opNCclf78Sw1^GZp0XAOr^-6;&Kat=E#DtAR_-`!;%<=XC|2yHqey(j zkVw1&yU#R`6fcY=J;*Sc+|>cOj7Yu;+!-SO`h|3^9lvY-IzwPG`yCXdCGbeL&=2^O zm@%Q=)afH=P4ofLID4Kt3^PhyItuk@t9|Nbsv3RXGAAy*zP1h`eZuGMVV}1Ts_UAR z4(YNziy!H~L3S8H#*?3eceIpSK48DoofytMWO+$A5ecCVgi0!16i{LYU%kNMkf1J6 z|A|WE3s^D|KnO|w_A=5*BjP!w$$9Z@rt8M)IA7zj2spn=;i7On4o9c^Fo4-L#+@`{ zL$Tn(8{qU{X$rsF0{Irvp5pyWe?F5vSHWCN4rLE3LfX+dI1roYKh7_!6&|Pi#1LoO zcHG55<>)b>us@CaIW{&r(KYu;j^-o~TALGX6exV?e}HvopVYi^B@1v(stGo;H^-Cq z+lqsuWlco7C*2LkyJ0&7VWfg88O(~<7t%oQ7ypG!bOXkpp(-T2JvTtISR7?GA4r?P zpU8lqiN{Z%x6-tHmr(4f;~)H%JdHL(=E;I;p!{3@8xKBDNb-t|4@NyzfI!L91{@pC z@mSV~!SUwua+Yolu$eW;ZeN1=5`qkU;!!f#6Vr9t5HVD*GyAtDt9mZnYRb<)_~cG; z^f;objl7Xflcky66_t{hp)}I@Z!QkzbjUznAgiIk0ax~vzna9F&s_efcZX7@00A=y zB={Di{)AFzeu*dZM0vPF=q?j@-@l@LoH^h*M9bPEADK_l2W8rOEDc*4BgC*tJ= zokmI^X8O)S!Hgp78Y8y?N_XT0aQZ?-&|P(0?ouVA$SEL3GKj$c3aDPS2z!o-PsfOnaSRr$Bx~Dk$D=}fcI>f z!EA~y8X7e0WjjW~&Bsk92rl8)M$HfIzy=ELS{D~5^nz(WBcdMyC zn2t+4qGF^wv>QQJ1Z{$@+S`TI>n^`i`97aIznYmKY`(Bn8FD=m)g)r{l>AbNdZCBq zrkFBreUdt)S;}sZ!D}{j*c>7YD6T9=%M#PYy%Fwk)W&f$ndEPFYtp&8CPG8iJeL!0 zV!330)K1$7s}turWE87As5P=;LrUv8IG)3x9pcsWUCq%coU>lFn9g_@`eqU0QWzfe z4263P(w+D%HEi>be`Zn>b`zFiPhmj}k5W&X(jN<*777`S1IW)+Xm~)m$jKXL&DEA(W8}R_g^M<5v@{4WjKgcxu}7l3 zxz_A~z*sH%zv^&Zy(bUyyYn#BfaNoMQrP5Tu}Jyw^f;VBULFJ)#Pme?T?4O^$GJ}# z&Q;UQ3*YcdVC~R6QCS9U*7hRKtqNvBuL39!_v2(KqjNAI^VWkmSjMkS5(T3!rQHVw zoC4?3?rx=j2H`hs0ZH%u%sAc>%y5n$dcu5~%J?t81Gf^L*MQ@%|H)rQ(Q%D=bI&wb zU6c8WaczlEg+gO@fTs4gRt&4oJaTe9YaTfHouf-$Zit|>UIUIp+mE1Du=>*aM6F+y z(6w{&2{U77nk;4C3M~~to34>PDVMgkE!Gy$niM}_O?r@7eM>W1dqo-Xm=T74oGxr& z%5{g2T&TNav88NtDJ+PvT_nkQ_~zKFBhl_$J4+A2n9zBY%FL;-kA#OUB{$Bp^LI*7 zW2x-PBxc3xZYhkbNXX&_o3qW`BP(^8E_)SridFy-$>zaHBCch|79eP z`wF_4!}-FDT;GY)@Nus|!3)4yC3IM?W}b+9*CS+*yx21*Tr@T7mRW4LIAihR{=fN+ z_heCx=fixjxQdR_{2P}_T{oKTX!i{FTXBQ|7-a(fZsYzHp?l{Tn72rwW**_6UXfb0 z66VK92Hs_FV9^S|W#1QO3%YvB=NZ>8a{oE$KRN$VGY&Z$Ga9!E4j|E%hv(Jvs68IwNB2f z?|H3#YkvtW7|jEcd5HFUtI*h-p_app_^O(r%%NB3`|Hq<%Z>U9eU`f*}JYRS>DnX8fpqFp=_ zgkrCV1ixGcs0W?PS4(anja@>*mV!NcNX%AS?O)++13-g$rVMi%(1-AS7VX)e7`WJi zqq1lwQePCqJ_F%YDki`b0Y|UH2f~RJAfA4chLT^oqYx32hU$@BAts)H2eYGZ%L+We z(N4tluQU|H&jbI}lFY9LD_kPdi2I1h3kPv4^@KnqB2TXR%IIG~G1Uv&^_9}w2#sG^ zEOCM;UJ@iooFFE?1PKx(NRY5nE+ll2&_O~62^|0nzBqw?_>R}YZ}+9Y>N>NE!5p2} z8XEQGHFwZm4{O680YIx7jKpLM=GH*h(xU!aGmGY5b^l9$eM~!xR^-iozcN2#{lT1( zTMB=I09xdM1>Uf+`HDXDTpH?k!42p>6`TrGLH!%En6xt65-x)w=~36eU%KKV@a@l| zpnGD)B=jRN=J7l?d^wc|7KQ~XcUBB1x`4?j#sT`o0?vBvK|~&}N?5s4#p3J1gzO%A z{L85x;OIkP!zS@V4T^0oW<>-qEfDc z)>eldAP{jl1R~}vEeSly4v!B8-gbo^aSrwJ^YOZX4GVsBNEZeH|u47IrP{DM<;+nEvlimg^T_XFLso7Km0B~qW0f(|xCOiLkoQgWZK z1VyK>X;$*&KEAQdW^UWlyd1sbnvUXC^EFJ~gpuaZ0QxR3o*0nHtc(zTLI3XeEw4|*Rdlbf4@VXv^=OCDwn=R6rwND0i|WcxlQu?J=p8=TC7 zbi6QgSE)NxnH%h^-=BW~XWph>v~EY;&_t;JpW{B+SuVTQYpAK$o;z8D2=HggiYH{V z+Q(uM`x<*IvF=_N%bEH(Xt&n5~Kr^ZZZ# z#Xf_o!5r1VLRsk(g2cg6E40sByZ95GVfw5z$1HxBEPa2*ghu#!XSwRfQ)uq)02#Y$ z$}h7TKE9^)JXzOD2-%A)%yVpO9@F?>^I_DxvLSKSyjg{prfYE~w_g4DokSz{7kgPv z$%yz-);BlpPN}>a>e;>@RnkwiE^SYJsXTimX6sZvq8{m95p=`z0i(X%do*A7%xF#f z&Fa5OFJ}-LnscV91&W)>O6yB;r=|Cl|K)Z5*wauuh`2_eZ5C(Mt;uy)Wn*p>?MomQ zo^wjG+anW1l0#?7Sr=P<)+#Y3j*CBc{B)M(?~XO%><%7Q{n8BnG{AbOQrsl2<{vY0U6?VjAdKorFAH$OzSP-2$zVFYF-G3p%=o2Jo_x`FzPo z+hsnzyyw0j0)a!U4<9-i2_5fd6yLw*vTDk=eUpkL#_+g`k;M!1U5%w`GUYPo9d_S8 z<){8}w|(li;jPU(>iqK2pSzl~yY!m<{_1(Ce7QdbPw3&wKQrjB`7J>W^U}tbUej4o z&$P|HO=`oDXI+^`oaX$82H5&Nb0>S>-820ejO>zHc&3usOU&E`T2oR{4 zgtWp9<;tA`bE)-Q0_AK3UCo3WXEs9wp2Pn;L3OJKA>i=w)Rb9ossQ~(S;Y6~3hmPhJg2fp9_LpkTyfpB}c2SF*L z^7y(f{F(iz)BwkGE~}Tx?t@WBWFoY?psfXW?UY0*@-$otO^Gg2lBmq|u(LxOR(lMa{UOcjx z0A-`sEE=EbtzY;l_VRnYn&tA2hO$ucfxT(9tpeFG!35FuV)vr48@LW0j1!Z5&ExSZ zoYq&4YKePmoF{Hw9(1z@7RIxG^hR$De$U=rxA=v2UV@$r=Ww{d}c2#_>BgFXljC; z@e8qf5AN!!4w&i0=Ny&Uxg1|KE=*B70s(GG8J3VsYk$OjDjg>-g+X$-)LGm@)L~dE zxb@gIz*NeK$mUh+Dn|-P+6}>nkmd5nmURIyu>-D)d=WinDf<;WM7>4+`F)vf+l_&E1~a!Fj42)ES=G7Z_Eu68gZq-BSD2(ufpILk!TG+ceB z3W|s#5*DL7+kH-@8!+{e1u`4{Say{uyckma5)>^1yy6~KF!ea(R$sHC%5QvRDjxJF z6x@#Di(()A{3EG{cYnHcR$C16OFYyQ0@T5E93vS$c8{ct{z_$>Jq})L>OF8ROVudi zGYQ;5&TLSdnrZbXantL|C!;(90j~-Sp&RE@5Ol4E`F?CYkDrVZ#Q!fZ?o#NRVlNvBC^~CeGMGV6~+FF1=TDTh5a8VdaOU|Rh?=?^%XE8Byej1UmHSkipO#(7OlkY zST7!XPteM8##X>Cmh_vuh-##$pB*IQ$wU+SiIrhx6a`WRd59daly!@lrZR$PwOnJ^ z&-$J#paSk%QXs>_m-5q1e)K+q)r>ws2c8T}1;gh~1%>uzaJ<$mQGN;;XK}q}o+#)O z7wg>XetC9sQ5U-?4&%x$T7lZO*X~8YXE*q+s`ZO%ik-AeAwE9sX0bf#Y)65((7)W; z7{^?AOZ~n0?ur(>PD9<}!=Tyo8qN593s;NRBp@ zKS)d=-q^2pXnE@{OTdb->59SkEydY9PQ#y7L$98z-@XMd?zI8DfaJ~RWOAQ zXw;#G5=|IQ3Jht5u3%t`Mp+x=V(*JVgIs(d>zM&2{Q3<8(3DUy$s3)NRf>@lNeCty zx!@V&rgIMV=kgIHA!1Vc6X&FYu2Qn{OlM;3uI~H z5!k^@#w`~IaPzpQiaID7?M-ypYdqe<%pOV zfs?Obnv5wrgBvUQhlme=ZEPQWqtmQCfJxJxzJdu@G7%fkp@9y$PYJ-vl9{^X+J*dZ z_edP81wY2e6bvKm4(&li-ylWw;Hgs?J|<denL6(?ZE3u@N3`DD^+aBbIMi$kC zO`*=?4LOu68*W||x}q;25n0wMmOnx4hz;Z=x4>}Gtk-PC;@Wk>NkHQ8)>djoHhU4< zYS|yClUj?@LXkbRfuOJZ_;rdH)*Xgu;He^le!ie;?6 z@_9Ky^xCO!)Y$prg#f$lU=Hfi0?w)Vfx~|x(@Z#HRAZ)d{b&ArQmZz8(S1P^bRMW! z^ga*5*t73{#MIJbF0)3N*-`vAqzlE}Y5BRuI472hW>kbQfZSr8G2XB3$F{a49zI=o`O}ZjQ zpS}_mA+!L14pykuHJWZA!+>x4BBSQ1XUTV}7V;dKEg=KnAHi})D>AMt4a$K_;yCMp zh)SlJ7 zE(mJKpSyleif0>{7MX!St`WRO>a zSK&JV0SBWq6IYak`kTUTG8d+EAa|9d0%}No`ark}UIKUpT5`oy64H-%cn}^R9Y6Gs zN5Bm6e|!|p5a~nYA7I}2e~Sh+6pBE>NRRQSX&AMUV`9ErgW1uV^lx>wvP+n+C&QJq z@+#afOmNa0bWr9=AsfMr0Eq(t{O{6Jq?L+a`YKQ*+-ovS5`suR0s5h4^2wMm!5#$1?M3jk^T3n(84HO=tx@D=#6P0s7 zn*3K(xnpRLIz{d##Xqcmo8W>bD9Z0oVyNIp4}`Sn1&tP-O&Y`qxy3kN{+?R)PCm zOI&F{q2MkQi1o#mK%sDNCFIh|%$rsk!0@!a9t8D@etn^EK7ep8_r3{xAXY%bE1eOt z@{I;0Za=__9@~cqPga*zfxj8AOcAmZ67cPWNG&3@0I5>sEkOMJOM(dL6rK!$taVuW zEr1ATMDPow6;W0KTA`w3y;NX`YM3SJC@SrM!ckQ5E>TAj5m=&*B7Ow$J`rtPN|Pem t2;@l-n_fzjBHH-xp^g71Ra_L$+@9gU#6CU({E-7 + has problems referencing local elements + https://bugs.webkit.org/show_bug.cgi?id=76800 + + Reviewed by Zoltan Herczeg. + + referencing local elements are currently rendered into an ImageBuffer + by SVGFEImageElement, using the local coordinates of the referenced renderer. + + This approach is buggy and should be avoided, by moving the rendering fully + into SVGFEImage, which takes care of respecting the correct transformations. + + This fixes + local references, which currently breaks two tests in trunk. + Covered by existing tests. + + * rendering/svg/RenderSVGResourceFilterPrimitive.cpp: + (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion): + * svg/SVGFEImageElement.cpp: + (WebCore::SVGFEImageElement::build): + * svg/graphics/filters/SVGFEImage.cpp: + (WebCore::FEImage::FEImage): + (WebCore::FEImage::createWithImage): + (WebCore::FEImage::createWithIRIReference): + (WebCore::FEImage::determineAbsolutePaintRect): + (WebCore::FEImage::referencedRenderer): + (WebCore::FEImage::platformApplySoftware): + (WebCore::FEImage::externalRepresentation): + * svg/graphics/filters/SVGFEImage.h: + (WebCore::FEImage::~FEImage): + * svg/graphics/filters/SVGFilter.h: + (WebCore::SVGFilter::absoluteTransform): + +2012-01-23 Nikolas Zimmermann + Not reviewed. Fix Mac build, by exporting a new symbol. * WebCore.exp.in: diff --git a/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp index 085e650..183140b 100644 --- a/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp +++ b/Source/WebCore/rendering/svg/RenderSVGResourceFilterPrimitive.cpp @@ -91,7 +91,7 @@ FloatRect RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion(Fi subregion.setHeight(uniteRect.height()); effect->setFilterPrimitiveSubregion(subregion); - FloatRect absoluteSubregion = filter->mapLocalRectToAbsoluteRect(subregion); + FloatRect absoluteSubregion = filter->absoluteTransform().mapRect(subregion); FloatSize filterResolution = filter->filterResolution(); absoluteSubregion.scale(filterResolution.width(), filterResolution.height()); diff --git a/Source/WebCore/svg/SVGFEImageElement.cpp b/Source/WebCore/svg/SVGFEImageElement.cpp index 0c833c0..d64c232 100644 --- a/Source/WebCore/svg/SVGFEImageElement.cpp +++ b/Source/WebCore/svg/SVGFEImageElement.cpp @@ -33,7 +33,6 @@ #include "RenderObject.h" #include "RenderSVGResource.h" #include "SVGElementInstance.h" -#include "SVGImageBufferTools.h" #include "SVGNames.h" #include "SVGPreserveAspectRatio.h" @@ -183,27 +182,9 @@ PassRefPtr SVGFEImageElement::build(SVGFilterBuilder*, Filter* fil if (!m_cachedImage && !m_targetImage) requestImageResource(); - if (!m_cachedImage && !m_targetImage) { - Element* hrefElement = SVGURIReference::targetElementFromIRIString(href(), document()); - if (!hrefElement || !hrefElement->isSVGElement()) - return 0; - - RenderObject* renderer = hrefElement->renderer(); - if (!renderer) - return 0; - - IntRect targetRect = enclosingIntRect(renderer->objectBoundingBox()); - - if (targetRect.isEmpty()) - return 0; - - m_targetImage = ImageBuffer::create(targetRect.size(), ColorSpaceLinearRGB); - - AffineTransform contentTransformation; - SVGImageBufferTools::renderSubtreeToImageBuffer(m_targetImage.get(), renderer, contentTransformation); - } - - return FEImage::create(filter, m_targetImage ? m_targetImage->copyImage(CopyBackingStore) : m_cachedImage->imageForRenderer(renderer()), preserveAspectRatio()); + if (!m_cachedImage && !m_targetImage) + return FEImage::createWithIRIReference(filter, document(), href(), preserveAspectRatio()); + return FEImage::createWithImage(filter, m_cachedImage->imageForRenderer(renderer()), preserveAspectRatio()); } void SVGFEImageElement::addSubresourceAttributeURLs(ListHashSet& urls) const diff --git a/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp b/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp index df68a6b..fa86cd0 100644 --- a/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp +++ b/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp @@ -28,8 +28,12 @@ #include "AffineTransform.h" #include "Filter.h" #include "GraphicsContext.h" +#include "RenderObject.h" #include "RenderTreeAsText.h" +#include "SVGFilter.h" +#include "SVGImageBufferTools.h" #include "SVGPreserveAspectRatio.h" +#include "SVGURIReference.h" #include "TextStream.h" namespace WebCore { @@ -37,19 +41,37 @@ namespace WebCore { FEImage::FEImage(Filter* filter, PassRefPtr image, const SVGPreserveAspectRatio& preserveAspectRatio) : FilterEffect(filter) , m_image(image) + , m_document(0) , m_preserveAspectRatio(preserveAspectRatio) { } -PassRefPtr FEImage::create(Filter* filter, PassRefPtr image, const SVGPreserveAspectRatio& preserveAspectRatio) +FEImage::FEImage(Filter* filter, Document* document, const String& href, const SVGPreserveAspectRatio& preserveAspectRatio) + : FilterEffect(filter) + , m_document(document) + , m_href(href) + , m_preserveAspectRatio(preserveAspectRatio) +{ +} + +PassRefPtr FEImage::createWithImage(Filter* filter, PassRefPtr image, const SVGPreserveAspectRatio& preserveAspectRatio) { return adoptRef(new FEImage(filter, image, preserveAspectRatio)); } +PassRefPtr FEImage::createWithIRIReference(Filter* filter, Document* document, const String& href, const SVGPreserveAspectRatio& preserveAspectRatio) +{ + return adoptRef(new FEImage(filter, document, href, preserveAspectRatio)); +} + void FEImage::determineAbsolutePaintRect() { - ASSERT(m_image); - FloatRect srcRect(FloatPoint(), m_image->size()); + FloatRect srcRect; + if (m_image) + srcRect.setSize(m_image->size()); + else if (RenderObject* renderer = referencedRenderer()) + srcRect = static_cast(filter())->absoluteTransform().mapRect(renderer->repaintRectInLocalCoordinates()); + FloatRect paintRect(m_absoluteSubregion); m_preserveAspectRatio.transformRect(paintRect, srcRect); if (clipsToBounds()) @@ -59,15 +81,37 @@ void FEImage::determineAbsolutePaintRect() setAbsolutePaintRect(enclosingIntRect(paintRect)); } +RenderObject* FEImage::referencedRenderer() const +{ + if (!m_document) + return 0; + Element* hrefElement = SVGURIReference::targetElementFromIRIString(m_href, m_document); + if (!hrefElement || !hrefElement->isSVGElement()) + return 0; + return hrefElement->renderer(); +} + void FEImage::platformApplySoftware() { - if (!m_image.get()) + RenderObject* renderer = referencedRenderer(); + if (!m_image && !renderer) return; ImageBuffer* resultImage = createImageBufferResult(); if (!resultImage) return; + if (renderer) { + const AffineTransform& absoluteTransform = static_cast(filter())->absoluteTransform(); + resultImage->context()->concatCTM(absoluteTransform); + + AffineTransform contentTransformation; + SVGImageBufferTools::renderSubtreeToImageBuffer(resultImage, renderer, contentTransformation); + + resultImage->context()->concatCTM(absoluteTransform.inverse()); + return; + } + FloatRect srcRect(FloatPoint(), m_image->size()); FloatRect destRect(m_absoluteSubregion); m_preserveAspectRatio.transformRect(destRect, srcRect); @@ -84,8 +128,11 @@ void FEImage::dump() TextStream& FEImage::externalRepresentation(TextStream& ts, int indent) const { - ASSERT(m_image); - IntSize imageSize = m_image->size(); + IntSize imageSize; + if (m_image) + imageSize = m_image->size(); + else if (RenderObject* renderer = referencedRenderer()) + imageSize = enclosingIntRect(renderer->repaintRectInLocalCoordinates()).size(); writeIndent(ts, indent); ts << "[feImage"; FilterEffect::externalRepresentation(ts); diff --git a/Source/WebCore/svg/graphics/filters/SVGFEImage.h b/Source/WebCore/svg/graphics/filters/SVGFEImage.h index 2bd1525..53ef0e1 100644 --- a/Source/WebCore/svg/graphics/filters/SVGFEImage.h +++ b/Source/WebCore/svg/graphics/filters/SVGFEImage.h @@ -29,11 +29,14 @@ namespace WebCore { +class Document; class Image; +class RenderObject; class FEImage : public FilterEffect { public: - static PassRefPtr create(Filter*, PassRefPtr, const SVGPreserveAspectRatio&); + static PassRefPtr createWithImage(Filter*, PassRefPtr, const SVGPreserveAspectRatio&); + static PassRefPtr createWithIRIReference(Filter*, Document*, const String&, const SVGPreserveAspectRatio&); void setAbsoluteSubregion(const FloatRect& absoluteSubregion) { m_absoluteSubregion = absoluteSubregion; } @@ -47,9 +50,14 @@ public: virtual TextStream& externalRepresentation(TextStream&, int indention) const; private: + virtual ~FEImage() { } FEImage(Filter*, PassRefPtr, const SVGPreserveAspectRatio&); + FEImage(Filter*, Document*, const String&, const SVGPreserveAspectRatio&); + RenderObject* referencedRenderer() const; RefPtr m_image; + Document* m_document; + String m_href; SVGPreserveAspectRatio m_preserveAspectRatio; FloatRect m_absoluteSubregion; }; diff --git a/Source/WebCore/svg/graphics/filters/SVGFilter.h b/Source/WebCore/svg/graphics/filters/SVGFilter.h index 84f2843..c88079b 100644 --- a/Source/WebCore/svg/graphics/filters/SVGFilter.h +++ b/Source/WebCore/svg/graphics/filters/SVGFilter.h @@ -41,7 +41,7 @@ public: virtual FloatRect filterRegion() const { return m_absoluteFilterRegion; } virtual FloatPoint mapAbsolutePointToLocalPoint(const FloatPoint& point) const { return m_absoluteTransform.inverse().mapPoint(point); } - FloatRect mapLocalRectToAbsoluteRect(const FloatRect& rect) const { return m_absoluteTransform.mapRect(rect); } + const AffineTransform& absoluteTransform() const { return m_absoluteTransform; } virtual float applyHorizontalScale(float value) const; virtual float applyVerticalScale(float value) const; -- 2.7.4