include/oox/export/vmlexport.hxx | 5 - oox/source/export/vmlexport.cxx | 109 ++++++++++++++++++++++++++- sw/source/filter/ww8/docxattributeoutput.cxx | 6 + 3 files changed, 116 insertions(+), 4 deletions(-)
New commits: commit 175d28d564ff552cd3d73c3b087216bc82a763a1 Author: Miklos Vajna <vmik...@suse.cz> Date: Thu Jun 13 17:02:11 2013 +0200 fdo#58819 VML export of mso-position-* mso-position-horizontal, mso-position-horizontal-relative, mso-position-vertical and mso-position-vertical-relative With this, the watermark in the bugdoc is almost in place, if you ignore the missing rotation. Change-Id: I8d3d834089e734654fcbbb0fb6166b4d7e01f80f diff --git a/include/oox/export/vmlexport.hxx b/include/oox/export/vmlexport.hxx index 4e790c5..31f5241 100644 --- a/include/oox/export/vmlexport.hxx +++ b/include/oox/export/vmlexport.hxx @@ -50,6 +50,9 @@ class OOX_DLLPUBLIC VMLExport : public EscherEx /// Parent exporter, used for text callback. VMLTextExport* m_pTextExport; + /// Anchoring. + sal_Int16 m_eHOri, m_eVOri, m_eHRel, m_eVRel; + /// The object we're exporting. const SdrObject* m_pSdrObject; @@ -80,7 +83,7 @@ public: /// Export the sdr object as VML. /// /// Call this when you need to export the object as VML. - sal_uInt32 AddSdrObject( const SdrObject& rObj ); + 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 ); 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 e2df5cf..a93bdb5 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -29,16 +29,25 @@ #include <vcl/cvtgrf.hxx> #include <filter/msfilter/msdffimp.hxx> +#include <com/sun/star/text/HoriOrientation.hpp> +#include <com/sun/star/text/VertOrientation.hpp> +#include <com/sun/star/text/RelOrientation.hpp> + #include <cstdio> using namespace sax_fastparser; using namespace oox::vml; +using namespace com::sun::star; VMLExport::VMLExport( ::sax_fastparser::FSHelperPtr pSerializer, VMLTextExport* pTextExport ) : EscherEx( EscherExGlobalRef(new EscherExGlobal(0)), 0 ) , m_pSerializer( pSerializer ) , m_pTextExport( pTextExport ) + , m_eHOri( 0 ) + , m_eVOri( 0 ) + , m_eHRel( 0 ) + , m_eVRel( 0 ) , m_pSdrObject( 0 ) , m_pShapeAttrList( NULL ) , m_nShapeType( ESCHER_ShpInst_Nil ) @@ -854,6 +863,77 @@ sal_Int32 VMLExport::StartShape() break; } + // anchoring + switch (m_eHOri) + { + case text::HoriOrientation::LEFT: + m_pShapeStyle->append(";mso-position-horizontal:left"); + break; + case text::HoriOrientation::CENTER: + m_pShapeStyle->append(";mso-position-horizontal:center"); + break; + case text::HoriOrientation::RIGHT: + m_pShapeStyle->append(";mso-position-horizontal:right"); + break; + case text::HoriOrientation::INSIDE: + m_pShapeStyle->append(";mso-position-horizontal:inside"); + break; + case text::HoriOrientation::OUTSIDE: + m_pShapeStyle->append(";mso-position-horizontal:outside"); + break; + default: + case text::HoriOrientation::NONE: + break; + } + switch (m_eHRel) + { + case text::RelOrientation::PAGE_PRINT_AREA: + m_pShapeStyle->append(";mso-position-horizontal-relative:margin"); + break; + case text::RelOrientation::PAGE_FRAME: + case text::RelOrientation::PAGE_LEFT: + case text::RelOrientation::PAGE_RIGHT: + m_pShapeStyle->append(";mso-position-horizontal-relative:page"); + break; + case text::RelOrientation::CHAR: + m_pShapeStyle->append(";mso-position-horizontal-relative:char"); + break; + default: + break; + } + + switch (m_eVOri) + { + case text::VertOrientation::TOP: + case text::VertOrientation::LINE_TOP: + case text::VertOrientation::CHAR_TOP: + m_pShapeStyle->append(";mso-position-vertical:top"); + break; + case text::VertOrientation::CENTER: + case text::VertOrientation::LINE_CENTER: + m_pShapeStyle->append(";mso-position-vertical:center"); + break; + case text::VertOrientation::BOTTOM: + case text::VertOrientation::LINE_BOTTOM: + case text::VertOrientation::CHAR_BOTTOM: + m_pShapeStyle->append(";mso-position-vertical:bottom"); + break; + default: + case text::VertOrientation::NONE: + break; + } + switch (m_eVRel) + { + case text::RelOrientation::PAGE_PRINT_AREA: + m_pShapeStyle->append(";mso-position-vertical-relative:margin"); + break; + case text::RelOrientation::PAGE_FRAME: + m_pShapeStyle->append(";mso-position-vertical-relative:page"); + break; + default: + break; + } + // add style m_pShapeAttrList->add( XML_style, m_pShapeStyle->makeStringAndClear() ); @@ -913,9 +993,13 @@ void VMLExport::EndShape( sal_Int32 nShapeElement ) } } -sal_uInt32 VMLExport::AddSdrObject( const SdrObject& rObj ) +sal_uInt32 VMLExport::AddSdrObject( const SdrObject& rObj, const sal_Int16 eHOri, const sal_Int16 eVOri, const sal_Int16 eHRel, const sal_Int16 eVRel ) { m_pSdrObject = &rObj; + m_eHOri = eHOri; + m_eVOri = eVOri; + m_eHRel = eHRel; + m_eVRel = eVRel; return EscherEx::AddSdrObject(rObj); } diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx index 7e4f49c..b2aa7f3 100644 --- a/sw/source/filter/ww8/docxattributeoutput.cxx +++ b/sw/source/filter/ww8/docxattributeoutput.cxx @@ -2731,7 +2731,11 @@ void DocxAttributeOutput::OutputFlyFrame_Impl( const sw::Frame &rFrame, const Po m_pSerializer->startElementNS( XML_w, XML_pict, FSEND ); - m_rExport.VMLExporter().AddSdrObject( *pSdrObj ); + // See WinwordAnchoring::SetAnchoring(), these are not part of the SdrObject, have to be passed around manually. + 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_pSerializer->endElementNS( XML_w, XML_pict ); commit 1f2e2563a60bfc3a4c5b81b99beb8eef674d13f2 Author: Miklos Vajna <vmik...@suse.cz> Date: Thu Jun 13 14:13:49 2013 +0200 fdo#58819 initial VML export of ESCHER_Prop_gtextUNICODE Change-Id: I67b5dc102fc264d0a643620bbdc5796bdaa46d82 diff --git a/oox/source/export/vmlexport.cxx b/oox/source/export/vmlexport.cxx index ca5e625..e2df5cf 100644 --- a/oox/source/export/vmlexport.cxx +++ b/oox/source/export/vmlexport.cxx @@ -27,6 +27,7 @@ #include <tools/stream.hxx> #include <svx/svdotext.hxx> #include <vcl/cvtgrf.hxx> +#include <filter/msfilter/msdffimp.hxx> #include <cstdio> @@ -688,6 +689,26 @@ void VMLExport::Commit( EscherPropertyContainer& rProps, const Rectangle& rRect } } break; + case ESCHER_Prop_gtextUNICODE: + { + SvMemoryStream aStream; + aStream.Write(it->pBuf, it->nPropSize); + aStream.Seek(0); + OUString aTextPathString = SvxMSDffManager::MSDFFReadZString(aStream, it->nPropSize, true); + + 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 ); + + bAlreadyWritten[ESCHER_Prop_gtextUNICODE] = true; + } + break; default: #if OSL_DEBUG_LEVEL > 0 fprintf( stderr, "TODO VMLExport::Commit(), unimplemented id: %d, value: %" SAL_PRIuUINT32 ", data: [%" SAL_PRIuUINT32 ", %p]\n", @@ -851,7 +872,7 @@ sal_Int32 VMLExport::StartShape() // now check if we have some text and we have a text exporter registered const SdrTextObj* pTxtObj = PTR_CAST(SdrTextObj, m_pSdrObject); - if (pTxtObj && m_pTextExport) + if (pTxtObj && m_pTextExport && m_nShapeType != ESCHER_ShpInst_TextPlainText) { const OutlinerParaObject* pParaObj = 0; bool bOwnParaObj = false; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits