include/oox/export/vmlexport.hxx | 7 ++ oox/source/export/vmlexport.cxx | 69 +++++++++++++++++++++------ sw/source/filter/ww8/docxattributeoutput.cxx | 7 +- 3 files changed, 66 insertions(+), 17 deletions(-)
New commits: commit 43b057760472c0131a83227cf4d35db2bca2d0e4 Author: Miklos Vajna <vmik...@suse.cz> Date: Sat Jun 15 10:41:08 2013 +0200 fdo#58819 VML export of ESCHER_Prop_fillOpacity Change-Id: Ic50be88b484e5bfba60c5bd8dafb7e6da0b33c9e diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 325f87e..710fe93 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -516,6 +516,7 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect case ESCHER_Prop_fillBackColor: // 387 case ESCHER_Prop_fillBlip: // 390 case ESCHER_Prop_fNoFillHitTest: // 447 + case ESCHER_Prop_fillOpacity: // 386 { sal_uInt32 nValue; sax_fastparser::FastAttributeList *pAttrList = m_pSerializer->createAttrList(); @@ -567,6 +568,10 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect if ( rProps.GetOpt( ESCHER_Prop_fNoFillHitTest, nValue ) ) impl_AddBool( pAttrList, XML_detectmouseclick, nValue ); + if (rProps.GetOpt(ESCHER_Prop_fillOpacity, nValue)) + // Partly undo the transformation at the end of EscherPropertyContainer::CreateFillProperties(): VML opacity is 0..1. + pAttrList->add(XML_opacity, OString::number(double((nValue * 100) >> 16) / 100)); + m_pSerializer->singleElementNS( XML_v, XML_fill, XFastAttributeListRef( pAttrList ) ); } bAlreadyWritten[ ESCHER_Prop_fillType ] = true; @@ -574,6 +579,7 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect bAlreadyWritten[ ESCHER_Prop_fillBackColor ] = true; bAlreadyWritten[ ESCHER_Prop_fillBlip ] = true; bAlreadyWritten[ ESCHER_Prop_fNoFillHitTest ] = true; + bAlreadyWritten[ ESCHER_Prop_fillOpacity ] = true; break; case ESCHER_Prop_lineColor: // 448 commit 98f90fdecc030b3789c0811cff8603709e5fec30 Author: Miklos Vajna <vmik...@suse.cz> Date: Fri Jun 14 18:04:55 2013 +0200 fdo#58819 VML export of ESCHER_Prop_gtextFont Change-Id: Id0404405b41d5137e726670a959d5e314eb8f2ec diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index f37bdf8..325f87e 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -708,23 +708,41 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect } break; case ESCHER_Prop_gtextUNICODE: + case ESCHER_Prop_gtextFont: { - SvMemoryStream aStream; - aStream.Write(it->pBuf, it->nPropSize); - aStream.Seek(0); - OUString aTextPathString = SvxMSDffManager::MSDFFReadZString(aStream, it->nPropSize, true); + EscherPropSortStruct aUnicode; + if (rProps.GetOpt(ESCHER_Prop_gtextUNICODE, aUnicode)) + { + SvMemoryStream aStream; + aStream.Write(it->pBuf, it->nPropSize); + aStream.Seek(0); + OUString aTextPathString = SvxMSDffManager::MSDFFReadZString(aStream, it->nPropSize, true); + aStream.Seek(0); - m_pSerializer->singleElementNS( XML_v, XML_path, - XML_textpathok, "t", - FSEND ); + m_pSerializer->singleElementNS( XML_v, XML_path, + XML_textpathok, "t", + FSEND ); - m_pSerializer->singleElementNS( XML_v, XML_textpath, - XML_on, "t", - XML_fitshape, "t", - XML_string, OUStringToOString(aTextPathString, RTL_TEXTENCODING_UTF8), - FSEND ); + sax_fastparser::FastAttributeList* pAttrList = m_pSerializer->createAttrList(); + pAttrList->add(XML_on, "t"); + pAttrList->add(XML_fitshape, "t"); + pAttrList->add(XML_string, OUStringToOString(aTextPathString, RTL_TEXTENCODING_UTF8)); + EscherPropSortStruct aFont; + OUString aStyle; + if (rProps.GetOpt(ESCHER_Prop_gtextFont, aFont)) + { + aStream.Write(aFont.pBuf, aFont.nPropSize); + aStream.Seek(0); + OUString aTextPathFont = SvxMSDffManager::MSDFFReadZString(aStream, aFont.nPropSize, true); + aStyle += "font-family:\"" + aTextPathFont + "\""; + } + if (!aStyle.isEmpty()) + pAttrList->add(XML_style, OUStringToOString(aStyle, RTL_TEXTENCODING_UTF8)); + m_pSerializer->singleElementNS(XML_v, XML_textpath, XFastAttributeListRef(pAttrList)); + } bAlreadyWritten[ESCHER_Prop_gtextUNICODE] = true; + bAlreadyWritten[ESCHER_Prop_gtextFont] = true; } break; case ESCHER_Prop_Rotation: commit 12322f5fd2a67e3f21029ac3511aa54d96fc1cab Author: Miklos Vajna <vmik...@suse.cz> Date: Fri Jun 14 17:39:50 2013 +0200 fdo#58819 VML export of ESCHER_Prop_fNoLineDrawDash With this, the bugdoc is (correctly) no longer stroked. Change-Id: Iaf00e17f2535ece2be09dc8ec0d383f2218a6050 diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 8806553..f37bdf8 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -734,6 +734,13 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect bAlreadyWritten[ESCHER_Prop_Rotation] = true; } break; + case ESCHER_Prop_fNoLineDrawDash: + { + // See DffPropertyReader::ApplyLineAttributes(). + impl_AddBool( m_pShapeAttrList, XML_stroked, it->nPropValue & 8 ); + bAlreadyWritten[ESCHER_Prop_fNoLineDrawDash] = true; + } + break; default: #if OSL_DEBUG_LEVEL > 0 fprintf( stderr, "TODO VMLExport::Commit(), unimplemented id: %d, value: %" SAL_PRIuUINT32 ", data: [%" SAL_PRIuUINT32 ", %p]\n", commit 559d194d80a20b17ba6aa6f94a7749bcc59c871e Author: Miklos Vajna <vmik...@suse.cz> Date: Fri Jun 14 11:23:13 2013 +0200 fdo#58819 DOCX VML export: fix shape size for rotated shapes The problem is that we wrote the size of the shape itself, while VML wants the bounding box here. The WW8 export ignores the rectangle given in EscherEx::Commit(), uses SdrObject::GetSnapRect() instead and later refines the position by using the point got in WW8AttributeOutput::OutputFlyFrame_Impl(), see PlcDrawObj::WritePlc(). Do the same in the VML export, i.e. ignore the Rectangle we get in VMLExport::Commit() and use SdrObject::GetSnapRect() + the point given in DocxAttributeOutput::OutputFlyFrame_Impl() instead. Change-Id: I5adbdf205792c87f92c1ddf1cf674f87e11eb54e diff --git a/include/oox/export/vmlexport.hxx b/include/oox/export/vmlexport.hxx index 31f5241..57f8889 100644 --- a/include/oox/export/vmlexport.hxx +++ b/include/oox/export/vmlexport.hxx @@ -53,6 +53,9 @@ class OOX_DLLPUBLIC VMLExport : public EscherEx /// Anchoring. sal_Int16 m_eHOri, m_eVOri, m_eHRel, m_eVRel; + /// Parent position. + const Point* m_pNdTopLeft; + /// The object we're exporting. const SdrObject* m_pSdrObject; @@ -83,7 +86,9 @@ public: /// Export the sdr object as VML. /// /// Call this when you need to export the object as VML. - sal_uInt32 AddSdrObject( const SdrObject& rObj, const sal_Int16 eHOri = -1, const sal_Int16 eVOri = -1, const sal_Int16 eHRel = -1, const sal_Int16 eVRel = -1 ); + sal_uInt32 AddSdrObject( const SdrObject& rObj, const sal_Int16 eHOri = -1, + const sal_Int16 eVOri = -1, const sal_Int16 eHRel = -1, const + sal_Int16 eVRel = -1, const Point* pNdTopLeft = 0 ); protected: /// Add an attribute to the generated <v:shape/> element. diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index 63f27a3..8806553 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -48,6 +48,7 @@ VMLExport::VMLExport( ::sax_fastparser::FSHelperPtr pSerializer, VMLTextExport* , m_eVOri( 0 ) , m_eHRel( 0 ) , m_eVRel( 0 ) + , m_pNdTopLeft( 0 ) , m_pSdrObject( 0 ) , m_pShapeAttrList( NULL ) , m_nShapeType( ESCHER_ShpInst_Nil ) @@ -324,7 +325,15 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect if ( m_nShapeType == ESCHER_ShpInst_Line ) AddLineDimensions( rRect ); else - AddRectangleDimensions( *m_pShapeStyle, rRect ); + { + Rectangle aRect(rRect); + if (m_pNdTopLeft) + { + aRect = m_pSdrObject->GetSnapRect(); + aRect -= *m_pNdTopLeft; + } + AddRectangleDimensions( *m_pShapeStyle, aRect ); + } // properties bool bAlreadyWritten[ 0xFFF ]; @@ -1000,13 +1009,14 @@ void VMLExport::EndShape( sal_Int32 nShapeElement ) } } -sal_uInt32 VMLExport::AddSdrObject( const SdrObject& rObj, const sal_Int16 eHOri, const sal_Int16 eVOri, const sal_Int16 eHRel, const sal_Int16 eVRel ) +sal_uInt32 VMLExport::AddSdrObject( const SdrObject& rObj, const sal_Int16 eHOri, const sal_Int16 eVOri, const sal_Int16 eHRel, const sal_Int16 eVRel, const Point* pNdTopLeft ) { m_pSdrObject = &rObj; m_eHOri = eHOri; m_eVOri = eVOri; m_eHRel = eHRel; m_eVRel = eVRel; + m_pNdTopLeft = pNdTopLeft; return EscherEx::AddSdrObject(rObj); } diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index b2aa7f3..d2049fc 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -2689,7 +2689,7 @@ void DocxAttributeOutput::WritePostponedMath() m_postponedMath = NULL; } -void DocxAttributeOutput::OutputFlyFrame_Impl( const sw::Frame &rFrame, const Point& /*rNdTopLeft*/ ) +void DocxAttributeOutput::OutputFlyFrame_Impl( const sw::Frame &rFrame, const Point& rNdTopLeft ) { m_pSerializer->mark(); @@ -2735,7 +2735,10 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const sw::Frame &rFrame, const Po const SwFrmFmt& rFrmFmt = rFrame.GetFrmFmt(); SwFmtHoriOrient rHoriOri = rFrmFmt.GetHoriOrient(); SwFmtVertOrient rVertOri = rFrmFmt.GetVertOrient(); - m_rExport.VMLExporter().AddSdrObject( *pSdrObj, rHoriOri.GetHoriOrient(), rVertOri.GetVertOrient(), rHoriOri.GetRelationOrient(), rVertOri.GetRelationOrient() ); + m_rExport.VMLExporter().AddSdrObject( *pSdrObj, + rHoriOri.GetHoriOrient(), rVertOri.GetVertOrient(), + rHoriOri.GetRelationOrient(), + rVertOri.GetRelationOrient(), &rNdTopLeft ); m_pSerializer->endElementNS( XML_w, XML_pict ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits