From f1ec5dcfca45e9623d3da05503353df63e8dba4f Mon Sep 17 00:00:00 2001 From: Rohit Deshmukh Date: Mon, 6 Jan 2014 11:26:46 +0530 Subject: [PATCH] fdo#69616: Fix for VML part missing for group. Cause: - In altenrate content, Fallback contains only group tag. Implementation: - Added export logic in Vml export. - Added unit test case for vml group. Change-Id: Ia1c9834950528dc892caea1cb675a7f42165d9ba Reviewed-on: https://gerrit.libreoffice.org/7276 Reviewed-by: Miklos Vajna Tested-by: Miklos Vajna --- filter/source/msfilter/eschesdo.cxx | 16 ++++++- filter/source/msfilter/eschesdo.hxx | 1 + filter/source/msfilter/util.cxx | 1 + include/filter/msfilter/escherex.hxx | 6 ++- include/oox/export/vmlexport.hxx | 2 +- oox/source/export/vmlexport.cxx | 48 ++++++++++++++------ sw/qa/extras/ooxmlexport/data/fdo69616.docx | Bin 0 -> 22253 bytes sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 9 ++++ 8 files changed, 64 insertions(+), 19 deletions(-) create mode 100644 sw/qa/extras/ooxmlexport/data/fdo69616.docx diff --git a/filter/source/msfilter/eschesdo.cxx b/filter/source/msfilter/eschesdo.cxx index c5fb1936374a..afddce7af2fc 100644 --- a/filter/source/msfilter/eschesdo.cxx +++ b/filter/source/msfilter/eschesdo.cxx @@ -233,7 +233,10 @@ sal_uInt32 ImplEESdrWriter::ImplWriteShape( ImplEESdrObject& rObj, ImplEESdrObject aObj( *this, *(Reference< XShape >*) xXIndexAccess->getByIndex( n ).getValue() ); if( aObj.IsValid() ) + { + aObj.SetOOXML(bOOxmlExport); ImplWriteShape( aObj, rSolverContainer, ePageType, bOOxmlExport ); + } } mpEscherEx->LeaveGroup(); } @@ -686,7 +689,9 @@ sal_uInt32 ImplEESdrWriter::ImplWriteShape( ImplEESdrObject& rObj, ImplFlipBoundingBox( rObj, aPropOpt ); aPropOpt.CreateShapeProperties( rObj.GetShapeRef() ); - mpEscherEx->Commit( aPropOpt, rObj.GetRect() ); + const SdrObject* sdrObj = rObj.GetSdrObject(); + mpEscherEx->AddSdrObjectVMLObject(*sdrObj ); + mpEscherEx->Commit( aPropOpt, rObj.GetRect()); if( mpEscherEx->GetGroupLevel() > 1 ) mpEscherEx->AddChildAnchor( rObj.GetRect() ); @@ -784,7 +789,9 @@ void ImplEESdrWriter::ImplWriteAdditionalText( ImplEESdrObject& rObj, } rObj.SetAngle( nAngle ); aPropOpt.CreateShapeProperties( rObj.GetShapeRef() ); - mpEscherEx->Commit( aPropOpt, rObj.GetRect() ); + const SdrObject* sdrObj = rObj.GetSdrObject(); + mpEscherEx->AddSdrObjectVMLObject(*sdrObj ); + mpEscherEx->Commit( aPropOpt, rObj.GetRect()); // write the childanchor mpEscherEx->AddChildAnchor( rObj.GetRect() ); @@ -1288,4 +1295,9 @@ bool ImplEESdrObject::GetOOXML() const return mbOOXML; } +void ImplEESdrObject::SetOOXML(bool bOOXML) +{ + mbOOXML = bOOXML; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/filter/source/msfilter/eschesdo.hxx b/filter/source/msfilter/eschesdo.hxx index 53f5705cb958..dd78abaf3b56 100644 --- a/filter/source/msfilter/eschesdo.hxx +++ b/filter/source/msfilter/eschesdo.hxx @@ -87,6 +87,7 @@ public: sal_uInt32 ImplGetText(); sal_Bool ImplHasText() const; bool GetOOXML() const; + void SetOOXML(bool bOOXML); }; diff --git a/filter/source/msfilter/util.cxx b/filter/source/msfilter/util.cxx index 72e15dd0ab3e..a2b121c85227 100644 --- a/filter/source/msfilter/util.cxx +++ b/filter/source/msfilter/util.cxx @@ -1085,6 +1085,7 @@ static const CustomShapeTypeTranslationTable pCustomShapeTypeTranslationTable[] { "ooxml-cloudCallout", "cloudCallout" }, { "ooxml-callout1", "callout1" }, { "ooxml-ribbon", "ribbon" }, + { "ooxml-rect", "rectangle" }, }; static struct { diff --git a/include/filter/msfilter/escherex.hxx b/include/filter/msfilter/escherex.hxx index d69e49d04674..70a017ae0759 100644 --- a/include/filter/msfilter/escherex.hxx +++ b/include/filter/msfilter/escherex.hxx @@ -1675,7 +1675,7 @@ public: // a ESCHER_Sp is being written ( a ESCHER_DgContainer has to be opened for this purpose!) virtual void AddShape( sal_uInt32 nShpInstance, sal_uInt32 nFlagIds, sal_uInt32 nShapeID = 0 ); - virtual void Commit( EscherPropertyContainer& rProps, const Rectangle& rRect ); + virtual void Commit( EscherPropertyContainer& rProps, const Rectangle& rRect); sal_uInt32 GetColor( const sal_uInt32 nColor, sal_Bool bSwap = sal_True ); sal_uInt32 GetColor( const Color& rColor, sal_Bool bSwap = sal_True ); @@ -1687,6 +1687,10 @@ public: /// returns the ShapeID sal_uInt32 AddSdrObject( const SdrObject& rObj, bool ooxmlExport = false ); + virtual void AddSdrObjectVMLObject( const SdrObject& /*rObj*/) + { + // Required for Exporting VML shape + } /// If objects are written through AddSdrObject the /// SolverContainer has to be written, and maybe some diff --git a/include/oox/export/vmlexport.hxx b/include/oox/export/vmlexport.hxx index bc7bf294b09e..2b414c0d81be 100644 --- a/include/oox/export/vmlexport.hxx +++ b/include/oox/export/vmlexport.hxx @@ -89,6 +89,7 @@ public: sal_uInt32 AddSdrObject( const SdrObject& rObj, sal_Int16 eHOri = -1, sal_Int16 eVOri = -1, sal_Int16 eHRel = -1, sal_Int16 eVRel = -1, const Point* pNdTopLeft = 0, const sal_Bool bOOxmlExport = false ); + virtual void AddSdrObjectVMLObject( const SdrObject& rObj); protected: /// Add an attribute to the generated element. @@ -109,7 +110,6 @@ protected: /// /// The parameter is just what we got from StartShape(). virtual void EndShape( sal_Int32 nShapeElement ); - virtual void Commit( EscherPropertyContainer& rProps, const Rectangle& rRect ); private: diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 85003b7d5445..09600294042b 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -175,7 +175,7 @@ void VMLExport::AddShape( sal_uInt32 nShapeType, sal_uInt32 nShapeFlags, sal_uIn { m_nShapeType = nShapeType; m_nShapeFlags = nShapeFlags; - + m_pShapeAttrList->add( XML_name, ShapeIdString( nShapeId ) ); m_pShapeAttrList->add( XML_id, ShapeIdString( nShapeId ) ); } @@ -322,6 +322,10 @@ inline sal_Int32 impl_GetPointComponent( const sal_uInt8* &pVal, sal_uInt16 nPoi return nRet; } +void VMLExport::AddSdrObjectVMLObject( const SdrObject& rObj) +{ + m_pSdrObject = &rObj; +} void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect ) { if ( m_nShapeType == ESCHER_ShpInst_Nil ) @@ -385,11 +389,11 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect nTop = it->nPropValue; rProps.GetOpt( ESCHER_Prop_geoLeft, nLeft ); } - - m_pShapeAttrList->add( XML_coordorigin, - OStringBuffer( 20 ).append( sal_Int32( nLeft ) ) - .append( "," ).append( sal_Int32( nTop ) ) - .makeStringAndClear() ); + if(nTop!=0 && nLeft!=0) + m_pShapeAttrList->add( XML_coordorigin, + OStringBuffer( 20 ).append( sal_Int32( nLeft ) ) + .append( "," ).append( sal_Int32( nTop ) ) + .makeStringAndClear() ); } bAlreadyWritten[ ESCHER_Prop_geoLeft ] = true; bAlreadyWritten[ ESCHER_Prop_geoTop ] = true; @@ -414,10 +418,11 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect rProps.GetOpt( ESCHER_Prop_geoRight, nRight ); } - m_pShapeAttrList->add( XML_coordsize, - OStringBuffer( 20 ).append( sal_Int32( nRight ) - sal_Int32( nLeft ) ) - .append( "," ).append( sal_Int32( nBottom ) - sal_Int32( nTop ) ) - .makeStringAndClear() ); + if(nTop!=0 && nLeft!=0 && nBottom!=0 && nRight!=0 ) + m_pShapeAttrList->add( XML_coordsize, + OStringBuffer( 20 ).append( sal_Int32( nRight ) - sal_Int32( nLeft ) ) + .append( "," ).append( sal_Int32( nBottom ) - sal_Int32( nTop ) ) + .makeStringAndClear() ); } bAlreadyWritten[ ESCHER_Prop_geoRight ] = true; bAlreadyWritten[ ESCHER_Prop_geoBottom ] = true; @@ -451,7 +456,8 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect { sal_Int32 nX = impl_GetPointComponent( pVerticesIt, nPointSize ); sal_Int32 nY = impl_GetPointComponent( pVerticesIt, nPointSize ); - aPath.append( "m" ).append( nX ).append( "," ).append( nY ); + if (nX >= 0 && nY >= 0 ) + aPath.append( "m" ).append( nX ).append( "," ).append( nY ); } break; case 0xb300: @@ -495,14 +501,15 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect { sal_Int32 nX = impl_GetPointComponent(pVerticesIt, nPointSize); sal_Int32 nY = impl_GetPointComponent(pVerticesIt, nPointSize); - aPath.append("l").append(nX).append(",").append(nY); + if (nX >= 0 && nY >= 0 ) + aPath.append("l").append(nX).append(",").append(nY); } break; } } - - if ( !aPath.isEmpty() ) - m_pShapeAttrList->add( XML_path, aPath.getStr() ); + OString pathString = aPath.makeStringAndClear(); + if ( !aPath.isEmpty() && pathString != "xe" ) + m_pShapeAttrList->add( XML_path, pathString ); } #if OSL_DEBUG_LEVEL > 0 else @@ -774,6 +781,17 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect bAlreadyWritten[ESCHER_Prop_fNoLineDrawDash] = true; } break; + case ESCHER_Prop_wzName: + { + SvMemoryStream aStream; + aStream.Write(it->pBuf, it->nPropSize); + aStream.Seek(0); + OUString idStr = SvxMSDffManager::MSDFFReadZString(aStream, it->nPropSize, true); + aStream.Seek(0); + m_pShapeAttrList->add(XML_ID, OUStringToOString(idStr, RTL_TEXTENCODING_UTF8)); + bAlreadyWritten[ESCHER_Prop_wzName] = true; + } + break; default: #if OSL_DEBUG_LEVEL > 0 fprintf( stderr, "TODO VMLExport::Commit(), unimplemented id: %d, value: %" SAL_PRIuUINT32 ", data: [%" SAL_PRIuUINT32 ", %p]\n", diff --git a/sw/qa/extras/ooxmlexport/data/fdo69616.docx b/sw/qa/extras/ooxmlexport/data/fdo69616.docx new file mode 100644 index 0000000000000000000000000000000000000000..7c7f52e1686584e7d5e7e0ccdb199a60778aa9ae GIT binary patch literal 22253 zcmeFZ1D7sA)+SoEZR3=yPT6(Jwr$(CZQHhO+r}x|)~)WIZ>HydeeWNb$+aT$&Daq; z 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 WZaXm9S08J4K@x$C%u&15U;hBTpTsl( literal 0 HcmV?d00001 diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx index 9ce53cb3d646..7c8fa7ea2b06 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx @@ -2594,6 +2594,15 @@ DECLARE_OOXMLEXPORT_TEST(testFDO73546, "FDO73546.docx") assertXPath(pXmlDoc, "/w:hdr/w:p[1]/w:r[3]/mc:AlternateContent/mc:Choice/w:drawing/wp:anchor", "distL","0"); } +DECLARE_OOXMLEXPORT_TEST(testFdo69616, "fdo69616.docx") +{ + xmlDocPtr pXmlDoc = parseExport(); + if (!pXmlDoc) + return; + // VML + CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p[1]/w:r[1]/mc:AlternateContent/mc:Fallback/w:pict/v:group", "coordorigin").match("696,725")); +} + #endif CPPUNIT_PLUGIN_IMPLEMENT();