oox/source/vml/vmlformatting.cxx | 34 +++++++++++++-------- oox/source/vml/vmlshape.cxx | 7 ++++ writerfilter/source/dmapper/GraphicImport.cxx | 3 - writerfilter/source/dmapper/WrapPolygonHandler.cxx | 8 ++-- writerfilter/source/dmapper/WrapPolygonHandler.hxx | 2 - 5 files changed, 35 insertions(+), 19 deletions(-)
New commits: commit 8054a7dc0a1b9c27aea7717f58891e49bd25d14c Author: Cédric Bosdonnat <cedric.bosdon...@free.fr> Date: Wed Jun 26 11:26:56 2013 +0200 n#820504: start a new subpath with m and t in VML path decoding Change-Id: I7bac4b111ede5e815d2ed121c18f4cfe1ad0950e (cherry picked from commit 8d6eb11d6965ee93e72513f5e01b67f598edf6c3) diff --git a/oox/source/vml/vmlformatting.cxx b/oox/source/vml/vmlformatting.cxx index 31d4f32..267d8e5 100644 --- a/oox/source/vml/vmlformatting.cxx +++ b/oox/source/vml/vmlformatting.cxx @@ -310,11 +310,16 @@ void ConversionHelper::decodeVmlPath( ::std::vector< ::std::vector< Point > >& r // Upon finding the next command code, deal with stored // coordinates for previous command and reset parameters counter if needed. // See http://www.w3.org/TR/NOTE-VML#_Toc416858382 for params count reference - if ( rPath[ i ] != ',' || nParamCount == 0) + if ( rPath[ i ] != ',' || nParamCount == 0 ) { switch ( state ) { case MOVE_REL: // 2* params -> param count reset + if ( rPointLists.size() > 0 && rPointLists.back().size() > 0 ) + { + rPointLists.push_back( ::std::vector< Point >() ); + rFlagLists.push_back( ::std::vector< PolygonFlags >() ); + } rPointLists.back().push_back( Point( aCoordList[ 0 ], aCoordList[ 1 ] ) ); rFlagLists.back().push_back( PolygonFlags_NORMAL ); aCurrentPoint = rPointLists.back().back(); @@ -322,6 +327,11 @@ void ConversionHelper::decodeVmlPath( ::std::vector< ::std::vector< Point > >& r break; case MOVE_ABS: // 2 params -> no param count reset + if ( rPointLists.size() > 0 && rPointLists.back().size() > 0 ) + { + rPointLists.push_back( ::std::vector< Point >() ); + rFlagLists.push_back( ::std::vector< PolygonFlags >() ); + } rPointLists.back().push_back( Point( aCoordList[ 0 ], aCoordList[ 1 ] ) ); rFlagLists.back().push_back( PolygonFlags_NORMAL ); aCurrentPoint = rPointLists.back().back(); commit a3f2d5c140e9864b1da644ec18ad44fd6ab6334f Author: Cédric Bosdonnat <cedric.bosdon...@free.fr> Date: Mon Jun 24 11:39:30 2013 +0200 Forgot to remove one case where nParamCount is set to twice the value Change-Id: I3649364a889b7ef6ce7ac4316a1621b6328170eb (cherry picked from commit 7f7a1294e2d0da30a58d897558a18a13dbc5e690) diff --git a/oox/source/vml/vmlformatting.cxx b/oox/source/vml/vmlformatting.cxx index 69d9b35..31d4f32 100644 --- a/oox/source/vml/vmlformatting.cxx +++ b/oox/source/vml/vmlformatting.cxx @@ -338,7 +338,7 @@ void ConversionHelper::decodeVmlPath( ::std::vector< ::std::vector< Point > >& r rFlagLists.back().push_back( PolygonFlags_CONTROL ); rFlagLists.back().push_back( PolygonFlags_NORMAL ); aCurrentPoint = rPointLists.back().back(); - nParamCount = 2 * 6; + nParamCount = 6; break; case BEZIER_ABS: // 6* params -> param count reset commit b25eb9f78b55ba10636c56e6723b66939239b3f5 Author: Cédric Bosdonnat <cedric.bosdon...@free.fr> Date: Mon Jun 24 10:37:05 2013 +0200 n#820504: VML path import fixes: get back missing points nParamsCount was set to the double of the expected value, but the code handling the command only took the first set of parameters. Removing this 2* in nParamsCount. (cherry picked from commit 442ad6eef9d6e1588e4985e97ec3eafd6289f9ae) Conflicts: oox/source/vml/vmlformatting.cxx Change-Id: I2a4bb07fc9167e056a52c7adfbee9e1ef8e2636c diff --git a/oox/source/vml/vmlformatting.cxx b/oox/source/vml/vmlformatting.cxx index 806c624..69d9b35 100644 --- a/oox/source/vml/vmlformatting.cxx +++ b/oox/source/vml/vmlformatting.cxx @@ -318,7 +318,7 @@ void ConversionHelper::decodeVmlPath( ::std::vector< ::std::vector< Point > >& r rPointLists.back().push_back( Point( aCoordList[ 0 ], aCoordList[ 1 ] ) ); rFlagLists.back().push_back( PolygonFlags_NORMAL ); aCurrentPoint = rPointLists.back().back(); - nParamCount = 2 * 2; + nParamCount = 2; break; case MOVE_ABS: // 2 params -> no param count reset @@ -349,7 +349,7 @@ void ConversionHelper::decodeVmlPath( ::std::vector< ::std::vector< Point > >& r rFlagLists.back().push_back( PolygonFlags_CONTROL ); rFlagLists.back().push_back( PolygonFlags_NORMAL ); aCurrentPoint = rPointLists.back().back(); - nParamCount = 2 * 6; + nParamCount = 6; break; case LINE_REL: // 2* params -> param count reset @@ -357,14 +357,14 @@ void ConversionHelper::decodeVmlPath( ::std::vector< ::std::vector< Point > >& r aCurrentPoint.Y + aCoordList[ 1 ] ) ); rFlagLists.back().push_back( PolygonFlags_NORMAL ); aCurrentPoint = rPointLists.back().back(); - nParamCount = 2 * 2; + nParamCount = 2; break; case LINE_ABS: // 2* params -> param count reset rPointLists.back().push_back( Point( aCoordList[ 0 ], aCoordList[ 1 ] ) ); rFlagLists.back().push_back( PolygonFlags_NORMAL ); aCurrentPoint = rPointLists.back().back(); - nParamCount = 2 * 2; + nParamCount = 2; break; case CLOSE: // 0 param @@ -397,17 +397,17 @@ void ConversionHelper::decodeVmlPath( ::std::vector< ::std::vector< Point > >& r { // Single-character commands case 't': // rmoveto - state = MOVE_REL; nParamCount = 2 * 2; break; + state = MOVE_REL; nParamCount = 2; break; case 'm': // moveto - state = MOVE_ABS; nParamCount = 2 * 2; break; + state = MOVE_ABS; nParamCount = 2; break; case 'v': // rcurveto - state = BEZIER_REL; nParamCount = 2 * 6; break; + state = BEZIER_REL; nParamCount = 6; break; case 'c': // curveto - state = BEZIER_ABS; nParamCount = 2 * 6; break; + state = BEZIER_ABS; nParamCount = 6; break; case 'r': // rlineto - state = LINE_REL; nParamCount = 2 * 2; break; + state = LINE_REL; nParamCount = 2; break; case 'l': // lineto - state = LINE_ABS; nParamCount = 2 * 2; break; + state = LINE_ABS; nParamCount = 2; break; case 'x': // close state = CLOSE; break; case 'e': // end diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx index 4551eee..1cb4772 100644 --- a/oox/source/vml/vmlshape.cxx +++ b/oox/source/vml/vmlshape.cxx @@ -715,7 +715,7 @@ awt::Rectangle LineShape::getRelRectangle() const // ============================================================================ BezierShape::BezierShape(Drawing& rDrawing) - : SimpleShape(rDrawing, "com.sun.star.drawing.OpenBezierShape") // TODO Could we need both Open and Closed? + : SimpleShape(rDrawing, "com.sun.star.drawing.OpenBezierShape") { } commit 781904af36158b72c131f2d72e562e92f73a9bd2 Author: Cédric Bosdonnat <cedric.bosdon...@free.fr> Date: Fri Jun 21 10:47:42 2013 +0200 n#820504: Some imported VML paths are closed, try to detect the (cherry picked from commit 08db0b22bdce0f779e4af01a209aef1be29e9907) Conflicts: oox/source/vml/vmlshape.cxx Change-Id: Idefd0277a85bd7b2b727f59cc4e568869b4932a1 diff --git a/oox/source/vml/vmlshape.cxx b/oox/source/vml/vmlshape.cxx index 358fe16..4551eee 100644 --- a/oox/source/vml/vmlshape.cxx +++ b/oox/source/vml/vmlshape.cxx @@ -715,12 +715,19 @@ awt::Rectangle LineShape::getRelRectangle() const // ============================================================================ BezierShape::BezierShape(Drawing& rDrawing) - : SimpleShape(rDrawing, "com.sun.star.drawing.OpenBezierShape") + : SimpleShape(rDrawing, "com.sun.star.drawing.OpenBezierShape") // TODO Could we need both Open and Closed? { } Reference< XShape > BezierShape::implConvertAndInsert( const Reference< XShapes >& rxShapes, const awt::Rectangle& rShapeRect ) const { + // If we have an 'x' in the last part of the path it means it is closed... + sal_Int32 nPos = maShapeModel.maVmlPath.lastIndexOf(','); + if ( nPos != -1 && maShapeModel.maVmlPath.copy(nPos).indexOf('x') != -1 ) + { + const_cast<BezierShape*>( this )->setService( "com.sun.star.drawing.ClosedBezierShape" ); + } + awt::Rectangle aCoordSys = getCoordSystem(); PolyPolygonBezierCoords aBezierCoords; commit ee80670695014697cdfa26a6fd142c69a423cbdd Author: Cédric Bosdonnat <cedric.bosdon...@free.fr> Date: Wed Jun 19 10:42:47 2013 +0200 n#820800: docx import of wrap polyon was based on dest size of picture ... instead of the original size of it. Change-Id: Ib251206dd092a7c47343caf50bd05a3dfec1af09 (cherry picked from commit ae6981601b0e9175efaf9849b1279290ea3380f6) diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx index a6c6295..ce80724 100644 --- a/writerfilter/source/dmapper/GraphicImport.cxx +++ b/writerfilter/source/dmapper/GraphicImport.cxx @@ -1536,8 +1536,7 @@ uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const b if( aGraphicSize.Width && aGraphicSize.Height && m_pImpl->mpWrapPolygon.get() != NULL) { - awt::Size aDstSize(m_pImpl->getXSize(), m_pImpl->getYSize()); - WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize, aDstSize); + WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize); aContourPolyPolygon <<= pCorrected->getPointSequenceSequence(); } diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.cxx b/writerfilter/source/dmapper/WrapPolygonHandler.cxx index 885925d..134c49c 100644 --- a/writerfilter/source/dmapper/WrapPolygonHandler.cxx +++ b/writerfilter/source/dmapper/WrapPolygonHandler.cxx @@ -104,7 +104,7 @@ WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fra return pResult; } -WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSrcSize, const awt::Size & rDstSize) +WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSrcSize) { WrapPolygon::Pointer_t pResult; @@ -119,9 +119,9 @@ WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSr Fraction aScaleY(nWrap100Percent, Fraction(nWrap100Percent) - aMove); pResult = pResult->scale(aScaleX, aScaleY); - Fraction aScaleDestX(rDstSize.Width, nWrap100Percent); - Fraction aScaleDestY(rDstSize.Height, nWrap100Percent); - pResult = pResult->scale(aScaleDestX, aScaleDestY); + Fraction aScaleSrcX(rSrcSize.Width, nWrap100Percent); + Fraction aScaleSrcY(rSrcSize.Height, nWrap100Percent); + pResult = pResult->scale(aScaleSrcX, aScaleSrcY); return pResult; } diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.hxx b/writerfilter/source/dmapper/WrapPolygonHandler.hxx index 9312db7..52cdf5e 100644 --- a/writerfilter/source/dmapper/WrapPolygonHandler.hxx +++ b/writerfilter/source/dmapper/WrapPolygonHandler.hxx @@ -55,7 +55,7 @@ public: WrapPolygon::Pointer_t move(const awt::Point & rMove); WrapPolygon::Pointer_t scale(const Fraction & rFractionX, const Fraction & rFractionY); - WrapPolygon::Pointer_t correctWordWrapPolygon(const awt::Size & rSrcSize, const awt::Size & rDstSize); + WrapPolygon::Pointer_t correctWordWrapPolygon(const awt::Size & rSrcSize); drawing::PointSequenceSequence getPointSequenceSequence() const; };
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits