From 2a35f5c7945d00b6f6e21fc7cf5b05b184eba88f Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Tue, 18 Feb 2014 19:54:32 +0100 Subject: [PATCH] DOCX OLE import: inherit anchor type from replacement graphic Change-Id: Ic8b6f423acae5cc7e3799cf20e672b56a9cc8c0c --- sw/CppunitTest_sw_ooxmlimport.mk | 1 + sw/qa/extras/ooxmlimport/data/ole-anchor.docx | Bin 0 -> 12393 bytes sw/qa/extras/ooxmlimport/ooxmlimport.cxx | 6 ++++++ .../source/dmapper/DomainMapper_Impl.cxx | 10 +++++++--- 4 files changed, 14 insertions(+), 3 deletions(-) create mode 100755 sw/qa/extras/ooxmlimport/data/ole-anchor.docx diff --git a/sw/CppunitTest_sw_ooxmlimport.mk b/sw/CppunitTest_sw_ooxmlimport.mk index d72f93e930e5..1171001294a3 100644 --- a/sw/CppunitTest_sw_ooxmlimport.mk +++ b/sw/CppunitTest_sw_ooxmlimport.mk @@ -51,6 +51,7 @@ $(eval $(call gb_CppunitTest_use_components,sw_ooxmlimport,\ basic/util/sb \ chart2/source/controller/chartcontroller \ chart2/source/chartcore \ + canvas/source/factory/canvasfactory \ comphelper/util/comphelp \ configmgr/source/configmgr \ drawinglayer/drawinglayer \ diff --git a/sw/qa/extras/ooxmlimport/data/ole-anchor.docx b/sw/qa/extras/ooxmlimport/data/ole-anchor.docx new file mode 100755 index 0000000000000000000000000000000000000000..11df2393bb9ebb45d4fb44a0c10cf8b08bf53845 GIT binary patch literal 12393 zcmeHt1zTL%vUWq`p5P9_-JReBX)L$}cXxM!y9Q~T5G1$-cZZ-MSnvSB-Q{+2&zzab zneY1p_w0V!SG`Z|wX1ejy;VveAPg1&4uAjv0LTGwoa6pMPyj$3EC7HBK!DZ}x3_aK zwR6!|^>i?Ge#7ixYeSX~15KL?fQGF9@9}?l2kKOZ6na=O+9*!Y6DnyPN1(`O>flo; z$|Y_91KD+O_BG!Qj?xRM#NNwL%CaOR4(V)-%@qu(mzkgnNn1OykHS$x^_0h(B_v(l zfV>nFG18yOX#x4>Mahy*F1}c_J7YYT$c#@ijXn&V>U@{0HTV%2oHFG#_M-h3)-~F{ z26kexYcQna zrAfrL%V#85^Sy_K*3jm!y>O9@QSYCETSug8{g-Zq-=6rsQQg7Rk=he*zlS*I(-RP& z^f%WfNg!xEgV>`2#50j0uB-24YU9kp{PXp{F8hDjPycf2(TR()Kv9&?BiI$gL0_Il zq!&~3%hGx7FZO_M)Aym=(MAgw+S>}qnw1vyw$8Ul6lXJoGiL-o2*OnwYJJI_%QTQ$ zvG%ZSjDlCv8q~=MGDnsATxDrzKg%MRkenwN%~qDbUK=V(DfGgOqpCnRWUyVeIi5%c zQ6(;6l<*?Dths&QTmzVqUbLWvYH5BXQa_-{tv`$QhKIlp$?RxuBm#R7-q3!Y*@)go zrr#;Xitd7uz=n04Dl5V0BNF$jW&W27i6{N2*bqjdAfZ!kFZ(V*d@q)6A0Fr-Q)x*%XT6#q*yxLDhuf@DX%9G4hdM3eE@niGkqTC zR-AA|dFNB+r5F@-!e{&JPN2WlLex2Djzn&7X4W#6+y!;7$zubxN-d)zUEn;oFM(!$ z2;7|2T3ASQt90XUuk%&5vkm)*041BYODN9^uJ@Ri)TYTA;Os?49hh1(O~%6}%F2mg z_Lj|LBb|xuqY?YHe%AHtRE(Np1YValaruH{<5pEa;#wbD)YR5pG-@^(5XM(FavS)# zFANCaML;ujlfLM9kxi=V@cji(r4ck8F^)^7Ki^Ozbz^L+XH!Yok8S z4rp)MztuzArd8_>LDNj*QBZ@_9GjSrzq0r%I7NRfsL2J6SBN9bqa_ov)YU zhe4Q1L}ex1=8Slu!~OBSTPbH!=f@Pw65!Owg4B#f1x48}R=d}c$cKmdoUynb0k2^X zqbY&Ch2P)5R{!$33`6Z}t4Yszv7tisVwo;FGkjEnA+(Ru6u0i;v+{=yi%y$Y@naxS z8*R2>+Y7o`dhtdF;_@9-+mw>J*HpDQ3YFelBy16i(z#)C*5LK->aoeBRHvq}gt#Mr zdvBzMutM14FcC6b4RZuhzH(L9ZGB+gWU7da`V$s!?8?~qnPA_>Bv+Xw%@WiH4dh5O zpCdz$A0%k27UDMIT+Z$p)#FG8osdua0}ApOtlG;J%h1 zROgu1h^_Ppdxqttvg*dCZw5^wQ`5RbI*(>mw{9B^a6EzD_ukbV zI$q~6t!t7(#-AxG_cCp=7UK>#BkilS!;p`ubm2{GM4X7plw7z}JQm{=APv!$FZd;qhk+lNc<(}DFn27B0L1x+*2Ok9}%M8hG>lAmwEt8}x zOBA2t*a{j1YW0c6X`|-%kL$!a7q0s*Hhxz*@R}>-jxc9M_B!hzzC4=X(bhWrz@NuZ zCb2z7ILBwrOcV4acGRH9bRouE!7@=^g?H}ujzWe+ktM)NtR48{{Sl3>x{cHnqn641 zi?|h=Ps9zlh?UTznq2b)r8GiD>IpQ>;6|4*`dwP~-T@OKRp%U)fh>1ov-sBpK0%1d z<1D+`dUV^W-Y%QsbjLQSW1+x}Zy^_1AEIv4H%W-;Pk(IODVC8s(CmPuzu&p_8PF`@ z)jvACS+!?H{=ma3B+yfIjCedR?$Lk3b&Y=}^=SdRLuE>|-e6_}Zp|cnY?@J#S;URh z$!%xN)J3r98> z5{1NhLB@CFVL-kj-@-d^oNA9n-|EPQAga36`z5HRLtV1C@>E$(18sTGY}70Cz{|Ce zH+V546CE-7S{mk0P=C+JE)tVp9z)_sJTd@)4e{w;Hvn5x6H7xDOIt&8Q#NK(TeJOC zHjvJ1tby^UXQd6djFLn_l**#gVPd#C2)-ckFlo>M8MCGG3yHdCKh~*TU503O7OLNT zyGL_%cKJc(2Q$6$l&+#rAv0)z1+#n0d($USTu}*z;!BH9J+`uYgW{p~@l68PPDQaa;e_9+dN>vN)AcaZx)aOh zF7*xWlegQDXIyU!$1omWZbxtXF*gq>()g6i^Pva4?{)Ui$HK(uhK*Iq-nC2O&C{UG z32-6_oMqOx9t`Z)5Abw2YdgP&ho<5$9`9Ex`|e4fdEmBGW#U?9EUF8GLsVQi+*{2s*r)uC4XSHwc;&B=)a{!^woaKw1BF<5X>M9nF z=tg7Jrsv>f5y$G8vm09KViQ42&ShcmW$dDo_z~A)Be8<$M#ti=)>R9U#GNa*{=$>Q zoIUY^x7=-VZssMd(Qq5X0hcg$^VQe8i8F!l%MJ|H1=4))?Y1jT;e)dKv7P0sWD|=n z(YmMDt*J*^-@9e+k2#l~>TZYy-ol&_Eef3Bm%@9fO; zrE^f;=DOR^H+yEvO&9S5Gs4{X|6@Yp97Kfk=4Xn51OSlyVIrosMy4hvmUiaOEcQ00 zibhtZ#x88kMwWKX4tmF3-7(7O_!9xdK#rb{CoqbQ^m?=iH$reA00_j4hgyHSdwLSq zM3Dxh7Z@Ofbn55oh@Qarh!6fKPKkG(-%B4rUN1iDxz{ersx)Z@~tq?vV|j z0xP#I@*W!41I0SD3YVuOV}^m7kD}>!&9TW^m`_g@H~`CufQ3S~A;MX$Et!jij}H!f z95iPy2sJ_7}s5%=8h^{nDg~#0AiMrW?wS&*$Q@x}bKA=oVhfkInu{I|P zONI)K*&e}a>&7YkEcQV zh}1cye32;`U&4ir0H~g3!!YbQ+b~0&K%BYvcbxP5HpCN^RZ_}{eVTfS+;frTLX^*M zHtwECNK4AT9uA-oKPRVCT+n-P8WX2H@f1m_I`~F%$x`kqO%H}iJ9%5zMwhT$A9J_#P{v0Eb@=rFDkcKU5Bo78pQM6$^X zCa>ZRE)&F+C{8FPopU>_zl5udNc8G7H_Da4G!N;5gLjRISD813CN`SA3{dQh3*Br# z#pqG)l2|ND&uOf4bVaN*k4n?7YN)HQ_nU9F5p}4t@rZO#Wi7uVEN9Sx^#vMOk$l~| zXm0Zo9S2k$1sAEOvX8y;FJB(AOcl9w%yw&>{m7;36Y)3<9xYe+Fl}R6qnQt9LQ3d- zUB6&u>^$E^7~jXUeH`=Itg&Tx6?Jf3WBd4lq5Ml|6i;sW1XE-^-pWQkIsnx~a}uV+Qnr6CjP`KdgOYX@<(R+gJ-)!^ zNE7)OvW)(OYJD5J3JN}3!PV}~Rb{rY$RQ@cwud^&!x8Dx8K!RIv)1N z2S^Kqv;EFaCvm@cX!Sqc_Rw_P-+OXlOqo-Ej$+BVzuX^+suX&7XpzD`mJgINy^imf z$j{tFI5@+@;!t;_qM>kX$L>LxK8+lsOy=#%0KqtlOSTd!c)LPlM%z3a=s6UM>;rE-ko!OcN+u}Qr}^gB$i{4XD_6n$uNs*utf1o zSO0-D_>?1YO3oOSuRq*8XnJBgb&Zw0hmT6AH~4=S5%QJZ{cZSG#~@s&R$dK*!DG)LJD@qS6m%H9UxFnPGx>CovHw+V&ZYCgW%% zOW`rP+Z>Dx%WWOMx=T@-FZx!+qG~Uj`uT9Q3+?M+Dx&>S2P)f`FzPq+#)c}Scs4KN zH4jcZ(JFV=?sb*o*;?c+&~o?+u;o`jj;dFfNQfSMHB|p9mX)saE!<2ttEXHE--ox7 z00n3EEgX#KBDA_*$XSyaDm><>bnb!O)$$TkKQiu*7x-%dCPGtQ<9Ee&;N*eGCd7cb zlH&xS%`Bt(=Z&eU>>Hf=mMDvRxI*ghz}*VO(jlrknycW_ax~IC?2>9HMN2buD=!n1ezO201JJ*If~Lr-w2ec?b}SaNlz3$@a4r0d@IW=Z8znaF~z>Y004Ym$V@2TLp6U@k?e< zqUl>XiIm=y5^Qe?G(^H(f={JaZs?L2yG0o$rk$$_{W*8prW3R?@(O$_U;^d+Hg5RG zAD;)PIcUGn8ct7aUb0AhoKrjSsuf)E9*NwE(8~NWSPPw&(h#JcdRa-=&DW@{Q@zEh zXSdZIh`Y@d+Lcc(yVef>L%8bc^%}>WshEAScsqJMc2^jjJW4lQ{%xYIU_5iYn*&Tt z5^-Hup^VnFS$R@}cDt6o!v~$?mxeY>^IG@53dXo&=_8+q`l2}9%nS!+-E8tox@u`u zutNK9MEiOBeWvLBUDpe|S9h2`t>my$$+LFxPzB~)5TywQY&H^&O~rKlV<4L{j((_v zRF$3(g8$hc8HTf|i_6da;%5*8t1mh&a%1=&$vuhoY!BySX*u$xa#R!b$)xnEEF7FA zYDN@0t^smQzVEdF!YACOXH+`y1Y5k_s(E(q$AYm6UJ{JdYnx3c2@>X&a&1^Ojvm^5 z-Ke!OA*O{BW6(8|s+-S@%JJtH#=^;>;1YO&WQyE2%3pw_!$aE@OH~=u;I-FZpBl1k z=Na?R@v)J0aC-0X>5*^k|pPce-T3)lke&ynt4!OYK`gV20HUjh&+rccpUJDn`Y@3=5aJD?0LOrLb8Fu@wUzykkeaSW`6A7l60OZ7Q ze7bWi>#ipFFqCe+Uf))W+D+oyq6O99xrZx<;kG^tK);9qRCVz0aqF&eoxa%+qTQul zGffg_gAoHoYmp`h-&fRwGz#=|<#D6bT2tP&OVng^2nl3*5}r;uk96Bd5js1PDEbk+ zVsE%dGBM?i7P|2jQ?Dr=eW22i(IY?L@?oTFp+_9ppskuYGm>|eh1RBey*_Y;)EKDQ z+aSxIcVTMS9>u=oci+DyMKb11aKv3hf>K9{MZudOzkQY+$1vO^_vxUNU5ieeAx@%> zp?yDw28@Epj}@y2ZG~bKXejqO=18_uHU+cjyb=~wX0czU!fo1=+9&1%{+Gc?T%a?l zQ0cdi@5X|n+gllZL=NmNLGXr={+?r2@HL2qb1`;6ml*!y44F90#UyvLEh{+wmnGSB;w8 zSQfvol-JR5Ka8j_KOH{6bm{GcD!*4MrRmQb%IOnR3?iL&H@pF{*7dkMUgOV#3F-xh ztu)CxdXW+B-b64R5PU#=|3VO6^p$b4ABXNe>ObYGvU8D%EfCj+ffN#0f4I22sgcTG zygd4ImsJldO8<$s;Sq+5e%1x6th6$10n5Y%l&+K|O0@~4?egV0m(9CxURXKTCr9Y| zmbOB#IoVNqAND+|uCd8dTP(oeLU8^4Ip1U|>|iK`Yi4 zpSs_SL7g>IHHB!+nGH&FRjnhY_ec;?W!q@w0sI) z&VsKRn0nYtnjSSp(0f#$DC6rGJh&tYkIJBp2Y7PR2w}p|)`vCwd}t2{G@_5@2pqCa zDL!^`bP4vLvX*t38sUEBxj?zWJX?{2qOzY&*KLu7t?1sH0$nm3Hs__yBz_# zv9q<>h1~tU;}FB570$Su80HOHY<+ci$cAvKQu64Hq{pWe7)SR)Z*0EFE0C24&Sj0K zbB2_ZKDV~9e~q#?MshTJVt@T;&5Me-?D_QWDz-&8I1Cx-GK<=S);zL2PiWyix!IdDNyUk@kY3PfEpbuuCB#^ux+$Y)$f~aW^#gjwKt67un+y1hib|M_-^B2}aD16j&todobyy_6609_IhqS z!FIwpg%`j(IQHi!6yXn4`FSiGZDB*y;W`a_D+XAUA}d>*IG3uKlW={=*@zi zyS`u&(mO%XVz3iuB=h0Xwi+Cz+BG5t3V_FhI$a6`;N^WphNoBWcY?F1 zyr&FgGaZys6bVjiw65LpOTXkhpsr7Ohxr8HS9T zN3&t%$xQY9Wpd5kh%Nf2yoe!uvBEM8mYYk)U}ivw4sW_rmy@bg=WbXlqR2x$4^%Pf zDK+3id>JO!Z!i-ulhwK?dP`vsjgv`8^dWU96VO`(53fpX4~=2B=Fp>l+F$y#@mEy( zx4U}Eh?@HVwJIV{%qjX7HaSdMo z+Kr#5@olJuxKJ3frn;%i(drkTmxG8YiF)W9}VKsdKAW3;$s6sLQr}`&vP@b)%IxO+^X-2$wdd1tO)30 zG@A8KQWY$9*LGY6TDuT;O;L7@awmf{XJ(gb$& zv%@OJXJ3}T^c3ZHYGzpQs9AMAjNlR{N!Me zOVAwJ1dX!db^gApjCEPwZ{C-%QMddN)ysT~`2j8Kq~hT-<8#A0{>6+OdQH6#@HdV`mWcJ#yB3dH0d;S z?~Lc(T9;%M1prkL#jA41R`I6AMst@$c<^WfV+?Sz@&h8|KHHO%o%MEC+-!DAoc6Wh9*F`!k5URXt%%<<{F+%T?_W$@uIfKAnX;q=)L%vCx`r`-~Oq zI%iH<$=JSG>D+>-*wqQHpCt=?G(Ya<8HIlw6V_?gn_RH#BsOLgpI*pSwnj8lMw%*c zuoMrX6D)t_8N6xI9lH*_o5WJT&{$^s3RfoK>R4Vp3R-KR^_uD7Uicpq=X?EhPi{!k ztPM#)p8t`4m_f$-R1J-6er3+RDdSF=tdLHB)(-*JW*&rn-d;@biLgQzNya%84x^2H zLa%f$r~OLGTTFKw-D#4bFnn(k63bw*-akjNRaus&sj5e$*}!_CN5B@H%2-EEuo_CPKNwdM_5jKp3rF zFD2^B_D-#rv0B7^&@;sK*gE=;nS?yp_~a4oa{A9UW3Q!?6JaPWcVDn^e`gT{Hd>wI zIP!&*Z7An6*7D(X@qeSYTEV|{<|jW**_IPH?ZTXHbr}^R7+P{88ULn^@!ak^4$xhu zfmhTiU?%SEGP*>~RHS_nO+58rZmAQk-=&fkZy*t?3PBdO>^d6Y=7}6@+R51GF-1&E z0&VzNibwTu&3C$#$;}$2SNOz?$rSVq4e*FMsxB<=A_((fqy}TBZ=l2iTljADncZ}c zNnE{!aN0@VT|qUAF?obP35w9BBTEP(j}*iWdV=sPlH;;+sKSZHD#G4!so7V|nuI0b z*;QBzfU9{Vk0^}^@jE0#Ehq?fDM7`&`8(tZd{+)ucydOcsAqRbK2UCra8Mqyw7}2a z2t*t{^^f{NNTvTwa@QId?p+||*#N}SF#cMe89F%pw>pEk-M}Z7HTGWuc9pNZ!>{gcI`3k6(_Qfedcu)AxbmGoMp$eAGAb zwSOcx$fw(v-9=>zM#*SWMb~O>!AIXD=Hzr)JCKM^;c?_wRgW$v-!mD%ZkUVUEvR`f zdmu*h{C%EbMMZsYebN!}LNAV_Uy>uFSbR+4Hj>6#~J^dv$c*P(-)j3a! z=cn6xvFUX0_zftKQb66R&Ei5d9&)Q{oOs?g2nI(%k@rY*7@eiqqJt8TC!pPoLWk|P zNo7j*RAEbeT^HA3y>_O-TStRw95Nkl+Ld4hcs)R7(Q)wsnK6R2I)*$(`@_TJ!{y%2ey{w3lZdbQ>j_yXEt@FO6&4kcs>ne~ z3HKD=5Ch=7VhwHuEN8ikV_*6sxB0iM>7U*hsZZQ+?}tw&MU#g9*?NV7W`Zyz|2*vc z$Cdfx{U1i3l|X+7`1{D^AA&#MTOiKymjTS*1^+&W_E*6bNa^_hn@anML<0QD^8C|~ z5#BGTpZ(;*Ksm_R(LanF!T#^a(Qo5Mzbp9r=)#{W%0noqe;j1^9pd-a_MZ?Akm~mr z#Q(F={X5q0-Pk{|5FwoQFRb5tv%f?9&V&C6F@^gth`+Mpzl;CQvHdAt59tv9(%?77 z?RSK~6IXxA0|5C%0Kk9HSig(^&K~>;piBCP{{Q9@ei!~d_WvooNb@h@zhwfy%m4kZ j{--nmAWHui-T!ruR|3I8tQY`5g*+@EjgetSize().Height); } +DECLARE_OOXMLIMPORT_TEST(testOleAnchor, "ole-anchor.docx") +{ + // This was AS_CHARACTER, even if the VML style explicitly contains "position:absolute". + CPPUNIT_ASSERT_EQUAL(text::TextContentAnchorType_AT_CHARACTER, getProperty(getShape(1), "AnchorType")); +} + DECLARE_OOXMLIMPORT_TEST(testDMLGroupShapeCapitalization, "dml-groupshape-capitalization.docx") { // Capitalization inside a group shape was not imported diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index b60c2a80a0f4..9e290e63ddac 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -1231,9 +1231,13 @@ void DomainMapper_Impl::appendOLE( const OUString& rStreamName, OLEHandlerPtr pO uno::Reference< graphic::XGraphic > xGraphic = pOLEHandler->getReplacement(); xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_GRAPHIC ), uno::makeAny(xGraphic)); - // mimic the treatment of graphics here.. it seems anchoring as character - // gives a better ( visually ) result - xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ANCHOR_TYPE ), uno::makeAny( text::TextContentAnchorType_AS_CHARACTER ) ); + uno::Reference xReplacementProperties(pOLEHandler->getShape(), uno::UNO_QUERY); + if (xReplacementProperties.is()) + xOLEProperties->setPropertyValue("AnchorType", xReplacementProperties->getPropertyValue("AnchorType")); + else + // mimic the treatment of graphics here.. it seems anchoring as character + // gives a better ( visually ) result + xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ANCHOR_TYPE ), uno::makeAny( text::TextContentAnchorType_AS_CHARACTER ) ); // remove ( if valid ) associated shape ( used for graphic replacement ) m_aAnchoredStack.top( ).bToRemove = true; RemoveLastParagraph();