From 76bbe5ff357406ac1e0f212373c9fd4132b0d178 Mon Sep 17 00:00:00 2001 From: Armin Le Grand Date: Mon, 10 Dec 2012 14:45:55 +0000 Subject: #121437# Added patch from Regina which implements QuadraticBezier segemnts to CustomShapes Patch by: Regina Review by: ALG (cherry picked from commit 4faa46872cad4ed779b07803b7f616b32d800284) --- svx/source/customshapes/EnhancedCustomShape2d.cxx | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'svx') diff --git a/svx/source/customshapes/EnhancedCustomShape2d.cxx b/svx/source/customshapes/EnhancedCustomShape2d.cxx index 0675abde78c8..e5d5c2bae481 100644 --- a/svx/source/customshapes/EnhancedCustomShape2d.cxx +++ b/svx/source/customshapes/EnhancedCustomShape2d.cxx @@ -1562,6 +1562,36 @@ void EnhancedCustomShape2d::CreateSubPath( sal_uInt16& rSrcPt, sal_uInt16& rSegm } break; + case QUADRATICCURVETO : + { + for ( sal_uInt16 i = 0; ( i < nPntCount ) && ( ( rSrcPt + 1 ) < nCoordSize ); i++ ) + { + if ( rSrcPt ) + { + const Point aPreviousEndPoint(GetPoint( seqCoordinates[ rSrcPt - 1 ], sal_True, sal_True)); + const Point aControlQ(GetPoint( seqCoordinates[ rSrcPt++ ], sal_True, sal_True )); + const Point aEnd(GetPoint( seqCoordinates[ rSrcPt++ ], sal_True, sal_True )); + const Point aControlA((aPreviousEndPoint + (aControlQ * 2)) / 3); + const Point aControlB(((aControlQ * 2) + aEnd) / 3); + + DBG_ASSERT(aNewB2DPolygon.count(), "EnhancedCustomShape2d::CreateSubPath: Error in adding Q control point (!)"); + aNewB2DPolygon.appendBezierSegment( + basegfx::B2DPoint(aControlA.X(), aControlA.Y()), + basegfx::B2DPoint(aControlB.X(), aControlB.Y()), + basegfx::B2DPoint(aEnd.X(), aEnd.Y())); + } + else // no previous point , do a moveto + { + rSrcPt++; // skip control point + const Point aEnd(GetPoint( seqCoordinates[ rSrcPt++ ], sal_True, sal_True )); + + DBG_ASSERT(aNewB2DPolygon.count(), "EnhancedCustomShape2d::CreateSubPath: Error in adding Q control point (!)"); + aNewB2DPolygon.append(basegfx::B2DPoint(aEnd.X(), aEnd.Y())); + } + } + } + break; + case ANGLEELLIPSE : { if ( nPntCount ) -- cgit