WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
another round of platform specific things and a lying compiler
image-orientation.diff (text/plain), 216.00 KB, created by
Tim Horton
on 2012-04-05 01:54:59 PDT
(
hide
)
Description:
another round of platform specific things and a lying compiler
Filename:
MIME Type:
Creator:
Tim Horton
Created:
2012-04-05 01:54:59 PDT
Size:
216.00 KB
patch
obsolete
>diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index de81042..36a821d 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,28 @@ >+2012-04-04 Tim Horton <timothy_horton@apple.com> >+ >+ Add autodetection of image orientation from EXIF information >+ https://bugs.webkit.org/show_bug.cgi?id=19688 >+ <rdar://problem/4126979> and <rdar://problem/11091578> >+ >+ Original patch by David Carson and Eric Seidel. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add a test ensuring that images respect their embedded EXIF orientation. >+ >+ * fast/images/exif-orientation.html: Added. >+ * fast/images/resources/exif-orientation-1-ul.jpg: Added. >+ * fast/images/resources/exif-orientation-2-ur.jpg: Added. >+ * fast/images/resources/exif-orientation-3-lr.jpg: Added. >+ * fast/images/resources/exif-orientation-4-lol.jpg: Added. >+ * fast/images/resources/exif-orientation-5-lu.jpg: Added. >+ * fast/images/resources/exif-orientation-6-ru.jpg: Added. >+ * fast/images/resources/exif-orientation-7-rl.jpg: Added. >+ * fast/images/resources/exif-orientation-8-llo.jpg: Added. >+ * fast/images/resources/exif-orientation-9-u.jpg: Added. >+ * platform/mac/fast/images/exif-orientation-expected.png: Added. >+ * platform/mac/fast/images/exif-orientation-expected.txt: Added. >+ > 2012-04-04 Simon Fraser <simon.fraser@apple.com> > > REGRESSION(112939): compositing/reflections/backface-hidden-reflection.html is crashing >diff --git a/LayoutTests/fast/images/exif-orientation.html b/LayoutTests/fast/images/exif-orientation.html >new file mode 100644 >index 0000000..7509718 >--- /dev/null >+++ b/LayoutTests/fast/images/exif-orientation.html >@@ -0,0 +1,22 @@ >+<head> >+<title>This test can only be run with layoutTestController (or by manually setting WebKitShouldRespectImageOrientation to true).</title> >+<script> >+if (window.layoutTestController) >+ layoutTestController.overridePreference('WebKitShouldRespectImageOrientation', 1); >+</script> >+<style> >+img { border: 1px solid black; } >+div { display: inline-block; margin-right: 20px; margin-bottom: 10px; width: 100px; valign: top; } >+</style> >+</head> >+<div><img src="resources/exif-orientation-1-ul.jpg"><br>Normal</div> >+<div><img src="resources/exif-orientation-2-ur.jpg"><br>Flipped horizontally</div> >+<div><img src="resources/exif-orientation-3-lr.jpg"><br>Rotated 180°</div> >+<div><img src="resources/exif-orientation-4-lol.jpg"><br>Flipped vertically</div> >+<br> >+<div><img src="resources/exif-orientation-5-lu.jpg"><br>Rotated 90° CCW and flipped vertically</div> >+<div><img src="resources/exif-orientation-6-ru.jpg"><br>Rotated 90° CCW</div> >+<div><img src="resources/exif-orientation-7-rl.jpg"><br>Rotated 90° CW and flipped vertically </div> >+<div><img src="resources/exif-orientation-8-llo.jpg"><br>Rotated 90° CW</div> >+<br> >+<div><img src="resources/exif-orientation-9-u.jpg"><br>Undefined (invalid value)</div> >diff --git a/LayoutTests/fast/images/resources/exif-orientation-1-ul.jpg b/LayoutTests/fast/images/resources/exif-orientation-1-ul.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..6357ff0c2f95025c9bafc91f1a56c3e5bd58684f >GIT binary patch >literal 8602 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 >zq^HNv%&)Ax%H1rO_%>*yI1uG2)IX6olp$*RaM	($FPhecj7^C2@%Y13~v4W;4fu >z+->>PUdc^SPFgZps%#^JsrrP6Ua>A@P<m%sk__<2zwIhJK6hLek1pE5zJz_nEshMf >z4dnx2S5b0YCk)KVr|-tLPt>bQCk)!I=fZBKvPK5%WxK3eQ~P!pveFXPEj}hJzg3&G >zUs2nnt|WsKkJKj3?j~$955eL*5;W><R%Xb6Sh9R(H@&aBeOvfj`}$Y<gzkHv5`J)+ >zkO6cqp}Wk341UPMljB7H_Ihc$=<b_=?_s~DJ3Qq#6~@)Jv(Jj|zDt;!t!cYYeS!?W >z8}6^&@+X6`tIeBakUzlQK0Onxx05=hw#rjN2I^ykgvad@16zo$g!y!5c)rc(&1>k; >zn?mr3eH3P<lQ677267XBNrUYW8BAaFcKrE{4D?jOf0#M0*iAKV7uE=o!R>9&-EvE{ >fIo8gs4TbFkWZ-0LvLkH_>$iP<N9eDb<Tw8T(4WRw > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-2-ur.jpg b/LayoutTests/fast/images/resources/exif-orientation-2-ur.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..0f260e3723411d2f16818a718b95d84b56cb82ba >GIT binary patch >literal 8602 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 >aP}n{|22QpnJJQCmf7{o0g#Nfme)Avl2*z0e > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-3-lr.jpg b/LayoutTests/fast/images/resources/exif-orientation-3-lr.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..b50b430c338061499d0d671d46e118e90f02a984 >GIT binary patch >literal 8602 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-4-lol.jpg b/LayoutTests/fast/images/resources/exif-orientation-4-lol.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..486dd06df6d15ff5e908f60234f04454652df9a4 >GIT binary patch >literal 8602 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-5-lu.jpg b/LayoutTests/fast/images/resources/exif-orientation-5-lu.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..7689d63c140e86bb14caab3027f7b455a4e5dc61 >GIT binary patch >literal 8602 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-6-ru.jpg b/LayoutTests/fast/images/resources/exif-orientation-6-ru.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..a51a1262dc3c378c1450f730e0047877ba47d2bf >GIT binary patch >literal 8602 >zcmdUUcUTlnvv1F4mR(>;l5@^Mf*?5uB}YYa&N)aBP!L2=R6sz9f{2150wP(00Yy;2 >zh(rNJ1QE&X84U0D-Fwb+pL@=8|GB+8Grz5_uCD5??w+b8zb20Z8be(JT>wE4(1$;O >zJOPq)qP#r-ICKbz003|R4bcK5j39u4Z!7@)3j<&XvHpY2A)!A!2mn&O0qPHrJ^b7& >zuw=OX-zTCN@ehYvG4dZQv&RbSFv+}aprz$#YHp%yV5|cx2LSVeb5M{Uf(8KpfUppA >zJxwlKJ9{qdTY!f@1V91goLxhMG)zs6f6Mr<?mtI<=>T4e@5%bFIQ|bblAC*|D{O=* >z%;Vw~>go^UdH@ibu0bJT03g?4`isc0AQ+<_!I(Y-RuIPT_ps-0ytId1eqr?92+@aF >znri`oW`c*A;OrdY2>_7~rgKHOdctyu+5li^1Khj=0HCvlv8t<=vl~1Xc`%QdzklE! >z?uN0D%fHF-{5S0E?DCIHXJ^lU@NZk-mT<?~-l0K$&e6Yq{J*^U`-Q{f^{ddrcS3;Q >z;k~(Ggs(X_XKf?+$p&A$L4LpH4CaAY+yksEVA>uQ3vfAX@&~JWgy@>X7;X!h28C(v >zVR+0SkDxG9%Rlt^7%#2EFebqCi|(O1f8`YWI2-QG85K;g3kf&3f-xVAJ3=EYbYKj7 >z6f_;<Woh$==ZBlS_8&R|;o+@o@S6ug>m6pW*B3oJ=RCfFMteHIeIew55%2@<ARL6i >z_W&RcjDZ%={&N=x9>5u{iGb@ufiL(3V}H0sAlxPp#$12+wEh!C_g6blxZVFMkqfxO >zyy5@!`MWnRxX-^by@4By|I(e|KKAPNv<r3gPWo4$e>wK#{nAFNT54Wu`>#$Y0hA0% >z4yB1wL8+n+04@|GiUo+H_M;S08YnfCGF*26=z?ijvgcnN_vHK6c|_y|Mk`r+!L@s~ >zyZo&M*1x#D|M~r&GyvYu7aAA-Y5+i(dlbA50MH5yiVpGi^a|tBfLE@&7?(kStArSr >zjFhz0UiJSsWpB^=t?Y{Vue}Ij9QYT_Qw9LJW!R?#|3&l81>gbf*Vy2H(F9<>qv{0U >z@kQ70kci*%P<szFycbf#9?A?j051@N$5{r*17)BNbbui+0hYiH9E1JG3--Yf5D8*I >zB1i#ez&UUU<bxtm2Cjo!pbj*G7SIWL!Bg-841;%I9L#_(U<v#LTkt`Fg@_Ox#0+sl >z{E#Rl11UnPkPc)FnL~Dv6XXd6K;cj<lnkALvY~va1ge7WK=+|e=rJ@1y@4j6dFVT| >zi9jL<2zmrNLI5F&P()}Tj1ZOx2ZSdg7!iXwiO59cAxaT95e<k=#8bpDVjS@Wv5Evp >zN+cta8!3)dL~0>TkoHIqWC$`InU2gsmLhAA&B#9FOXN6m0l9&~py*IsC~??N^-)$R >zS5z=69+iR0M_orXpt?~nQ4^>o)GnHcW<!gjmCy!gTeK%S5}kt1L06#fp?lE7=o$1+ >z3<kr95yU89^f7iAAIxz~2IdN;7Sn+l#7tpUu~;lKRurp(HNiS#!>}pX%h;RPcI*&# >z2D^@<#Bt(eaJo2qTmUW!mxH^3Yr_rUW^r2-G!*<4N)#p(ZWPfJSrp|I%@hL^GZb5R >z5?&Cmg15x`;1ltA_!@i<{ylz$l9G~#@&Kh7r8ngX$~?;3l#eJUC^rbS1QCK3;V2=T >zkV&W{bP(PUR)|ER08yQ2PYfew603+0iDSfdDmp3&Dg!DvssyS6ss^edszquFYJO@B >z>SNR~)H&35sRyVRXeej|XtZdYY2s-LXztUD(yWr`NYW$|l0PYfbc6JmG)If26`<9j >zb)!8=TSohkc8U&3$4jS0=Sr7MS5DVMH$#u17o<0!_n|*Se~bP({SpH$!+r*9hA4&t >zhE|4gMkJ#EqXDBIV-{l_;|SyCKK6YY``q`X?W@^0v~P`xl}Vk+ohhBEmT8!2lbMTI >zhuN3;JaZ%S2No2I2#Xm@B+FHn9+m}GdRAptSJrgaI@Y&r2sRNmbGGAbWo-RytLz-? >zdh9{$m)Re(FK{q&sB`#mT;younCGP9ROR&MyvW(k`I(D>OM}agE03$2Yl)kUTc10e >zyM+5W_ZE*Jj}=c6Pc6>}UOcZNuLti%-Y(uHK2E+ve6f7hd~f+F_!arR_;dOD_}2sk >z1#ART1sVnB1epX41Y-oN1>Xx1h17(Cg-V5931fs6g?)vu2)__Ph{%a}i4=$oh$2Mg >zMZHC@hz^RO#SVxCh?R<siW9^RJ3#U~^fC5$DKBpM|aCHW-nCC^LtN$yI?N%={Y >zOTCk(l{S=4l5Up%E+Zo2DpMfyN|q?AE1MwOB)hy{bie!ltNUNe(a9Z>OO@-A+mTn0 >z50S5tpI6{ha8f8#7*(WKG*!${d~^VPK=VMtftCXsO7co!N_9%#l*N^Om2W7|9TYt1 >zez5%DlnRfEvr37|xGI;blWMW*xEi;bvs$Uzq&ly<n|g)%tcI|LkH$@nMNKKq5Y2m< >zYg$TLaatYPNNqjsbnWLlv^rKg`8s2|Ji4B`)w)Z1a(c)0I`q-{M*8RVM-A8wTn(xW >zmJAgP;|#lv2u2o0`9_n*BE})c&4&<&3=ds6^!_ma;ef-9CcwnN<bufuQ$f>U(+6f4 >zGgGqyvrp#I=CS5|7IYSl7B?(@T54KmS-!IpvI@8AvZl5^YF%Z$W}|JBZ8L5wX&Yzz >z)Q-i@+pftTYj15|VZVAr=g6faGe_l)rW_q{5Oj!gczlfInBTEhM`}lB$Gc8wCmW|5 >zPTS5V&ZW+)E(R`zE=#UjuDPyX+|=DJy3M<*xM#c1dZ>70d(3&NcwX?F_fqr9@mlcK >z^3L~O_R;q#@>%mW@vZbF``P%_`s4ha{O<?Q2KWYa2XX{P1r7#@2Bidz2P*|%3SJ5^ >z3aJQ%LLEYz!sy|b!~Srg@KfOv5vmad5$loGk$0m=Q2|l?(IU}l(X%nSG1rcxj=LW3 >zisg<?jGc(nh%1SQ;$7mq5_l6%Cd{1BJ8?Y`pXi(TEJ-RUJLyNVO>*-|_LC=0PMy*_ >zRh>eW5|T2Ss+?MM8g<(H^z$^?w99F`>2B#y&PbifIkTPNn(^eU^x3?#<V=su=UMVu >zSI=S21)Li>uXg@=HYqzMd+NfW3k?^!E~a1namn%0<DC6DMY;Ig@Z9k{<GiNJe3#E% >z-p=>RA1=@=s4ZkGOe<Ww;&x@|s`}NMBKD#)MVrOm#ji{BN*YQ9N^{CEWf5hc%B{=$ >zt|?xts$i)&Q?XMSP&t0x{CanlLRHlbwi{X1i0bg_`I|>?zPP1*tEoo3rlgj!_RMW? >zJN)+NJ5F~->Wu2T?ke7`spqdRyhnF0y#Z>7ZdhvcY8-E}YZ|<7c)zPzx%u7$i3gP} >z+${yI46Rvh__mX6<o1~M)sCQ!g-*}TsV>K^cMokJzUnsXe%@o$^Qc$1_hFw#U;87K >zM=g()9^ZeW_@wcv{L_Yhx&C|4<euGoF8{n?Kw+Ti#eo;ig9iuOhSY{SUuwVXeP!_K >z>G0v<!4a#G*P};A$6vd>o_pi>X8CQz+pTve-lN~Af1vr0GsZSn`ce2}?YR7S>xA}1 >z|D?s_yD8VHFVmsZ+cPIW5kKY3a?V!G$;`FP>(0OUeB|@Ym!L0O3n^boUkew77VE#M >zf9qeeU7A@AStftaSYckN{IUN>*Q)92*iZkTTWjg-%<I=T6gT=dZ8m4OBDb;Ic{{>8 >z&AUds@5%mTa*%U~^RIV-y;u$50Y`A(E8!Tz4vrmO0D$lK9aH?`fWs9C=7F&_l!gdK >zD#Gt}Gw4T{N^BM`n!+7_gwl#&Mzp3fr?#hYB6-mU(52A#Fp~BiVX9zWW<AK3%KnB^ >ziYuP`6|X2?GXDobC80dwpQ4sx^%4w{(NYsK#<F#CZ1O1z-ws$RwH)M8Ijy>=Zmw}p >zi%C05=Z&7Cey+i)k)?6<p(ztOQw=kJ^IVHg%TLyL8(~{ryJPktN0N`8b0|1g;#lEy >z-MP}G(zVR(s{1*Q1kV7kW8Q~-4*H7vvHDZ`ZwAZ<z7FaOZVagm%?Udd9v0ymX&$8! >zEf%xyICOj=b~LUt{$@h%iNr+zB->=IlM<&`QqU>OsqareN~=#VK9iAg_H0&WW>)68 >z%=2fn&s;ctG3ioVPFSvAp37zHe1ihzLa{4sS1GS<7JVvyUUIiIuPnCQ<(htlL?wOY >z*7eD%CpYd?=if}a<yT`>t9D!X4&9yIy1BbA>znQsHk@d5ZPK|f*o<qQd(hW%tu?Xj >zXuCoOO~-s^XII|CfNrfG=APx=7kzgh<vfmga_p&QztA(PXRFWO4|Kn{Ie2L({-x(D >z(_y6%-cjP{+UtooLvOp@)x9tMaDME>$G~xi3ByUbDXwY!^!J%JpW0{3=Thf=KOg!c >zu|QZD{aU=}`%Pg9y)?Rf^ZUsarym-t{6DFG?yN1X&uvU@PHs(Yf7<!F`-4pWHUByY >z4WuM;5!H!K#aLh^a16Lvie7vLWd<RF=t!kctw6(0q9pCoNzxx<xX9Sggk)A=@nS7u >z`@q4%X~vbw-Or2X)8juS@K^{ZY$%c``bwNr!b|d=G*ZSy_VWHId2xkE#V#dEWs8Fa >zDidnL>i!yanj6}xI?1{%daw284c3h?#-u|WhXqX}O=ZpG&E+j*Eyb<)tyyiTZGr7K >zyD|G`N1Bh8IGi|k#8J+P+G*ao+ojm`xSN%`qzB$(#<Rn#z&p~%%va10>o@7&8gMx< >zB*-{eAOwWG4ZRz7Hrz8pBa$`pN7VD^%9y0%M`HKK5#m0@w<qMC2u-w2QcdPPi95M? >z>Qzc}YVqk)X};;EXXG-NGstJBGaqHuoXb8Rk$vQX+C{EQ;L^vO_T1vU#LLe4ngzUt >zsKS{meOIfB&J+ifn3l?xF_f*Bzq{5}QCgXF-K9$N22VAzdg|uGTje#$wQjey@9@>3 >z>Zb4Z)L*-IvcauUyNT~U=KezS@PoFNs@4l_@$J4HcAa`%3J-<4S$e2?5xwhui;rd= >ze|R$TbfEw7v;OA;1A{MK4vq}He);y*`{A*X@zKfG({Db#oqhND{lbT(v6YWM$2TUS >zDgNohGtr+aXWz_|J|F&ae&Nlc$hYLBsqe-s4_0M=)~?HLJlN9R9^Li+Gyf9M7sM5$ >z1qz3{kB-2|W0tW^xOfVEJR5$AvYU`Y^r6zB=BC~yVQ3lYMCcDN=rCIE^I<x{e2L{2 >zYY*EP`z9wnmlXG5o<QDAzFYhQ0xLpH!fGO(q8Vbh#YZJ}q`0MZWxQn5_urIzCcmIa >zI3T2?uk3a(L8VZ&My*=?sz#P(yq2%Ft&X~`fF6b3oPLkNRl_hNU1NIV@k2KbhnUEl >zY?`*3#hWXcuUg!;^tIx*`e>bRV`)oe+h><(uVlY+<mORN2Tq64W9J+VoFJzb=NOj* >zE^Dq0Zei{+?#mvvp8j4UUUS|RK5o8Tz90PZ{jCG&0tN!l1nCE(gCB+@hN^~chusg4 >zija#~j;x9DjTVfaiYbCUg)w$0E;C*~0h#ddL<a0D{7K8nttZn@S*P%(d`o?BIyKEa >zog@A8nR^*0&KhMhW=>??JQs0ZGn+d5{e`NF5tp=bNI7G<)p^mEb@S=-C*V^v?uzkM >zmaB6`4aFx*EK2!Hx5`G!Z(mEVaH~|i&U*c4)zFRF>WrJ-xAbZRYEiY*w;$dqt4qG? >zR&RJusX?kyu!-|NQ#1VoQVXe-zKyk=zeA=|yUXrjXm?gmZSPRu#$&E04o@eZogUc# >zVrHoLmFI}+Ymv9&?+=Y-jennt`y@UOzN~!1f7e*eT3^`?+?)U3xuv}`0V5AUIW2r3 >z3<F>l`Wy4B!RJRm0H#C$EDr$0DGq?xhX+tb|3Bvk1fL=pKnZ7TSm3ORBsd7inRdVj >z90yr&G<hG6ALk(?#0p1=hL9^12jxNaa1{6rL4^=U96|&l&Lip(uMs;)9;5*>2$_fM >zM1FzKB282Psu1-AwSg9b<Fa&g3;G*|7h{Xb#Pnizu?pA_>@DnPoFL8vR{`%<!W8}# >zcPQ5Is`wQA03{2hJLMe$hTu$SC9)A?i65!7sH&*xsN<=>(j23CNirh!!m&&*oiW`o >zy)*qXLoy>X<DGrx`_`F?nGKoOSSnfV*obW1?C~5*92=a?Tyfl5JOrNCycK+r{DuO2 >zf{@_2P?vBeywgRAxr<v!=twF_NlS~!2*~p97nBo~mr+nwls+J=#IMYIkWWQORZ>k! >z-B9DGW|&r%c8$)E?xwzgfwf_}QJ3+~VQrIa(<yUBi?i_Qr(siMOSX4D((538EXN6Q >z4s`kGX71kSsqS^(N5i+@|7gHcP+EvU=;QF<NY1ENF`2O@@$?BF6K^M{o^nZ5Pa~#} >zW|U?Io>R{zU6{UfKR4^LSAo_QuB+tYiPE0(nu@&Zr*4Gbw6D>+Em_A|PuqZRLN{Yt >zh;7UrqFq|u&b=v*>YhwKV;-;?%z4E!Qu#*q-Gecu@w-zzGpVzapJf+f7Mqq9SGZOU >z*FrZgZ#~!<|FwTWaMl+C=fUUzJDhLW4`-Sz;5<_lI19?*9KtAAfoLEhNE12=ML`## >zI(Y8CBj^xv2wOxf9N#}eEFqbYnn-`-Wn?dM1;vZ9K%Io+^LaQbH-lsGR`d^yIK~rG >zhWUtP#~#HNVn5)xaBjFN+!BQ%MIuE%o(b=cze|avw4|&cAPAm>=R`$fIUMySQ>{_^ >zQ_s@4(oB&&NsF}6bXdB}^pf<C7~J4^v|^tX6Q1cIa{`MB%PwmdTROWX2RFwuXAf6C >zcNmW;uOuHW-%tK=foFm(LbbvbB1NKwVg=$?CCVjhq?)Cl$c)LZ%2CUUDHtgpI}omv >zrCfdRiOPZ+NnJ_9UGt(=ulAO%j9!3#wZT^-8RMu!JtoYi!Djsy!j`A47HrIHo9zXT >zTy#Jmi*j6a_HvnWb9JBg^zmBqN%W)luMX4>ng~e@;|uSP43FlGc@=v)UM*oGu_-zF >zlv*n0bZ`2}46RILR^R#b3x_Y!<-Ex&%J(P~zp`4?T9R63evPwY;rfFcXKo&@p{xCH >zr|NFxJ^e=3rsd|REfsC2I^4Sqx+QxVA3={7p1ytdbf9(c&dZQt@sZir#cyri<3BWh >zbe*7>yfLjmGd3GAxA{3~0r~aB;?`2o^3;mukB*<BYdITW({t<Dj@)j+pZQ0@xpxv^ >z1%hy<Nf%!G{va6?fCexGmf*P;gACw|P%4}Q>W7vP42XjWH^f;)6Ji=kLaM_nz6ALa >zg+(1ig`#etrqJy0YQKmc!q8$YFqbfIu$)*AY%O*Z&Z1nzO;gBIq)~jt%i%Ne^OQQ2 >zWduq>9N|0BhxiH3Z_H5#Qg6{@ka$V$v@Ud%bj|dE45AEQ;FX=oWX&waLdCMgI?C3? >zUdK_vS;SSqeTAotw}!8U|FOWR;Jh#-!X~OL<|uwz;-2IuX*L-f+1&l_<oOhW6x)<Y >z%H9WiRQc4>)K@fJv_^DHbo=#93`UGxjaLo_n9P_tnvYpJT79w!wB5BocT~`!)6vNp >z<x=ft<AL#f;2q>E=r<8i48NNThAxM<MP^029zPhz7{7YrbyC~Os+645G3izrGMRK) >z>*vQV^j)gUExvrNAn8g(kza{>nbS4L%41c|)fTs;YpHL4t?RG9(U98Y(yY`%-8$Z0 >z(;4+pr3du3KRW(I?&;TOr2}?@R6}VmpAJJK3Zs6ni{A{r1MkH@SdK-0%o(ql=$w2u >zH8MRsGx(`{wr;L)KJK&Q7diNi@x#~3#gK3E-`1DzFNb}X_&&c<_`_rsv3mQb!y10A >ze%)aMvvF(Fd~<#4%C_3}#7^=q?`{{_X>a~RJ!IjWC0rnaCY*j8Ba>GI;9O-k06XW& >z<gHRNd8Z5xHsJq2I{beBU$MuGfphMKjeDq9>*R^O=f4;7J9rmCK+xV70e|6wL?ibK >z28BYRu^2e*2Iu9lI7$jE4v)iND2NnzN=gEOfTbW(5eZZ<q}&s-*B1G!Et(RC!NHld >z|7Ia~01^&Pp}HX<9)KW0ND@Tu2Ar_9XgCcDm%nO52qX#(YXs{7Gu)$r)kh)`u(D_r >zoR@`<Jp}w87YR+vEv<o}GjqoB1k=kTo-e`iYToH&FdtmvlXVG6qQEomV`66E7Z4N@ >z7TGT+ub_B9NlRNtS5M!-(8AKn+6GPlySll1czSvJgocGjL`Fr&B%eH$l6pEVJ^RAN >zOF6lDm-9=@%CA*aUaz`QcenmtLu1qZ=B|g`J-vO89zPj+`D%D%^!1y!6O&WZGoNPX >z=07igU-_~6b8UTNbI&e#FaK@UKbHM(c9CGa5bzwJuzPkvh)DQCl2B-FX$-A~8P++N >zjz=aDN3VIl<W46AudMkJgG<ODo{?|=1po4$X}>J{zcVc9e`MJ|hW*Q~w}1f0x(E`I >z1k}KKO}bF+Oz3){P-!|4s?oDqpP6W-+J5JwpmgHGSC1a!7_0YHeB<Y5c*}Jh)(;8` >zCLd|rx9pIWQ9ttF1z(Q7we_i%*L;bCuO=>K>sX^W%^c*UqSB?TL@ct;e12*4O<B}^ >z{iceX^(|pt$?7vk-+cNO8@EX-yJmw+-*zV*H$xxPUi<PXYn^v?yR2;D<4$+`kJ(5^ >zgNKm}{n^)A?mSvj%N40cxcZkg++K*NE9B_rSlx9GejAt;>bQlwMFy3832{M=+ZWyh >z?nGT9gNjK59eSI`MaJ}II$-Zg*dJ!|^yAWPxo?}q&t$O9EJy|ndfQ^e<GaZ*?YkHQ >zGU&0{QBUZRSIpf_eVwqq&vcha24=owFfg~%znPN0aeS8%(@F*!t&U`X<RgR0>tt{$ >zu{PmFpbZ&xJXTx3p*C5-W<&;B3u?QR*Ev6nCv5C+-oN@_`3dfp<Uw4{Je%Q|SYzA` >zfW9m!7W~<O@9Ok$LfYEP58DQHOFIqa`TT7ql_rs_x4LuAhKDg*a>~n4?)Q?ttLPN( >zq?x`P7ysFj;ThqoQ1&51quA5=^BK<=qm_+3*|8>u5$#n+qiWs?#hL}HUL%M%D=wDH >zim<tINprCUAA8REGi({nZ&aXC{ND1y&il21`RZ2x*}zwu1W97ENYa%fO~MslM-J5w >zk2S0`UNEuRe740O8?jv3Nd|8!$7j>GHEPz2dW!I2>=Iq<F<&~{cnS`+FP(k4UTNN2 >z8Ga3M=X1lpNyS?Q0-9-rXEf#^WDr0GojkG1<zA6$9D=FcEQ^&jN4M>kRSHMm=B5R# >zQcF-CnPM}}dD;Jz4wcRC&45(=zIN9+c>VH{vRzB_l1WPV@q!0cat=Id0==u(T!Y=t >zA2SN3)e(r~DeoV;ZjN}s$mE*;V*nrPyIhob(7Sg1LdUMevg+AMNrsjX-<WHe)hexv >zw+EAW6)eh93$J_Nj}`_fesP@E%V@({cX(`&0pTG7({N?lt-}@>M_m;RTe4dMeH{#K >z($nK-=2uo;<!%;Cd>b@U9EkE1>YvCP$`CbuIBXVlY3LHMzV2ndlDI^HfuQ>ivzg;S >z?zVhtujHmECoLH)Rko4ARDHrjuUHo{D7~{RNe1}i-*%N9pF1v#M;Gm2U&6lP7Doo# >zhVp^1t0+0H69(qw(|2RrC+bzD69#S9b78kqStA4XvRziKseL;PS!oID79SIq->Oa8 >zuc&QOSCYYrM{1L1cM~?5hhT9Y2^#e_D>Gz3ELlFYo8H&mzAgN%ef=waLifE-2|qYZ >z$N)N*&|T(120vus#c`s4d%ZMWbob4`_po2f9bWRA3gc?q*=I#}-zCh=*0kNHK0yZG >z4foe>`IAA})#gny$RA*DpPmWU+ew{LTjePs1NAXN!sGUdfh|N=!hE_jyxwN?<~4Na >zO(FQgJ_<9_Nf_231G$O6q``KG45lx7JN|q}26`&tKg=9g?4}yG3u}bP;P$rXZn>q} >f9BXIRhQjs%GH|jr*^xGe_1nI_BlK5I@|*tvce}=2 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-7-rl.jpg b/LayoutTests/fast/images/resources/exif-orientation-7-rl.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..5c1c15d3958b34a459862226ceda617d2c7a1937 >GIT binary patch >literal 8602 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-8-llo.jpg b/LayoutTests/fast/images/resources/exif-orientation-8-llo.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..34b895f913aca224bcb1f3fa16f0c9d2594655f7 >GIT binary patch >literal 8602 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/fast/images/resources/exif-orientation-9-u.jpg b/LayoutTests/fast/images/resources/exif-orientation-9-u.jpg >new file mode 100644 >index 0000000000000000000000000000000000000000..76e9d905cbb5ea4ce8136fc186f33c6dee9a59e2 >GIT binary patch >literal 8602 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 > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/platform/chromium/test_expectations.txt b/LayoutTests/platform/chromium/test_expectations.txt >index ef03f8a..11efe91 100644 >--- a/LayoutTests/platform/chromium/test_expectations.txt >+++ b/LayoutTests/platform/chromium/test_expectations.txt >@@ -3979,3 +3979,6 @@ BUGWK83173 DEBUG : http/tests/websocket/tests/hybi/workers/worker-reload.html = > BUGWK83183 MAC : svg/as-image/animated-svg-as-image-no-fixed-intrinsic-size.html = PASS IMAGE > BUGWK83185 MAC DEBUG : fast/writing-mode/relative-positioning-percentages.html = CRASH > BUGWK83219 LION : fonts/cursive.html = PASS IMAGE >+ >+// EXIF orientation support has not yet been implemented for this platform >+BUGWK19688 SKIP : fast/images/exif-orientation.html = FAIL >diff --git a/LayoutTests/platform/efl/Skipped b/LayoutTests/platform/efl/Skipped >index 522b0fe..da598f3 100644 >--- a/LayoutTests/platform/efl/Skipped >+++ b/LayoutTests/platform/efl/Skipped >@@ -1002,6 +1002,10 @@ editing/pasteboard/drag-files-to-editable-element.html > # http://webkit.org/b/79604 > fast/mutation/database-callback-delivery.html > >+# EXIF orientation support has not yet been implemented for this platform >+# http://webkit.org/b/19688 >+fast/images/exif-orientation.html >+ > # -------------------------------- > # Tests which are expected to fail > # -------------------------------- >diff --git a/LayoutTests/platform/gtk/Skipped b/LayoutTests/platform/gtk/Skipped >index fd9f395..9d4bb0b 100644 >--- a/LayoutTests/platform/gtk/Skipped >+++ b/LayoutTests/platform/gtk/Skipped >@@ -449,6 +449,10 @@ batterystatus > #Network Information API support not yet. http://webkit.org/b/73528 > networkinformation > >+# EXIF orientation support has not yet been implemented for this platform >+# http://webkit.org/b/19688 >+fast/images/exif-orientation.html >+ > ############################################################################### > # TESTS FAILING > ############################################################################### >diff --git a/LayoutTests/platform/mac/fast/images/exif-orientation-expected.png b/LayoutTests/platform/mac/fast/images/exif-orientation-expected.png >new file mode 100644 >index 0000000000000000000000000000000000000000..19e39a74596231c2e5daa82e3b5fd5993d8a4e5b >GIT binary patch >literal 46987 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 >zxn%0D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 >UZWL2IP67U*HP2`isa?4Je~DuvlmGw# > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/platform/mac/fast/images/exif-orientation-expected.txt b/LayoutTests/platform/mac/fast/images/exif-orientation-expected.txt >new file mode 100644 >index 0000000..7044c0f >--- /dev/null >+++ b/LayoutTests/platform/mac/fast/images/exif-orientation-expected.txt >@@ -0,0 +1,80 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x600 >+ RenderBlock {HTML} at (0,0) size 800x600 >+ RenderBody {BODY} at (8,8) size 784x584 >+ RenderBlock {DIV} at (0,18) size 100x70 >+ RenderImage {IMG} at (0,0) size 102x52 [border: (1px solid #000000)] >+ RenderBR {BR} at (0,0) size 0x0 >+ RenderText {#text} at (0,52) size 48x18 >+ text run at (0,52) width 48: "Normal" >+ RenderText {#text} at (120,70) size 4x18 >+ text run at (120,70) width 4: " " >+ RenderBlock {DIV} at (124,0) size 100x88 >+ RenderImage {IMG} at (0,0) size 102x52 [border: (1px solid #000000)] >+ RenderBR {BR} at (0,0) size 0x0 >+ RenderText {#text} at (0,52) size 75x36 >+ text run at (0,52) width 48: "Flipped" >+ text run at (0,70) width 75: "horizontally" >+ RenderText {#text} at (244,70) size 4x18 >+ text run at (244,70) width 4: " " >+ RenderBlock {DIV} at (248,18) size 100x70 >+ RenderImage {IMG} at (0,0) size 102x52 [border: (1px solid #000000)] >+ RenderBR {BR} at (0,0) size 0x0 >+ RenderText {#text} at (0,52) size 83x18 >+ text run at (0,52) width 83: "Rotated 180\x{B0}" >+ RenderText {#text} at (368,70) size 4x18 >+ text run at (368,70) width 4: " " >+ RenderBlock {DIV} at (372,0) size 100x88 >+ RenderImage {IMG} at (0,0) size 102x52 [border: (1px solid #000000)] >+ RenderBR {BR} at (0,0) size 0x0 >+ RenderText {#text} at (0,52) size 58x36 >+ text run at (0,52) width 48: "Flipped" >+ text run at (0,70) width 58: "vertically" >+ RenderText {#text} at (492,70) size 4x18 >+ text run at (492,70) width 4: " " >+ RenderBR {BR} at (496,84) size 0x0 >+ RenderBlock {DIV} at (0,98) size 100x174 >+ RenderImage {IMG} at (0,0) size 52x102 [border: (1px solid #000000)] >+ RenderBR {BR} at (52,102) size 0x0 >+ RenderText {#text} at (0,102) size 75x72 >+ text run at (0,102) width 75: "Rotated 90\x{B0}" >+ text run at (0,120) width 64: "CCW and" >+ text run at (0,138) width 44: "flipped" >+ text run at (0,156) width 58: "vertically" >+ RenderText {#text} at (120,254) size 4x18 >+ text run at (120,254) width 4: " " >+ RenderBlock {DIV} at (124,134) size 100x138 >+ RenderImage {IMG} at (0,0) size 52x102 [border: (1px solid #000000)] >+ RenderBR {BR} at (52,102) size 0x0 >+ RenderText {#text} at (0,102) size 75x36 >+ text run at (0,102) width 75: "Rotated 90\x{B0}" >+ text run at (0,120) width 37: "CCW" >+ RenderText {#text} at (244,254) size 4x18 >+ text run at (244,254) width 4: " " >+ RenderBlock {DIV} at (248,98) size 100x174 >+ RenderImage {IMG} at (0,0) size 52x102 [border: (1px solid #000000)] >+ RenderBR {BR} at (52,102) size 0x0 >+ RenderText {#text} at (0,102) size 75x72 >+ text run at (0,102) width 75: "Rotated 90\x{B0}" >+ text run at (0,120) width 53: "CW and" >+ text run at (0,138) width 44: "flipped" >+ text run at (0,156) width 58: "vertically" >+ RenderText {#text} at (368,254) size 4x18 >+ text run at (368,254) width 4: " " >+ RenderBlock {DIV} at (372,134) size 100x138 >+ RenderImage {IMG} at (0,0) size 52x102 [border: (1px solid #000000)] >+ RenderBR {BR} at (52,102) size 0x0 >+ RenderText {#text} at (0,102) size 75x36 >+ text run at (0,102) width 75: "Rotated 90\x{B0}" >+ text run at (0,120) width 26: "CW" >+ RenderText {#text} at (492,254) size 4x18 >+ text run at (492,254) width 4: " " >+ RenderBR {BR} at (496,268) size 0x0 >+ RenderBlock {DIV} at (0,282) size 100x88 >+ RenderImage {IMG} at (0,0) size 102x52 [border: (1px solid #000000)] >+ RenderBR {BR} at (0,0) size 0x0 >+ RenderText {#text} at (0,52) size 91x36 >+ text run at (0,52) width 67: "Undefined" >+ text run at (0,70) width 91: "(invalid value)" >+ RenderText {#text} at (0,0) size 0x0 >diff --git a/LayoutTests/platform/qt/Skipped b/LayoutTests/platform/qt/Skipped >index 9bf2aae..41c9d84 100644 >--- a/LayoutTests/platform/qt/Skipped >+++ b/LayoutTests/platform/qt/Skipped >@@ -392,6 +392,11 @@ batterystatus > # Network Information API is not supported yet. http://webkit.org/b/73528 > networkinformation > >+# EXIF orientation support has not yet been implemented for this platform >+# http://webkit.org/b/19688 >+fast/images/exif-orientation.html >+ >+ > # =========================================================================== # > # Drag and Drop Support in DRT. # > # =========================================================================== # >diff --git a/Source/WebCore/CMakeLists.txt b/Source/WebCore/CMakeLists.txt >index 5d4aa46..b9206ef 100644 >--- a/Source/WebCore/CMakeLists.txt >+++ b/Source/WebCore/CMakeLists.txt >@@ -1146,6 +1146,7 @@ SET(WebCore_SOURCES > platform/graphics/GraphicsTypes.cpp > platform/graphics/Image.cpp > platform/graphics/ImageBuffer.cpp >+ platform/graphics/ImageOrientation.cpp > platform/graphics/IntRect.cpp > platform/graphics/Path.cpp > platform/graphics/PathTraversalState.cpp >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 9bc66ce..81705c8 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,79 @@ >+2012-04-04 Tim Horton <timothy_horton@apple.com> >+ >+ Add autodetection of image orientation from EXIF information >+ https://bugs.webkit.org/show_bug.cgi?id=19688 >+ <rdar://problem/4126979> and <rdar://problem/11091578> >+ >+ Original patch by David Carson and Eric Seidel. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add support for respecting EXIF image orientation, enabled by default for ImageDocuments. >+ The setting shouldRespectImageOrientation causes orientation to take effect for all CachedImages. >+ >+ Test: fast/images/exif-orientation.html >+ >+ * WebCore.xcodeproj/project.pbxproj: Add ImageOrientation.{cpp, h} >+ * loader/cache/CachedImage.cpp: >+ (WebCore::CachedImage::imageForRenderer): Plumb setting down from RenderObject into Image. >+ (WebCore::CachedImage::imageSizeForRenderer): >+ * page/Settings.h: >+ (WebCore::Settings::setShouldRespectImageOrientation): >+ (WebCore::Settings::shouldRespectImageOrientation): >+ (Settings): >+ * platform/graphics/BitmapImage.cpp: >+ (WebCore::BitmapImage::cacheFrame): >+ (WebCore::BitmapImage::size): >+ (WebCore::BitmapImage::sizeRespectingOrientation): >+ (WebCore): >+ (WebCore::BitmapImage::ensureFrameIsCached): >+ (WebCore::BitmapImage::frameAtIndex): >+ (WebCore::BitmapImage::frameIsCompleteAtIndex): >+ (WebCore::BitmapImage::frameDurationAtIndex): >+ (WebCore::BitmapImage::frameHasAlphaAtIndex): >+ (WebCore::BitmapImage::frameOrientationAtIndex): >+ * platform/graphics/BitmapImage.h: >+ (WebCore::FrameData::FrameData): >+ (FrameData): >+ (BitmapImage): >+ * platform/graphics/GraphicsContext.h: >+ (GraphicsContext): >+ * platform/graphics/ImageOrientation.cpp: Added. >+ (WebCore): >+ (WebCore::ImageOrientation::transformFromDefault): >+ * platform/graphics/ImageOrientation.h: Added. >+ (WebCore): >+ (ImageOrientation): >+ (WebCore::ImageOrientation::ImageOrientation): >+ (WebCore::ImageOrientation::usesWidthAsHeight): >+ (WebCore::ImageOrientation::fromEXIFValue): >+ (WebCore::ImageOrientation::operator==): >+ (WebCore::ImageOrientation::operator!=): >+ * platform/graphics/ImageSource.cpp: >+ (WebCore::ImageSource::orientationAtIndex): >+ (WebCore): >+ * platform/graphics/ImageSource.h: >+ (WebCore): >+ * platform/graphics/cg/GraphicsContextCG.cpp: >+ (WebCore::GraphicsContext::drawNativeImage): Transform the image while drawing if its orientation requires it. >+ * platform/graphics/cg/ImageBufferCG.cpp: >+ (WebCore::ImageBuffer::draw): >+ * platform/graphics/cg/ImageCG.cpp: >+ (WebCore::FrameData::clear): >+ (WebCore::BitmapImage::BitmapImage): >+ (WebCore::BitmapImage::draw): >+ * platform/graphics/cg/ImageSourceCG.cpp: >+ (WebCore::imageSourceOptions): Don't use SkipMetaData on Lion/Snow Leopard, as it prevents us from retrieving orientation data. >+ (WebCore::ImageSource::frameSizeAtIndex): Adjust the image's size based on its orientation. >+ (WebCore): >+ (WebCore::ImageSource::orientationAtIndex): >+ (WebCore::ImageSource::size): >+ * platform/graphics/mac/DragImageMac.mm: >+ (createDragImageFromImage): Create scaled copy of image for drag image if we're respecting orientation and it is non-default. >+ * rendering/RenderObject.h: >+ (RenderObject): >+ (WebCore::RenderObject::shouldRespectImageOrientation): >+ > 2012-04-04 Simon Fraser <simon.fraser@apple.com> > > https://bugs.webkit.org/show_bug.cgi?id=82994 >diff --git a/Source/WebCore/GNUmakefile.list.am b/Source/WebCore/GNUmakefile.list.am >index 5356f85..56ce890 100644 >--- a/Source/WebCore/GNUmakefile.list.am >+++ b/Source/WebCore/GNUmakefile.list.am >@@ -3238,6 +3238,8 @@ webcore_sources += \ > Source/WebCore/platform/graphics/Image.cpp \ > Source/WebCore/platform/graphics/Image.h \ > Source/WebCore/platform/graphics/ImageObserver.h \ >+ Source/WebCore/platform/graphics/ImageOrientation.cpp \ >+ Source/WebCore/platform/graphics/ImageOrientation.h \ > Source/WebCore/platform/graphics/ImageSource.cpp \ > Source/WebCore/platform/graphics/ImageSource.h \ > Source/WebCore/platform/graphics/IntPoint.h \ >diff --git a/Source/WebCore/Target.pri b/Source/WebCore/Target.pri >index 612713a..070766f 100644 >--- a/Source/WebCore/Target.pri >+++ b/Source/WebCore/Target.pri >@@ -1093,6 +1093,7 @@ SOURCES += \ > platform/graphics/GraphicsTypes.cpp \ > platform/graphics/Image.cpp \ > platform/graphics/ImageBuffer.cpp \ >+ platform/graphics/ImageOrientation.cpp \ > platform/graphics/ImageSource.cpp \ > platform/graphics/IntRect.cpp \ > platform/graphics/Path.cpp \ >@@ -2224,6 +2225,7 @@ HEADERS += \ > platform/graphics/GraphicsTypes.h \ > platform/graphics/GraphicsTypes3D.h \ > platform/graphics/Image.h \ >+ platform/graphics/ImageOrientation.h \ > platform/graphics/ImageSource.h \ > platform/graphics/IntPoint.h \ > platform/graphics/IntPointHash.h \ >diff --git a/Source/WebCore/WebCore.exp.in b/Source/WebCore/WebCore.exp.in >index 34326a3..1ca8e5a 100644 >--- a/Source/WebCore/WebCore.exp.in >+++ b/Source/WebCore/WebCore.exp.in >@@ -446,7 +446,7 @@ __ZN7WebCore15GraphicsContext8fillPathERKNS_4PathE > __ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectE > __ZN7WebCore15GraphicsContext8fillRectERKNS_9FloatRectERKNS_5ColorENS_10ColorSpaceE > __ZN7WebCore15GraphicsContext9clearRectERKNS_9FloatRectE >-__ZN7WebCore15GraphicsContext9drawImageEPNS_5ImageENS_10ColorSpaceERKNS_8IntPointENS_17CompositeOperatorE >+__ZN7WebCore15GraphicsContext9drawImageEPNS_5ImageENS_10ColorSpaceERKNS_8IntPointENS_17CompositeOperatorEb > __ZN7WebCore15GraphicsContext9setShadowERKNS_9FloatSizeEfRKNS_5ColorENS_10ColorSpaceE > __ZN7WebCore15GraphicsContext9translateEff > __ZN7WebCore15GraphicsContextC1EP9CGContext >diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi >index 62ac68c..b6802dd 100644 >--- a/Source/WebCore/WebCore.gypi >+++ b/Source/WebCore/WebCore.gypi >@@ -370,6 +370,7 @@ > 'platform/graphics/ImageBuffer.h', > 'platform/graphics/ImageBufferData.h', > 'platform/graphics/ImageObserver.h', >+ 'platform/graphics/ImageOrientation.h', > 'platform/graphics/ImageSource.h', > 'platform/graphics/IntPoint.h', > 'platform/graphics/IntPointHash.h', >@@ -3365,6 +3366,7 @@ > 'platform/graphics/GraphicsTypes.cpp', > 'platform/graphics/Image.cpp', > 'platform/graphics/ImageBuffer.cpp', >+ 'platform/graphics/ImageOrientation.cpp', > 'platform/graphics/ImageSource.cpp', > 'platform/graphics/IntRect.cpp', > 'platform/graphics/MediaPlayer.cpp', >diff --git a/Source/WebCore/WebCore.vcproj/WebCore.vcproj b/Source/WebCore/WebCore.vcproj/WebCore.vcproj >index 9699f98..5a04d29 100755 >--- a/Source/WebCore/WebCore.vcproj/WebCore.vcproj >+++ b/Source/WebCore/WebCore.vcproj/WebCore.vcproj >@@ -28653,6 +28653,14 @@ > > > </File> > <File >+ RelativePath="..\platform\graphics\ImageOrientation.cpp" >+ > >+ </File> >+ <File >+ RelativePath="..\platform\graphics\ImageOrientation.h" >+ > >+ </File> >+ <File > RelativePath="..\platform\graphics\ImageSource.cpp" > > > <FileConfiguration >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index 6b6e067..aa048a9 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -757,6 +757,8 @@ > 2D481F02146B5C5500AA7834 /* CrossfadeGeneratedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D2FC0551460CD6F00263633 /* CrossfadeGeneratedImage.h */; }; > 2D481F03146B5C6500AA7834 /* GeneratorGeneratedImage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D2FC0561460CD6F00263633 /* GeneratorGeneratedImage.cpp */; }; > 2D481F04146B5C6B00AA7834 /* GeneratorGeneratedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D2FC0571460CD6F00263633 /* GeneratorGeneratedImage.h */; }; >+ 2D5A592F152525230036EE51 /* ImageOrientation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8748D7412CC3F89001FBA41 /* ImageOrientation.cpp */; }; >+ 2D5A5931152525D00036EE51 /* ImageOrientation.h in Headers */ = {isa = PBXBuildFile; fileRef = A8748D6612CC3763001FBA41 /* ImageOrientation.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 2D8FEBDC143E3EF70072502B /* CSSCrossfadeValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D8FEBDA143E3EF70072502B /* CSSCrossfadeValue.cpp */; }; > 2D8FEBDD143E3EF70072502B /* CSSCrossfadeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D8FEBDB143E3EF70072502B /* CSSCrossfadeValue.h */; }; > 2D9066060BE141D400956998 /* LayoutState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D9066040BE141D400956998 /* LayoutState.cpp */; }; >@@ -11025,6 +11027,8 @@ > A871DFE00A15376B00B12A68 /* RenderWidget.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderWidget.h; sourceTree = "<group>"; }; > A871DFE10A15376B00B12A68 /* RenderWidget.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderWidget.cpp; sourceTree = "<group>"; }; > A8748BDF12CBF2DC001FBA41 /* HashTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashTools.h; sourceTree = "<group>"; }; >+ A8748D6612CC3763001FBA41 /* ImageOrientation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageOrientation.h; sourceTree = "<group>"; }; >+ A8748D7412CC3F89001FBA41 /* ImageOrientation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageOrientation.cpp; sourceTree = "<group>"; }; > A883DF250F3D045D00F19BF6 /* VisibleSelection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VisibleSelection.cpp; sourceTree = "<group>"; }; > A883DF260F3D045D00F19BF6 /* VisibleSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisibleSelection.h; sourceTree = "<group>"; }; > A886CDC214FBBAA300D279F4 /* WorkerContextWebSocket.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = WorkerContextWebSocket.idl; path = Modules/websockets/WorkerContextWebSocket.idl; sourceTree = "<group>"; }; >@@ -19357,6 +19361,8 @@ > 501BAAA813950E2C00F7ACEB /* WindRule.h */, > 379919941200DDF400EA041C /* WOFFFileFormat.cpp */, > 379919951200DDF400EA041C /* WOFFFileFormat.h */, >+ A8748D6612CC3763001FBA41 /* ImageOrientation.h */, >+ A8748D7412CC3F89001FBA41 /* ImageOrientation.cpp */, > ); > path = graphics; > sourceTree = "<group>"; >@@ -21578,6 +21584,7 @@ > 49E912AD0EFAC906009D0CAF /* AnimationList.h in Headers */, > 0F580FAF149800D400FB5BD8 /* AnimationUtilities.h in Headers */, > 93309DD7099E64920056E581 /* AppendNodeCommand.h in Headers */, >+ 2D5A5931152525D00036EE51 /* ImageOrientation.h in Headers */, > 1A8F6BBD0DB55CDC001DB794 /* ApplicationCache.h in Headers */, > 1A8F6BBF0DB55CDC001DB794 /* ApplicationCacheGroup.h in Headers */, > 24F54EAD101FE914000AE741 /* ApplicationCacheHost.h in Headers */, >@@ -25079,6 +25086,7 @@ > isa = PBXSourcesBuildPhase; > buildActionMask = 2147483647; > files = ( >+ 2D5A592F152525230036EE51 /* ImageOrientation.cpp in Sources */, > 97BC69DA1505F076001B74AC /* AbstractDatabase.cpp in Sources */, > 41E1B1D00FF5986900576B3B /* AbstractWorker.cpp in Sources */, > 0F29C16E1300C2E2002D794E /* AccessibilityAllInOne.cpp in Sources */, >diff --git a/Source/WebCore/loader/cache/CachedImage.cpp b/Source/WebCore/loader/cache/CachedImage.cpp >index 10d7ad3..cf5cb77 100644 >--- a/Source/WebCore/loader/cache/CachedImage.cpp >+++ b/Source/WebCore/loader/cache/CachedImage.cpp >@@ -241,7 +241,12 @@ IntSize CachedImage::imageSizeForRenderer(const RenderObject* renderer, float mu > if (!m_image) > return IntSize(); > >- IntSize imageSize = m_image->size(); >+ IntSize imageSize; >+ >+ if (m_image->isBitmapImage() && (renderer && renderer->shouldRespectImageOrientation())) >+ imageSize = static_cast<BitmapImage*>(m_image.get())->sizeRespectingOrientation(); >+ else >+ imageSize = m_image->size(); > > #if ENABLE(SVG) > if (m_image->isSVGImage()) { >diff --git a/Source/WebCore/page/DragController.cpp b/Source/WebCore/page/DragController.cpp >index cfdc9c5..d8eb6f6 100644 >--- a/Source/WebCore/page/DragController.cpp >+++ b/Source/WebCore/page/DragController.cpp >@@ -851,7 +851,7 @@ void DragController::doImageDrag(Element* element, const IntPoint& dragOrigin, c > > Image* image = getImage(element); > if (image && image->size().height() * image->size().width() <= MaxOriginalImageArea >- && (dragImage = createDragImageFromImage(image))) { >+ && (dragImage = createDragImageFromImage(image, element->renderer() && element->renderer()->shouldRespectImageOrientation()))) { > IntSize originalSize = rect.size(); > origin = rect.location(); > >diff --git a/Source/WebCore/page/Frame.cpp b/Source/WebCore/page/Frame.cpp >index d5c176d..05c194e 100644 >--- a/Source/WebCore/page/Frame.cpp >+++ b/Source/WebCore/page/Frame.cpp >@@ -1087,7 +1087,7 @@ DragImageRef Frame::nodeImage(Node* node) > m_view->paintContents(buffer->context(), paintingRect); > > RefPtr<Image> image = buffer->copyImage(); >- return createDragImageFromImage(image.get()); >+ return createDragImageFromImage(image.get(), renderer->shouldRespectImageOrientation()); > } > > DragImageRef Frame::dragImageForSelection() >diff --git a/Source/WebCore/page/Settings.h b/Source/WebCore/page/Settings.h >index a02a236..d2949de 100644 >--- a/Source/WebCore/page/Settings.h >+++ b/Source/WebCore/page/Settings.h >@@ -549,6 +549,9 @@ namespace WebCore { > void setThreadedAnimationEnabled(bool enabled) { m_threadedAnimationEnabled = enabled; } > bool threadedAnimationEnabled() const { return m_threadedAnimationEnabled; } > >+ void setShouldRespectImageOrientation(bool enabled) { m_shouldRespectImageOrientation = enabled; } >+ bool shouldRespectImageOrientation() const { return m_shouldRespectImageOrientation; } >+ > private: > Settings(Page*); > >@@ -703,6 +706,7 @@ namespace WebCore { > bool m_touchEventEmulationEnabled : 1; > #endif > bool m_threadedAnimationEnabled : 1; >+ bool m_shouldRespectImageOrientation : 1; > > Timer<Settings> m_loadsImagesAutomaticallyTimer; > void loadsImagesAutomaticallyTimerFired(Timer<Settings>*); >diff --git a/Source/WebCore/platform/DragImage.h b/Source/WebCore/platform/DragImage.h >index a22db6a..34803a8 100644 >--- a/Source/WebCore/platform/DragImage.h >+++ b/Source/WebCore/platform/DragImage.h >@@ -81,7 +81,7 @@ namespace WebCore { > DragImageRef scaleDragImage(DragImageRef, FloatSize scale); > DragImageRef dissolveDragImageToFraction(DragImageRef image, float delta); > >- DragImageRef createDragImageFromImage(Image*); >+ DragImageRef createDragImageFromImage(Image*, bool shouldRespectImageOrientation = false); > DragImageRef createDragImageForSelection(Frame*); > DragImageRef createDragImageIconForCachedImage(CachedImage*); > DragImageRef createDragImageForLink(KURL&, const String& label, Frame*); >diff --git a/Source/WebCore/platform/blackberry/DragImageBlackBerry.cpp b/Source/WebCore/platform/blackberry/DragImageBlackBerry.cpp >index 0bd29db..f5c8743 100644 >--- a/Source/WebCore/platform/blackberry/DragImageBlackBerry.cpp >+++ b/Source/WebCore/platform/blackberry/DragImageBlackBerry.cpp >@@ -26,7 +26,7 @@ > > namespace WebCore { > >-void* createDragImageFromImage(Image*) >+void* createDragImageFromImage(Image*, bool) > { > notImplemented(); > return 0; >diff --git a/Source/WebCore/platform/chromium/DragImageChromiumMac.cpp b/Source/WebCore/platform/chromium/DragImageChromiumMac.cpp >index a0c2e20..aac1148 100644 >--- a/Source/WebCore/platform/chromium/DragImageChromiumMac.cpp >+++ b/Source/WebCore/platform/chromium/DragImageChromiumMac.cpp >@@ -98,7 +98,7 @@ DragImageRef dissolveDragImageToFraction(DragImageRef image, float delta) > return dissolvedImage; > } > >-DragImageRef createDragImageFromImage(Image* image) >+DragImageRef createDragImageFromImage(Image* image, bool) > { > if (!image) > return 0; >diff --git a/Source/WebCore/platform/chromium/DragImageChromiumSkia.cpp b/Source/WebCore/platform/chromium/DragImageChromiumSkia.cpp >index 38a07f6..edd20b1 100644 >--- a/Source/WebCore/platform/chromium/DragImageChromiumSkia.cpp >+++ b/Source/WebCore/platform/chromium/DragImageChromiumSkia.cpp >@@ -92,7 +92,7 @@ DragImageRef dissolveDragImageToFraction(DragImageRef image, float fraction) > return image; > } > >-DragImageRef createDragImageFromImage(Image* image) >+DragImageRef createDragImageFromImage(Image* image, bool) > { > if (!image) > return 0; >diff --git a/Source/WebCore/platform/efl/DragImageEfl.cpp b/Source/WebCore/platform/efl/DragImageEfl.cpp >index 4b0f417..e7afa29 100644 >--- a/Source/WebCore/platform/efl/DragImageEfl.cpp >+++ b/Source/WebCore/platform/efl/DragImageEfl.cpp >@@ -50,7 +50,7 @@ DragImageRef dissolveDragImageToFraction(DragImageRef image, float) > return image; > } > >-DragImageRef createDragImageFromImage(Image*) >+DragImageRef createDragImageFromImage(Image*, bool) > { > notImplemented(); > return 0; >diff --git a/Source/WebCore/platform/graphics/BitmapImage.cpp b/Source/WebCore/platform/graphics/BitmapImage.cpp >index 8cb3e1e..dcb1a1b 100644 >--- a/Source/WebCore/platform/graphics/BitmapImage.cpp >+++ b/Source/WebCore/platform/graphics/BitmapImage.cpp >@@ -139,6 +139,7 @@ void BitmapImage::cacheFrame(size_t index) > if (numFrames == 1 && m_frames[index].m_frame) > checkForSolidColor(); > >+ m_frames[index].m_orientation = m_source.orientationAtIndex(index); > m_frames[index].m_haveMetadata = true; > m_frames[index].m_isComplete = m_source.frameIsCompleteAtIndex(index); > if (repetitionCount(false) != cAnimationNone) >@@ -182,12 +183,24 @@ IntSize BitmapImage::size() const > { > if (m_sizeAvailable && !m_haveSize) { > m_size = m_source.size(); >+ m_sizeRespectingOrientation = m_source.size(true); > m_haveSize = true; > didDecodeProperties(); > } > return m_size; > } > >+IntSize BitmapImage::sizeRespectingOrientation() const >+{ >+ if (m_sizeAvailable && !m_haveSize) { >+ m_size = m_source.size(); >+ m_sizeRespectingOrientation = m_source.size(true); >+ m_haveSize = true; >+ didDecodeProperties(); >+ } >+ return m_sizeRespectingOrientation; >+} >+ > IntSize BitmapImage::currentFrameSize() const > { > if (!m_currentFrame || m_hasUniformFrameSize) >@@ -268,36 +281,34 @@ bool BitmapImage::isSizeAvailable() > return m_sizeAvailable; > } > >-NativeImagePtr BitmapImage::frameAtIndex(size_t index) >+bool BitmapImage::ensureFrameIsCached(size_t index) > { > if (index >= frameCount()) >- return 0; >+ return false; > > if (index >= m_frames.size() || !m_frames[index].m_frame) > cacheFrame(index); >+ return true; >+} > >+NativeImagePtr BitmapImage::frameAtIndex(size_t index) >+{ >+ if (!ensureFrameIsCached(index)) >+ return 0; > return m_frames[index].m_frame; > } > > bool BitmapImage::frameIsCompleteAtIndex(size_t index) > { >- if (index >= frameCount()) >- return true; >- >- if (index >= m_frames.size() || !m_frames[index].m_haveMetadata) >- cacheFrame(index); >- >+ if (!ensureFrameIsCached(index)) >+ return true; // Why would an invalid index return true here? > return m_frames[index].m_isComplete; > } > > float BitmapImage::frameDurationAtIndex(size_t index) > { >- if (index >= frameCount()) >+ if (!ensureFrameIsCached(index)) > return 0; >- >- if (index >= m_frames.size() || !m_frames[index].m_haveMetadata) >- cacheFrame(index); >- > return m_frames[index].m_duration; > } > >@@ -308,12 +319,8 @@ NativeImagePtr BitmapImage::nativeImageForCurrentFrame() > > bool BitmapImage::frameHasAlphaAtIndex(size_t index) > { >- if (index >= frameCount()) >- return true; >- >- if (index >= m_frames.size() || !m_frames[index].m_haveMetadata) >- cacheFrame(index); >- >+ if (!ensureFrameIsCached(index)) >+ return true; // Why does an invalid index mean alpha? > return m_frames[index].m_hasAlpha; > } > >@@ -322,6 +329,18 @@ bool BitmapImage::currentFrameHasAlpha() > return frameHasAlphaAtIndex(currentFrame()); > } > >+ImageOrientation BitmapImage::currentFrameOrientation() >+{ >+ return frameOrientationAtIndex(currentFrame()); >+} >+ >+ImageOrientation BitmapImage::frameOrientationAtIndex(size_t index) >+{ >+ if (!ensureFrameIsCached(index)) >+ return DefaultImageOrientation; >+ return m_frames[index].m_orientation; >+} >+ > #if !ASSERT_DISABLED > bool BitmapImage::notSolidColor() > { >@@ -539,4 +558,11 @@ Color BitmapImage::solidColor() const > return m_solidColor; > } > >+#if !USE(CG) >+void BitmapImage::draw(GraphicsContext* ctx, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator op, bool) >+{ >+ draw(ctx, dstRect, srcRect, styleColorSpace, op); >+} >+#endif >+ > } >diff --git a/Source/WebCore/platform/graphics/BitmapImage.h b/Source/WebCore/platform/graphics/BitmapImage.h >index 44d8baf..0bcea3d 100644 >--- a/Source/WebCore/platform/graphics/BitmapImage.h >+++ b/Source/WebCore/platform/graphics/BitmapImage.h >@@ -30,6 +30,7 @@ > > #include "Image.h" > #include "Color.h" >+#include "ImageOrientation.h" > #include "IntSize.h" > > #if PLATFORM(MAC) >@@ -69,6 +70,7 @@ struct FrameData { > public: > FrameData() > : m_frame(0) >+ , m_orientation(DefaultImageOrientation) > , m_duration(0) > , m_haveMetadata(false) > , m_isComplete(false) >@@ -86,6 +88,7 @@ public: > bool clear(bool clearMetadata); > > NativeImagePtr m_frame; >+ ImageOrientation m_orientation; > float m_duration; > bool m_haveMetadata : 1; > bool m_isComplete : 1; >@@ -117,6 +120,7 @@ public: > virtual bool hasSingleSecurityOrigin() const; > > virtual IntSize size() const; >+ IntSize sizeRespectingOrientation() const; > IntSize currentFrameSize() const; > virtual bool getHotSpot(IntPoint&) const; > >@@ -128,7 +132,7 @@ public: > // automatically pause once all observers no longer want to render the image anywhere. > virtual void stopAnimation(); > virtual void resetAnimation(); >- >+ > virtual unsigned decodedSize() const; > > #if PLATFORM(MAC) >@@ -165,6 +169,9 @@ public: > bool frameHasAlphaAtIndex(size_t); > virtual bool currentFrameHasAlpha(); > >+ ImageOrientation currentFrameOrientation(); >+ ImageOrientation frameOrientationAtIndex(size_t); >+ > #if !ASSERT_DISABLED > virtual bool notSolidColor(); > #endif >@@ -186,6 +193,7 @@ protected: > virtual void drawFrameMatchingSourceSize(GraphicsContext*, const FloatRect& dstRect, const IntSize& srcSize, ColorSpace styleColorSpace, CompositeOperator); > #endif > virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator); >+ void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator, bool shouldRespectImageOrientation); > > #if (OS(WINCE) && !PLATFORM(QT)) > virtual void drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform, >@@ -200,6 +208,8 @@ protected: > > // Decodes and caches a frame. Never accessed except internally. > void cacheFrame(size_t index); >+ // Called before accessing m_frames[index]. Returns false on index out of bounds. >+ bool ensureFrameIsCached(size_t index); > > // Called to invalidate cached data. When |destroyAll| is true, we wipe out > // the entire frame buffer cache and tell the image source to destroy >@@ -254,6 +264,7 @@ protected: > > ImageSource m_source; > mutable IntSize m_size; // The size to use for the overall image (will just be the size of the first image). >+ mutable IntSize m_sizeRespectingOrientation; > > size_t m_currentFrame; // The index of the current frame of animation. > Vector<FrameData> m_frames; // An array of the cached frames of the animation. We have to ref frames to pin them in the cache. >diff --git a/Source/WebCore/platform/graphics/GraphicsContext.cpp b/Source/WebCore/platform/graphics/GraphicsContext.cpp >index 6c3e950..b51a5fb 100644 >--- a/Source/WebCore/platform/graphics/GraphicsContext.cpp >+++ b/Source/WebCore/platform/graphics/GraphicsContext.cpp >@@ -27,6 +27,7 @@ > #include "GraphicsContext.h" > > #include "BidiResolver.h" >+#include "BitmapImage.h" > #include "Font.h" > #include "Generator.h" > #include "ImageBuffer.h" >@@ -437,27 +438,27 @@ void GraphicsContext::drawHighlightForText(const Font& font, const TextRun& run, > fillRect(font.selectionRectForText(run, point, h, from, to), backgroundColor, colorSpace); > } > >-void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntPoint& p, CompositeOperator op) >+void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntPoint& p, CompositeOperator op, bool shouldRespectImageOrientation) > { >- drawImage(image, styleColorSpace, p, IntRect(0, 0, -1, -1), op); >+ drawImage(image, styleColorSpace, p, IntRect(0, 0, -1, -1), op, shouldRespectImageOrientation); > } > >-void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntRect& r, CompositeOperator op, bool useLowQualityScale) >+void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntRect& r, CompositeOperator op, bool shouldRespectImageOrientation, bool useLowQualityScale) > { >- drawImage(image, styleColorSpace, r, IntRect(0, 0, -1, -1), op, useLowQualityScale); >+ drawImage(image, styleColorSpace, r, IntRect(0, 0, -1, -1), op, shouldRespectImageOrientation, useLowQualityScale); > } > >-void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntPoint& dest, const IntRect& srcRect, CompositeOperator op) >+void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntPoint& dest, const IntRect& srcRect, CompositeOperator op, bool shouldRespectImageOrientation) > { >- drawImage(image, styleColorSpace, IntRect(dest, srcRect.size()), srcRect, op); >+ drawImage(image, styleColorSpace, IntRect(dest, srcRect.size()), srcRect, op, shouldRespectImageOrientation); > } > >-void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntRect& dest, const IntRect& srcRect, CompositeOperator op, bool useLowQualityScale) >+void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const IntRect& dest, const IntRect& srcRect, CompositeOperator op, bool shouldRespectImageOrientation, bool useLowQualityScale) > { >- drawImage(image, styleColorSpace, FloatRect(dest), srcRect, op, useLowQualityScale); >+ drawImage(image, styleColorSpace, FloatRect(dest), srcRect, op, shouldRespectImageOrientation, useLowQualityScale); > } > >-void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const FloatRect& dest, const FloatRect& src, CompositeOperator op, bool useLowQualityScale) >+void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const FloatRect& dest, const FloatRect& src, CompositeOperator op, bool shouldRespectImageOrientation, bool useLowQualityScale) > { > if (paintingDisabled() || !image) > return; >@@ -477,14 +478,21 @@ void GraphicsContext::drawImage(Image* image, ColorSpace styleColorSpace, const > if (th == -1) > th = image->height(); > >+ InterpolationQuality previousInterpolationQuality = InterpolationDefault; >+ > if (useLowQualityScale) { >- InterpolationQuality previousInterpolationQuality = imageInterpolationQuality(); >+ previousInterpolationQuality = imageInterpolationQuality(); > // FIXME: Should be InterpolationLow > setImageInterpolationQuality(InterpolationNone); >+ } >+ >+ if (image->isBitmapImage()) >+ static_cast<BitmapImage*>(image)->draw(this, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), styleColorSpace, op, shouldRespectImageOrientation); >+ else > image->draw(this, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), styleColorSpace, op); >+ >+ if (useLowQualityScale) > setImageInterpolationQuality(previousInterpolationQuality); >- } else >- image->draw(this, FloatRect(dest.location(), FloatSize(tw, th)), FloatRect(src.location(), FloatSize(tsw, tsh)), styleColorSpace, op); > } > > void GraphicsContext::drawTiledImage(Image* image, ColorSpace styleColorSpace, const IntRect& destRect, const IntPoint& srcPoint, const IntSize& tileSize, CompositeOperator op, bool useLowQualityScale) >diff --git a/Source/WebCore/platform/graphics/GraphicsContext.h b/Source/WebCore/platform/graphics/GraphicsContext.h >index 9e46999..b87c599 100644 >--- a/Source/WebCore/platform/graphics/GraphicsContext.h >+++ b/Source/WebCore/platform/graphics/GraphicsContext.h >@@ -32,6 +32,7 @@ > #include "FloatRect.h" > #include "Gradient.h" > #include "Image.h" >+#include "ImageOrientation.h" > #include "Path.h" > #include "Pattern.h" > #include <wtf/Noncopyable.h> >@@ -260,8 +261,8 @@ namespace WebCore { > void applyStrokePattern(); > void applyFillPattern(); > void drawPath(const Path&); >- >- void drawNativeImage(NativeImagePtr, const FloatSize& selfSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator = CompositeSourceOver); >+ >+ void drawNativeImage(NativeImagePtr, const FloatSize& selfSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator = CompositeSourceOver, ImageOrientation = DefaultImageOrientation); > > // Allow font smoothing (LCD antialiasing). Not part of the graphics state. > void setAllowsFontSmoothing(bool); >@@ -306,12 +307,12 @@ namespace WebCore { > > void strokeRect(const FloatRect&, float lineWidth); > >- void drawImage(Image*, ColorSpace styleColorSpace, const IntPoint&, CompositeOperator = CompositeSourceOver); >- void drawImage(Image*, ColorSpace styleColorSpace, const IntRect&, CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); >- void drawImage(Image*, ColorSpace styleColorSpace, const IntPoint& destPoint, const IntRect& srcRect, CompositeOperator = CompositeSourceOver); >- void drawImage(Image*, ColorSpace styleColorSpace, const IntRect& destRect, const IntRect& srcRect, CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); >+ void drawImage(Image*, ColorSpace styleColorSpace, const IntPoint&, CompositeOperator = CompositeSourceOver, bool shouldRespectImageOrientation = false); >+ void drawImage(Image*, ColorSpace styleColorSpace, const IntRect&, CompositeOperator = CompositeSourceOver, bool shouldRespectImageOrientation = false, bool useLowQualityScale = false); >+ void drawImage(Image*, ColorSpace styleColorSpace, const IntPoint& destPoint, const IntRect& srcRect, CompositeOperator = CompositeSourceOver, bool shouldRespectImageOrientation = false); >+ void drawImage(Image*, ColorSpace styleColorSpace, const IntRect& destRect, const IntRect& srcRect, CompositeOperator = CompositeSourceOver, bool shouldRespectImageOrientation = false, bool useLowQualityScale = false); > void drawImage(Image*, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect = FloatRect(0, 0, -1, -1), >- CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); >+ CompositeOperator = CompositeSourceOver, bool shouldRespectImageOrientation = false, bool useLowQualityScale = false); > void drawTiledImage(Image*, ColorSpace styleColorSpace, const IntRect& destRect, const IntPoint& srcPoint, const IntSize& tileSize, > CompositeOperator = CompositeSourceOver, bool useLowQualityScale = false); > void drawTiledImage(Image*, ColorSpace styleColorSpace, const IntRect& destRect, const IntRect& srcRect, >diff --git a/Source/WebCore/platform/graphics/ImageOrientation.cpp b/Source/WebCore/platform/graphics/ImageOrientation.cpp >new file mode 100644 >index 0000000..8a5854e >--- /dev/null >+++ b/Source/WebCore/platform/graphics/ImageOrientation.cpp >@@ -0,0 +1,60 @@ >+ >+/* >+ * Copyright (C) 2010 Google Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED >+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE >+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY >+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES >+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; >+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND >+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#include "config.h" >+#include "ImageOrientation.h" >+ >+#include "AffineTransform.h" >+ >+namespace WebCore { >+ >+AffineTransform ImageOrientation::transformFromDefault(const FloatSize& drawnSize) const >+{ >+ float w = drawnSize.width(); >+ float h = drawnSize.height(); >+ switch (m_orientation) { >+ case OriginTopLeft: >+ return AffineTransform(); >+ case OriginBottomRight: >+ return AffineTransform(-1, 0, 0, -1, w, h); >+ case OriginLeftBottom: >+ return AffineTransform( 0, 1, -1, 0, w, 0); >+ case OriginRightTop: >+ return AffineTransform( 0, -1, 1, 0, 0, h); >+ case OriginTopRight: >+ return AffineTransform(-1, 0, 0, 1, w, 0); >+ case OriginBottomLeft: >+ return AffineTransform( 1, 0, 0, -1, 0, h); >+ case OriginLeftTop: >+ return AffineTransform( 0, -1, -1, 0, w, h); >+ case OriginRightBottom: >+ return AffineTransform( 0, 1, 1, 0, 0, 0); >+ } >+ ASSERT_NOT_REACHED(); >+ return AffineTransform(); >+} >+ >+} // namespace WebCore >diff --git a/Source/WebCore/platform/graphics/ImageOrientation.h b/Source/WebCore/platform/graphics/ImageOrientation.h >new file mode 100644 >index 0000000..15e9ce6 >--- /dev/null >+++ b/Source/WebCore/platform/graphics/ImageOrientation.h >@@ -0,0 +1,86 @@ >+/* >+ * Copyright (C) 2010 Google Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY >+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED >+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE >+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY >+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES >+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; >+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND >+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT >+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF >+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#ifndef ImageOrientation_h >+#define ImageOrientation_h >+ >+namespace WebCore { >+ >+class AffineTransform; >+class FloatSize; >+ >+// This enum intentionally matches the orientation values from the EXIF spec. >+// See JEITA CP-3451, page 18. http://www.exif.org/Exif2-2.PDF >+enum ImageOrientationEnum { >+ // "TopLeft" means that the 0 row starts at the Top, the 0 column starts at the Left. >+ OriginTopLeft = 1, // default >+ OriginTopRight = 2, // mirror along y-axes >+ OriginBottomRight = 3, // 180 degree rotation >+ OriginBottomLeft = 4, // mirror along the x-axes >+ OriginLeftTop = 5, // -90 degree rotation + mirror along x-axes >+ OriginRightTop = 6, // 90 degree rotation >+ OriginRightBottom = 7, // 90 degree rotation + mirror along x-axes >+ OriginLeftBottom = 8, // -90 degree rotation >+ // All other values are "reserved" as of EXIF 2.2 >+ DefaultImageOrientation = OriginTopLeft, >+}; >+ >+class ImageOrientation { >+public: >+ ImageOrientation(ImageOrientationEnum orientation = DefaultImageOrientation) >+ : m_orientation(orientation) >+ { >+ } >+ >+ bool usesWidthAsHeight() const >+ { >+ // Values 5 through 8 all flip the width/height. >+ return m_orientation >= OriginLeftTop; >+ } >+ >+ // ImageOrientationEnum currently matches EXIF values, however code outside >+ // this function should never assume that. >+ static ImageOrientation fromEXIFValue(int exifValue) >+ { >+ // Values direct from images may be invalid, in which case we use the default. >+ if (exifValue < OriginTopLeft || exifValue > OriginLeftBottom) >+ return DefaultImageOrientation; >+ return static_cast<ImageOrientationEnum>(exifValue); >+ } >+ >+ // This transform can be used for drawing an image according to the orientation. >+ AffineTransform transformFromDefault(const FloatSize& drawnSize) const; >+ >+ inline bool operator==(const ImageOrientation& other) const { return other.m_orientation == m_orientation; } >+ inline bool operator!=(const ImageOrientation& other) const { return !(*this == other); } >+ >+private: >+ // FIXME: This only needs to be one byte. >+ ImageOrientationEnum m_orientation; >+}; >+ >+} // namespace WebCore >+ >+#endif // ImageOrientation_h >diff --git a/Source/WebCore/platform/graphics/ImageSource.cpp b/Source/WebCore/platform/graphics/ImageSource.cpp >index f4495ed..4a8a214 100644 >--- a/Source/WebCore/platform/graphics/ImageSource.cpp >+++ b/Source/WebCore/platform/graphics/ImageSource.cpp >@@ -35,6 +35,9 @@ > #include "ImageDecoder.h" > #endif > >+#include "ImageOrientation.h" >+#include "NotImplemented.h" >+ > namespace WebCore { > > #if ENABLE(IMAGE_DECODER_DOWN_SAMPLING) >@@ -100,13 +103,19 @@ bool ImageSource::isSizeAvailable() > return m_decoder && m_decoder->isSizeAvailable(); > } > >-IntSize ImageSource::size() const >+IntSize ImageSource::size(bool shouldRespectOrientation) const > { >+ if (shouldRespectOrientation) >+ notImplemented(); >+ > return m_decoder ? m_decoder->size() : IntSize(); > } > >-IntSize ImageSource::frameSizeAtIndex(size_t index) const >+IntSize ImageSource::frameSizeAtIndex(size_t index, bool shouldRespectOrientation) const > { >+ if (shouldRespectOrientation) >+ notImplemented(); >+ > return m_decoder ? m_decoder->frameSizeAtIndex(index) : IntSize(); > } > >@@ -168,6 +177,13 @@ float ImageSource::frameDurationAtIndex(size_t index) > return duration; > } > >+ImageOrientation ImageSource::orientationAtIndex(size_t index) const >+{ >+ notImplemented(); >+ // The JPEG and TIFF decoders need to be taught how to read EXIF, XMP, or IPTC data. >+ return DefaultImageOrientation; >+} >+ > bool ImageSource::frameHasAlphaAtIndex(size_t index) > { > // When a frame has not finished decoding, always mark it as having alpha. >diff --git a/Source/WebCore/platform/graphics/ImageSource.h b/Source/WebCore/platform/graphics/ImageSource.h >index 1d02202..b768c2c 100644 >--- a/Source/WebCore/platform/graphics/ImageSource.h >+++ b/Source/WebCore/platform/graphics/ImageSource.h >@@ -56,6 +56,7 @@ class NativeImageSkia; > > namespace WebCore { > >+class ImageOrientation; > class IntPoint; > class IntSize; > class SharedBuffer; >@@ -172,8 +173,9 @@ public: > String filenameExtension() const; > > bool isSizeAvailable(); >- IntSize size() const; >- IntSize frameSizeAtIndex(size_t) const; >+ IntSize size(bool /* shouldRespectOrientation */ = false) const; >+ IntSize frameSizeAtIndex(size_t, bool /* shouldRespectOrientation */ = false) const; >+ > bool getHotSpot(IntPoint&) const; > > size_t bytesDecodedToDetermineProperties() const; >@@ -189,6 +191,7 @@ public: > float frameDurationAtIndex(size_t); > bool frameHasAlphaAtIndex(size_t); // Whether or not the frame actually used any alpha. > bool frameIsCompleteAtIndex(size_t); // Whether or not the frame is completely decoded. >+ ImageOrientation orientationAtIndex(size_t) const; // EXIF image orientation > > #if ENABLE(IMAGE_DECODER_DOWN_SAMPLING) > static unsigned maxPixelsPerDecodedImage() { return s_maxPixelsPerDecodedImage; } >diff --git a/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp b/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp >index 236f48b..e0615a2 100644 >--- a/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp >+++ b/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp >@@ -32,6 +32,7 @@ > #include "FloatConversion.h" > #include "GraphicsContextPlatformPrivateCG.h" > #include "ImageBuffer.h" >+#include "ImageOrientation.h" > #include "KURL.h" > #include "Path.h" > #include "Pattern.h" >@@ -170,11 +171,12 @@ void GraphicsContext::restorePlatformState() > m_data->m_userToDeviceTransformKnownToBeIdentity = false; > } > >-void GraphicsContext::drawNativeImage(NativeImagePtr imagePtr, const FloatSize& imageSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator op) >+void GraphicsContext::drawNativeImage(NativeImagePtr imagePtr, const FloatSize& imageSize, ColorSpace styleColorSpace, const FloatRect& destRect, const FloatRect& srcRect, CompositeOperator op, ImageOrientation orientation) > { > RetainPtr<CGImageRef> image(imagePtr); > >- float currHeight = CGImageGetHeight(image.get()); >+ float currHeight = orientation.usesWidthAsHeight() ? CGImageGetWidth(image.get()) : CGImageGetHeight(image.get()); >+ > if (currHeight <= srcRect.y()) > return; > >@@ -231,8 +233,18 @@ void GraphicsContext::drawNativeImage(NativeImagePtr imagePtr, const FloatSize& > setPlatformCompositeOperation(op); > > // Flip the coords. >+ CGContextTranslateCTM(context, adjustedDestRect.x(), adjustedDestRect.maxY()); > CGContextScaleCTM(context, 1, -1); >- adjustedDestRect.setY(-adjustedDestRect.maxY()); >+ adjustedDestRect.setLocation(FloatPoint()); >+ >+ if (orientation != DefaultImageOrientation) { >+ CGContextConcatCTM(context, orientation.transformFromDefault(adjustedDestRect.size())); >+ if (orientation.usesWidthAsHeight()) { >+ // The destination rect will have it's width and height already reversed for the orientation of >+ // the image, as it was needed for page layout, so we need to reverse it back here. >+ adjustedDestRect = FloatRect(adjustedDestRect.x(), adjustedDestRect.y(), adjustedDestRect.height(), adjustedDestRect.width()); >+ } >+ } > > // Adjust the color space. > image = Image::imageWithColorSpace(image.get(), styleColorSpace); >diff --git a/Source/WebCore/platform/graphics/cg/ImageCG.cpp b/Source/WebCore/platform/graphics/cg/ImageCG.cpp >index d81c780..efb3b88 100644 >--- a/Source/WebCore/platform/graphics/cg/ImageCG.cpp >+++ b/Source/WebCore/platform/graphics/cg/ImageCG.cpp >@@ -54,6 +54,8 @@ bool FrameData::clear(bool clearMetadata) > if (clearMetadata) > m_haveMetadata = false; > >+ m_orientation = DefaultImageOrientation; >+ > if (m_frame) { > CGImageRelease(m_frame); > m_frame = 0; >@@ -95,6 +97,7 @@ BitmapImage::BitmapImage(CGImageRef cgImage, ImageObserver* observer) > m_frames[0].m_frame = cgImage; > m_frames[0].m_hasAlpha = true; > m_frames[0].m_haveMetadata = true; >+ > checkForSolidColor(); > } > >@@ -182,7 +185,12 @@ RetainPtr<CFArrayRef> BitmapImage::getCGImageArray() > return RetainPtr<CFArrayRef>(AdoptCF, array); > } > >-void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& destRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator compositeOp) >+void BitmapImage::draw(GraphicsContext* ctx, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator op) >+{ >+ draw(ctx, dstRect, srcRect, styleColorSpace, op, false); >+} >+ >+void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& destRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator compositeOp, bool shouldRespectImageOrientation) > { > startAnimation(); > >@@ -196,8 +204,12 @@ void BitmapImage::draw(GraphicsContext* ctxt, const FloatRect& destRect, const F > } > > FloatSize selfSize = currentFrameSize(); >+ ImageOrientation orientation = DefaultImageOrientation; >+ >+ if (shouldRespectImageOrientation) >+ orientation = frameOrientationAtIndex(m_currentFrame); > >- ctxt->drawNativeImage(image.get(), selfSize, styleColorSpace, destRect, srcRect, compositeOp); >+ ctxt->drawNativeImage(image.get(), selfSize, styleColorSpace, destRect, srcRect, compositeOp, orientation); > > if (imageObserver()) > imageObserver()->didDraw(this); >diff --git a/Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp b/Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp >index 35b5bfe..df660d2 100644 >--- a/Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp >+++ b/Source/WebCore/platform/graphics/cg/ImageSourceCG.cpp >@@ -29,6 +29,7 @@ > #if USE(CG) > #include "ImageSourceCG.h" > >+#include "ImageOrientation.h" > #include "IntPoint.h" > #include "IntSize.h" > #include "MIMETypeRegistry.h" >@@ -114,7 +115,17 @@ static CFDictionaryRef imageSourceOptions(ImageSource::ShouldSkipMetaData skipMe > > if (!options) { > const unsigned numOptions = 3; >+ >+#if defined(BUILDING_ON_LION) || defined(BUILDING_ON_SNOW_LEOPARD) >+ // Lion and Snow Leopard only return Orientation when kCGImageSourceSkipMetaData is false, >+ // and incorrectly return cached metadata if an image is queried once with kCGImageSourceSkipMetaData true >+ // and then subsequently with kCGImageSourceSkipMetaData false. >+ // <rdar://problem/11148192> >+ UNUSED_PARAM(skipMetaData); >+ const CFBooleanRef imageSourceSkipMetaData = kCFBooleanFalse; >+#else > const CFBooleanRef imageSourceSkipMetaData = (skipMetaData == ImageSource::SkipMetaData) ? kCFBooleanTrue : kCFBooleanFalse; >+#endif > const void* keys[numOptions] = { kCGImageSourceShouldCache, kCGImageSourceShouldPreferRGB32, kCGImageSourceSkipMetaData }; > const void* values[numOptions] = { kCFBooleanTrue, kCFBooleanTrue, imageSourceSkipMetaData }; > options = CFDictionaryCreate(NULL, keys, values, numOptions, >@@ -185,26 +196,45 @@ bool ImageSource::isSizeAvailable() > return result; > } > >-IntSize ImageSource::frameSizeAtIndex(size_t index) const >+IntSize ImageSource::frameSizeAtIndex(size_t index, bool shouldRespectOrientation) const > { >- IntSize result; > RetainPtr<CFDictionaryRef> properties(AdoptCF, CGImageSourceCopyPropertiesAtIndex(m_decoder, index, imageSourceOptions(SkipMetaData))); >- if (properties) { >- int w = 0, h = 0; >- CFNumberRef num = (CFNumberRef)CFDictionaryGetValue(properties.get(), kCGImagePropertyPixelWidth); >- if (num) >- CFNumberGetValue(num, kCFNumberIntType, &w); >- num = (CFNumberRef)CFDictionaryGetValue(properties.get(), kCGImagePropertyPixelHeight); >- if (num) >- CFNumberGetValue(num, kCFNumberIntType, &h); >- result = IntSize(w, h); >- } >- return result; >+ >+ if (!properties) >+ return IntSize(); >+ >+ int w = 0, h = 0; >+ CFNumberRef num = (CFNumberRef)CFDictionaryGetValue(properties.get(), kCGImagePropertyPixelWidth); >+ if (num) >+ CFNumberGetValue(num, kCFNumberIntType, &w); >+ num = (CFNumberRef)CFDictionaryGetValue(properties.get(), kCGImagePropertyPixelHeight); >+ if (num) >+ CFNumberGetValue(num, kCFNumberIntType, &h); >+ >+ if (shouldRespectOrientation && orientationAtIndex(index).usesWidthAsHeight()) >+ return IntSize(h, w); >+ >+ return IntSize(w, h); >+} >+ >+ImageOrientation ImageSource::orientationAtIndex(size_t index) const >+{ >+ RetainPtr<CFDictionaryRef> properties(AdoptCF, CGImageSourceCopyPropertiesAtIndex(m_decoder, index, imageSourceOptions(SkipMetaData))); >+ if (!properties) >+ return DefaultImageOrientation; >+ >+ CFNumberRef orientationProperty = (CFNumberRef)CFDictionaryGetValue(properties.get(), kCGImagePropertyOrientation); >+ if (!orientationProperty) >+ return DefaultImageOrientation; >+ >+ int exifValue; >+ CFNumberGetValue(orientationProperty, kCFNumberIntType, &exifValue); >+ return ImageOrientation::fromEXIFValue(exifValue); > } > >-IntSize ImageSource::size() const >+IntSize ImageSource::size(bool shouldRespectOrientation) const > { >- return frameSizeAtIndex(0); >+ return frameSizeAtIndex(0, shouldRespectOrientation); > } > > bool ImageSource::getHotSpot(IntPoint& hotSpot) const >diff --git a/Source/WebCore/platform/gtk/DragImageGtk.cpp b/Source/WebCore/platform/gtk/DragImageGtk.cpp >index 71a65e1..9ccd118 100644 >--- a/Source/WebCore/platform/gtk/DragImageGtk.cpp >+++ b/Source/WebCore/platform/gtk/DragImageGtk.cpp >@@ -73,7 +73,7 @@ DragImageRef dissolveDragImageToFraction(DragImageRef image, float fraction) > return image; > } > >-DragImageRef createDragImageFromImage(Image* image) >+DragImageRef createDragImageFromImage(Image* image, bool) > { > return cairo_surface_reference(image->nativeImageForCurrentFrame()); > } >diff --git a/Source/WebCore/platform/mac/DragImageMac.mm b/Source/WebCore/platform/mac/DragImageMac.mm >index d57648f..b1a696d 100644 >--- a/Source/WebCore/platform/mac/DragImageMac.mm >+++ b/Source/WebCore/platform/mac/DragImageMac.mm >@@ -27,6 +27,7 @@ > #import "DragImage.h" > > #if ENABLE(DRAG_SUPPORT) >+#import "BitmapImage.h" > #import "CachedImage.h" > #import "Font.h" > #import "FontCache.h" >@@ -84,10 +85,40 @@ RetainPtr<NSImage> dissolveDragImageToFraction(RetainPtr<NSImage> image, float d > return image; > } > >-RetainPtr<NSImage> createDragImageFromImage(Image* image) >+RetainPtr<NSImage> createDragImageFromImage(Image* image, bool shouldRespectImageOrientation) > { >+ IntSize size = image->size(); >+ >+ if (image->isBitmapImage()) { >+ ImageOrientation orientation = DefaultImageOrientation; >+ BitmapImage* bitmapImage = static_cast<BitmapImage *>(image); >+ IntSize sizeRespectingOrientation = bitmapImage->sizeRespectingOrientation(); >+ >+ if (shouldRespectImageOrientation) >+ orientation = bitmapImage->currentFrameOrientation(); >+ >+ if (orientation != DefaultImageOrientation) { >+ // Construct a correctly-rotated copy of the image to use as the drag image. >+ RetainPtr<NSAffineTransform> cocoaTransform(AdoptNS, [[NSAffineTransform alloc] init]); >+ CGAffineTransform transform = orientation.transformFromDefault(sizeRespectingOrientation); >+ [cocoaTransform.get() setTransformStruct:*(NSAffineTransformStruct*)&transform]; >+ >+ FloatRect destRect(FloatPoint(), sizeRespectingOrientation); >+ >+ RetainPtr<NSImage> rotatedDragImage(AdoptNS, [[NSImage alloc] initWithSize:(NSSize)(sizeRespectingOrientation)]); >+ [rotatedDragImage.get() lockFocus]; >+ [cocoaTransform.get() concat]; >+ if (orientation.usesWidthAsHeight()) >+ destRect = FloatRect(destRect.x(), destRect.y(), destRect.height(), destRect.width()); >+ [image->getNSImage() drawInRect:destRect fromRect:NSMakeRect(0, 0, size.width(), size.height()) operation:NSCompositeSourceOver fraction:1.0]; >+ [rotatedDragImage.get() unlockFocus]; >+ >+ return rotatedDragImage; >+ } >+ } >+ > RetainPtr<NSImage> dragImage(AdoptNS, [image->getNSImage() copy]); >- [dragImage.get() setSize:(NSSize)(image->size())]; >+ [dragImage.get() setSize:(NSSize)size]; > return dragImage; > } > >diff --git a/Source/WebCore/platform/qt/DragImageQt.cpp b/Source/WebCore/platform/qt/DragImageQt.cpp >index 42ad6e9..c6128fc 100644 >--- a/Source/WebCore/platform/qt/DragImageQt.cpp >+++ b/Source/WebCore/platform/qt/DragImageQt.cpp >@@ -61,7 +61,7 @@ DragImageRef dissolveDragImageToFraction(DragImageRef image, float) > return image; > } > >-DragImageRef createDragImageFromImage(Image* image) >+DragImageRef createDragImageFromImage(Image* image, bool) > { > if (!image || !image->nativeImageForCurrentFrame()) > return 0; >diff --git a/Source/WebCore/platform/win/DragImageCGWin.cpp b/Source/WebCore/platform/win/DragImageCGWin.cpp >index 9c445c1..ad48acb 100644 >--- a/Source/WebCore/platform/win/DragImageCGWin.cpp >+++ b/Source/WebCore/platform/win/DragImageCGWin.cpp >@@ -120,7 +120,7 @@ exit: > return hbmp; > } > >-DragImageRef createDragImageFromImage(Image* img) >+DragImageRef createDragImageFromImage(Image* img, bool) > { > HBITMAP hbmp = 0; > HWndDC dc(0); >diff --git a/Source/WebCore/platform/win/DragImageCairoWin.cpp b/Source/WebCore/platform/win/DragImageCairoWin.cpp >index 69208b5..c9f22b4 100644 >--- a/Source/WebCore/platform/win/DragImageCairoWin.cpp >+++ b/Source/WebCore/platform/win/DragImageCairoWin.cpp >@@ -150,7 +150,7 @@ exit: > return hbmp; > } > >-DragImageRef createDragImageFromImage(Image* img) >+DragImageRef createDragImageFromImage(Image* img, bool) > { > HBITMAP hbmp = 0; > HDC dc = GetDC(0); >diff --git a/Source/WebCore/platform/wince/DragImageWinCE.cpp b/Source/WebCore/platform/wince/DragImageWinCE.cpp >index f639b41..a43de1c 100644 >--- a/Source/WebCore/platform/wince/DragImageWinCE.cpp >+++ b/Source/WebCore/platform/wince/DragImageWinCE.cpp >@@ -50,7 +50,7 @@ DragImageRef dissolveDragImageToFraction(DragImageRef image, float) > return image; > } > >-DragImageRef createDragImageFromImage(Image*) >+DragImageRef createDragImageFromImage(Image*, bool) > { > return 0; > } >diff --git a/Source/WebCore/platform/wx/DragImageWx.cpp b/Source/WebCore/platform/wx/DragImageWx.cpp >index df2dcee..5a67872 100644 >--- a/Source/WebCore/platform/wx/DragImageWx.cpp >+++ b/Source/WebCore/platform/wx/DragImageWx.cpp >@@ -50,7 +50,7 @@ DragImageRef dissolveDragImageToFraction(DragImageRef image, float) > return image; > } > >-DragImageRef createDragImageFromImage(Image*) >+DragImageRef createDragImageFromImage(Image*, bool) > { > return 0; > } >diff --git a/Source/WebCore/rendering/RenderImage.cpp b/Source/WebCore/rendering/RenderImage.cpp >index be2e1a6..f031ab4 100644 >--- a/Source/WebCore/rendering/RenderImage.cpp >+++ b/Source/WebCore/rendering/RenderImage.cpp >@@ -307,7 +307,7 @@ void RenderImage::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOf > if (centerY < 0) > centerY = 0; > imageOffset = LayoutSize(leftBorder + leftPad + centerX + 1, topBorder + topPad + centerY + 1); >- context->drawImage(image.get(), style()->colorSpace(), IntRect(roundedIntPoint(paintOffset + imageOffset), imageSize)); >+ context->drawImage(image.get(), style()->colorSpace(), IntRect(roundedIntPoint(paintOffset + imageOffset), imageSize), CompositeSourceOver, shouldRespectImageOrientation()); > errorPictureDrawn = true; > } > >@@ -429,7 +429,7 @@ void RenderImage::paintIntoRect(GraphicsContext* context, const LayoutRect& rect > CompositeOperator compositeOperator = imageElt ? imageElt->compositeOperator() : CompositeSourceOver; > Image* image = m_imageResource->image().get(); > bool useLowQualityScaling = shouldPaintAtLowQuality(context, image, image, alignedRect.size()); >- context->drawImage(m_imageResource->image(alignedRect.width(), alignedRect.height()).get(), style()->colorSpace(), alignedRect, compositeOperator, useLowQualityScaling); >+ context->drawImage(m_imageResource->image(alignedRect.width(), alignedRect.height()).get(), style()->colorSpace(), alignedRect, compositeOperator, shouldRespectImageOrientation(), useLowQualityScaling); > } > > bool RenderImage::backgroundIsObscured() const >diff --git a/Source/WebCore/rendering/RenderObject.h b/Source/WebCore/rendering/RenderObject.h >index ac70d13..77bb34a 100644 >--- a/Source/WebCore/rendering/RenderObject.h >+++ b/Source/WebCore/rendering/RenderObject.h >@@ -35,6 +35,7 @@ > #include "PaintPhase.h" > #include "RenderObjectChildList.h" > #include "RenderStyle.h" >+#include "Settings.h" > #include "TextAffinity.h" > #include "TransformationMatrix.h" > #include <wtf/UnusedParam.h> >@@ -856,6 +857,9 @@ public: > // Return the renderer whose background style is used to paint the root background. Should only be called on the renderer for which isRoot() is true. > RenderObject* rendererForRootBackground(); > >+ // Respect the image's orientation if it's being used as a full-page image or the setting to respect it everywhere is set. >+ bool shouldRespectImageOrientation() const { return document()->isImageDocument() || (document()->settings() && document()->settings()->shouldRespectImageOrientation()); } >+ > protected: > inline bool layerCreationAllowedForSubtree() const; > >diff --git a/Source/WebKit/mac/ChangeLog b/Source/WebKit/mac/ChangeLog >index 3bb9d32..bcb324a 100644 >--- a/Source/WebKit/mac/ChangeLog >+++ b/Source/WebKit/mac/ChangeLog >@@ -1,3 +1,24 @@ >+2012-04-04 Tim Horton <timothy_horton@apple.com> >+ >+ Add autodetection of image orientation from EXIF information >+ https://bugs.webkit.org/show_bug.cgi?id=19688 >+ <rdar://problem/4126979> and <rdar://problem/11091578> >+ >+ Original patch by David Carson and Eric Seidel. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add a preference, ShouldRespectImageOrientation, which will cause WebCore to respect EXIF orientation in all images. >+ >+ * WebView/WebPreferenceKeysPrivate.h: >+ * WebView/WebPreferences.mm: >+ (+[WebPreferences initialize]): >+ (-[WebPreferences setShouldRespectImageOrientation:]): >+ (-[WebPreferences shouldRespectImageOrientation]): >+ * WebView/WebPreferencesPrivate.h: >+ * WebView/WebView.mm: >+ (-[WebView _preferencesChanged:]): >+ > 2012-03-15 Jer Noble <jer.noble@apple.com> > > Full Screen mode should cancel before navigation. >diff --git a/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h b/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h >index e7e8b07..c585f84 100644 >--- a/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h >+++ b/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h >@@ -120,6 +120,7 @@ > #define WebKitNotificationsEnabledKey @"WebKitNotificationsEnabled" > #define WebKitSuppressesIncrementalRenderingKey @"WebKitSuppressesIncrementalRendering" > #define WebKitRegionBasedColumnsEnabledKey @"WebKitRegionBasedColumnsEnabled" >+#define WebKitShouldRespectImageOrientationKey @"WebKitShouldRespectImageOrientation" > > // These are private both because callers should be using the cover methods and because the > // cover methods themselves are private. >diff --git a/Source/WebKit/mac/WebView/WebPreferences.mm b/Source/WebKit/mac/WebView/WebPreferences.mm >index 87eb150..a06a325 100644 >--- a/Source/WebKit/mac/WebView/WebPreferences.mm >+++ b/Source/WebKit/mac/WebView/WebPreferences.mm >@@ -396,6 +396,7 @@ static WebCacheModel cacheModelForMainBundle(void) > [NSNumber numberWithBool:NO], WebKitShouldDisplayCaptionsPreferenceKey, > [NSNumber numberWithBool:NO], WebKitShouldDisplayTextDescriptionsPreferenceKey, > [NSNumber numberWithBool:YES], WebKitNotificationsEnabledKey, >+ [NSNumber numberWithBool:NO], WebKitShouldRespectImageOrientationKey, > > [NSNumber numberWithLongLong:ApplicationCacheStorage::noQuota()], WebKitApplicationCacheTotalQuota, > [NSNumber numberWithLongLong:ApplicationCacheStorage::noQuota()], WebKitApplicationCacheDefaultOriginQuota, >@@ -1675,6 +1676,16 @@ static NSString *classIBCreatorID = nil; > return [self _boolValueForKey:WebKitRegionBasedColumnsEnabledKey]; > } > >+- (void)setShouldRespectImageOrientation:(BOOL)flag >+{ >+ [self _setBoolValue:flag forKey:WebKitShouldRespectImageOrientationKey]; >+} >+ >+- (BOOL)shouldRespectImageOrientation >+{ >+ return [self _boolValueForKey:WebKitShouldRespectImageOrientationKey]; >+} >+ > @end > > @implementation WebPreferences (WebInternal) >diff --git a/Source/WebKit/mac/WebView/WebPreferencesPrivate.h b/Source/WebKit/mac/WebView/WebPreferencesPrivate.h >index d751647..5579894 100644 >--- a/Source/WebKit/mac/WebView/WebPreferencesPrivate.h >+++ b/Source/WebKit/mac/WebView/WebPreferencesPrivate.h >@@ -296,4 +296,7 @@ extern NSString *WebPreferencesChangedInternalNotification; > - (void)setNotificationsEnabled:(BOOL)flag; > - (BOOL)notificationsEnabled; > >+- (void)setShouldRespectImageOrientation:(BOOL)flag; >+- (BOOL)shouldRespectImageOrientation; >+ > @end >diff --git a/Source/WebKit/mac/WebView/WebView.mm b/Source/WebKit/mac/WebView/WebView.mm >index 9de30f0..d3cee96 100644 >--- a/Source/WebKit/mac/WebView/WebView.mm >+++ b/Source/WebKit/mac/WebView/WebView.mm >@@ -1515,6 +1515,7 @@ static bool needsSelfRetainWhileLoadingQuirk() > settings->setShouldDisplayTextDescriptions([preferences shouldDisplayTextDescriptions]); > #endif > >+ settings->setShouldRespectImageOrientation([preferences shouldRespectImageOrientation]); > settings->setNeedsIsLoadingInAPISenseQuirk([self _needsIsLoadingInAPISenseQuirk]); > > // Application Cache Preferences are stored on the global cache storage manager, not in Settings. >diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog >index e60e26a..c75b822 100644 >--- a/Source/WebKit2/ChangeLog >+++ b/Source/WebKit2/ChangeLog >@@ -1,3 +1,24 @@ >+2012-04-04 Tim Horton <timothy_horton@apple.com> >+ >+ Add autodetection of image orientation from EXIF information >+ https://bugs.webkit.org/show_bug.cgi?id=19688 >+ <rdar://problem/4126979> and <rdar://problem/11091578> >+ >+ Original patch by David Carson and Eric Seidel. >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add a preference, ShouldRespectImageOrientation, which will cause WebCore to respect EXIF orientation in all images. >+ >+ * Shared/WebPreferencesStore.h: >+ (WebKit): >+ * UIProcess/API/C/WKPreferences.cpp: >+ (WKPreferencesSetShouldRespectImageOrientation): >+ (WKPreferencesGetShouldRespectImageOrientation): >+ * UIProcess/API/C/WKPreferences.h: >+ * WebProcess/WebPage/WebPage.cpp: >+ (WebKit::WebPage::updatePreferences): >+ > 2012-04-04 Shinya Kawanaka <shinyak@chromium.org> > > Shadow DOM is exposed in JS. >diff --git a/Source/WebKit2/Shared/WebPreferencesStore.h b/Source/WebKit2/Shared/WebPreferencesStore.h >index 8cc2b23..64f7b65 100644 >--- a/Source/WebKit2/Shared/WebPreferencesStore.h >+++ b/Source/WebKit2/Shared/WebPreferencesStore.h >@@ -109,6 +109,7 @@ namespace WebKit { > macro(ShouldDisplayCaptions, shouldDisplayCaptions, Bool, bool, false) \ > macro(ShouldDisplayTextDescriptions, shouldDisplayTextDescriptions, Bool, bool, false) \ > macro(NotificationsEnabled, notificationsEnabled, Bool, bool, true) \ >+ macro(ShouldRespectImageOrientation, shouldRespectImageOrientation, Bool, bool, false) \ > \ > > #define FOR_EACH_WEBKIT_DOUBLE_PREFERENCE(macro) \ >diff --git a/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp b/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp >index 2c04045..5232337 100644 >--- a/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp >+++ b/Source/WebKit2/UIProcess/API/C/WKPreferences.cpp >@@ -778,6 +778,16 @@ bool WKPreferencesGetNotificationsEnabled(WKPreferencesRef preferencesRef) > return toImpl(preferencesRef)->notificationsEnabled(); > } > >+void WKPreferencesSetShouldRespectImageOrientation(WKPreferencesRef preferencesRef, bool enabled) >+{ >+ toImpl(preferencesRef)->setShouldRespectImageOrientation(enabled); >+} >+ >+bool WKPreferencesGetShouldRespectImageOrientation(WKPreferencesRef preferencesRef) >+{ >+ return toImpl(preferencesRef)->shouldRespectImageOrientation(); >+} >+ > void WKPreferencesResetTestRunnerOverrides(WKPreferencesRef preferencesRef) > { > // Currently we reset the overrides on the web process when preferencesDidChange() is called. Since WTR preferences >diff --git a/Source/WebKit2/UIProcess/API/C/WKPreferences.h b/Source/WebKit2/UIProcess/API/C/WKPreferences.h >index 8054e00..5e88573 100644 >--- a/Source/WebKit2/UIProcess/API/C/WKPreferences.h >+++ b/Source/WebKit2/UIProcess/API/C/WKPreferences.h >@@ -197,6 +197,10 @@ WK_EXPORT bool WKPreferencesGetShouldDisplayTextDescriptions(WKPreferencesRef pr > WK_EXPORT void WKPreferencesSetNotificationsEnabled(WKPreferencesRef preferencesRef, bool enabled); > WK_EXPORT bool WKPreferencesGetNotificationsEnabled(WKPreferencesRef preferencesRef); > >+// Defaults to false >+WK_EXPORT void WKPreferencesSetShouldRespectImageOrientation(WKPreferencesRef preferencesRef, bool enabled); >+WK_EXPORT bool WKPreferencesGetShouldRespectImageOrientation(WKPreferencesRef preferencesRef); >+ > #ifdef __cplusplus > } > #endif >diff --git a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp >index fccb31e..0a95dea 100644 >--- a/Source/WebKit2/WebProcess/WebPage/WebPage.cpp >+++ b/Source/WebKit2/WebProcess/WebPage/WebPage.cpp >@@ -1976,6 +1976,8 @@ void WebPage::updatePreferences(const WebPreferencesStore& store) > settings->setNotificationsEnabled(store.getBoolValueForKey(WebPreferencesKey::notificationsEnabledKey())); > #endif > >+ settings->setShouldRespectImageOrientation(store.getBoolValueForKey(WebPreferencesKey::shouldRespectImageOrientationKey())); >+ > platformPreferencesDidChange(store); > > if (m_drawingArea)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
simon.fraser
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 19688
:
29372
|
29517
|
29674
|
77660
|
77661
|
77689
|
77703
|
77704
|
77705
|
135273
|
135384
|
135388
|
135427
|
135494
|
135507
|
135778
|
135779
|
135784
|
135920
|
135921
|
135999
|
136000
|
136005
|
136014