From 1becc60df9caa9fef5011ae877c832fe8bcefb6c Mon Sep 17 00:00:00 2001 From: Miklos Vajna Date: Fri, 19 Oct 2012 12:06:34 +0200 Subject: import RTF_DPPOLYLINE Change-Id: I65f1ddb9d0d691c126c8e94b2e60c8309b0d33ff --- writerfilter/source/rtftok/rtfdocumentimpl.cxx | 34 +++++++++++++++++++++++++- writerfilter/source/rtftok/rtfdocumentimpl.hxx | 2 ++ 2 files changed, 35 insertions(+), 1 deletion(-) (limited to 'writerfilter/source/rtftok') diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx index 19d146571a6c..452c107f1fc1 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx @@ -2273,6 +2273,7 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword) case RTF_DPRECT: case RTF_DPELLIPSE: case RTF_DPTXBX: + case RTF_DPPOLYLINE: { sal_Int32 nType = 0; switch (nKeyword) @@ -2280,6 +2281,10 @@ int RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword) case RTF_DPLINE: m_aStates.top().aDrawingObject.xShape.set(getModelFactory()->createInstance("com.sun.star.drawing.LineShape"), uno::UNO_QUERY); break; + case RTF_DPPOLYLINE: + // The reason this is not a simple CustomShape is that in the old syntax we have no ViewBox info. + m_aStates.top().aDrawingObject.xShape.set(getModelFactory()->createInstance("com.sun.star.drawing.PolyLineShape"), uno::UNO_QUERY); + break; case RTF_DPRECT: nType = ESCHER_ShpInst_Rectangle; break; @@ -3143,6 +3148,32 @@ int RTFDocumentImpl::dispatchValue(RTFKeyword nKeyword, int nParam) case RTF_DODHGT: m_aStates.top().aDrawingObject.nDhgt = nParam; break; + case RTF_DPPOLYCOUNT: + if (nParam >= 0) + { + m_aStates.top().aDrawingObject.nPolyLineCount = nParam; + m_aStates.top().aDrawingObject.aPolyLinePoints.realloc(nParam); + } + break; + case RTF_DPPTX: + { + RTFDrawingObject& rDrawingObject = m_aStates.top().aDrawingObject; + rDrawingObject.aPolyLinePoints[rDrawingObject.aPolyLinePoints.getLength() - rDrawingObject.nPolyLineCount].X = TWIP_TO_MM100(nParam); + } + break; + case RTF_DPPTY: + { + RTFDrawingObject& rDrawingObject = m_aStates.top().aDrawingObject; + rDrawingObject.aPolyLinePoints[rDrawingObject.aPolyLinePoints.getLength() - rDrawingObject.nPolyLineCount].Y = TWIP_TO_MM100(nParam); + rDrawingObject.nPolyLineCount--; + if (rDrawingObject.nPolyLineCount == 0) + { + uno::Sequence< uno::Sequence >aPointSequenceSequence(1); + aPointSequenceSequence[0] = rDrawingObject.aPolyLinePoints; + rDrawingObject.xPropertySet->setPropertyValue("PolyPolygon", uno::Any(aPointSequenceSequence)); + } + } + break; default: SAL_INFO("writerfilter", OSL_THIS_FUNC << ": TODO handle value '" << lcl_RtfToString(nKeyword) << "'"); aSkip.setParsed(false); @@ -4133,7 +4164,8 @@ RTFDrawingObject::RTFDrawingObject() nFillColorB(0), bHasFillColor(false), nDhgt(0), - nFLine(-1) + nFLine(-1), + nPolyLineCount(0) { } diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.hxx b/writerfilter/source/rtftok/rtfdocumentimpl.hxx index 7f0988c20263..43dc7483313b 100644 --- a/writerfilter/source/rtftok/rtfdocumentimpl.hxx +++ b/writerfilter/source/rtftok/rtfdocumentimpl.hxx @@ -274,6 +274,8 @@ namespace writerfilter { bool bHasFillColor; sal_Int32 nDhgt; sal_Int32 nFLine; + sal_Int32 nPolyLineCount; + uno::Sequence aPolyLinePoints; }; /// Stores the properties of a picture. -- cgit