summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
Diffstat (limited to 'oox')
-rw-r--r--oox/source/export/drawingml.cxx15
1 files changed, 13 insertions, 2 deletions
diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index bdec63d80e1a..d03a0d87c007 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -1812,6 +1812,7 @@ void DrawingML::WritePolyPolygon( const PolyPolygon& rPolyPolygon )
mpFS->endElementNS( XML_a, XML_moveTo );
}
+ sal_Int32 nCounter = 0 ;
for( sal_uInt16 j = 1; j < rPoly.GetSize(); j ++ )
{
enum PolyFlags flags = rPoly.GetFlags(j);
@@ -1821,7 +1822,10 @@ void DrawingML::WritePolyPolygon( const PolyPolygon& rPolyPolygon )
bBezier = sal_True;
}
else if( flags == POLY_NORMAL && !bBezier )
+ {
mpFS->startElementNS( XML_a, XML_lnTo, FSEND );
+ ++nCounter ;
+ }
mpFS->singleElementNS( XML_a, XML_pt,
XML_x, I64S( rPoly[j].X() - aRect.Left() ),
@@ -1835,12 +1839,19 @@ void DrawingML::WritePolyPolygon( const PolyPolygon& rPolyPolygon )
}
else if( flags == POLY_NORMAL && !bBezier )
mpFS->endElementNS( XML_a, XML_lnTo );
- else if( bBezier && ( j % 3 ) == 0 )
+
+ /* ( j % 3 == 0 ) will fail to address the iterations
+ that have been dedicated to XML_lnTo in case if the
+ flag is POLY_NORMAL.
+ Similarly the sequence would go wrong if we do not
+ make the flag bBezier as false after ending the element.
+ */
+ else if( bBezier && ( ( j - nCounter ) % 3 ) == 0 )
{
// //a:cubicBezTo can only contain 3 //a:pt elements, so we
// need to break things up...
mpFS->endElementNS( XML_a, XML_cubicBezTo );
- mpFS->startElementNS( XML_a, XML_cubicBezTo, FSEND );
+ bBezier = sal_False;
}
}