diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2013-12-06 14:40:50 +0100 |
---|---|---|
committer | Matúš Kukan <matus.kukan@collabora.com> | 2013-12-06 15:04:11 +0100 |
commit | 131f3230d98f24faf57d9404e333cb1fb183345b (patch) | |
tree | 14512c0e06ffb76397ddad96cc49cc38f180942a /cppcanvas/source | |
parent | a53dafbc9628bb243cee1714bfea59272ae57663 (diff) |
EMF+: Fill line cap object if EmfPlusCustomLineCapDataFillPath is set.
Change-Id: I7b53a8f18e1fb24b1ae0322bdf0980e431a0725f
Diffstat (limited to 'cppcanvas/source')
-rw-r--r-- | cppcanvas/source/inc/implrenderer.hxx | 2 | ||||
-rw-r--r-- | cppcanvas/source/mtfrenderer/emfplus.cxx | 23 |
2 files changed, 21 insertions, 4 deletions
diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx index 3d0c48d48767..d09ed1c1f62f 100644 --- a/cppcanvas/source/inc/implrenderer.hxx +++ b/cppcanvas/source/inc/implrenderer.hxx @@ -284,7 +284,7 @@ static float GetSwapFloat( SvStream& rSt ) /// Render LineCap, like the start or end arrow of a polygon. /// @return how much we should shorten the original polygon. double EMFPPlusDrawLineCap(const ::basegfx::B2DPolygon& rPolygon, double fPolyLength, - const ::basegfx::B2DPolyPolygon& rLineCap, bool bStart, + const ::basegfx::B2DPolyPolygon& rLineCap, bool isFilled, bool bStart, const com::sun::star::rendering::StrokeAttributes& rAttributes, const ActionFactoryParameters& rParms, OutDevState& rState); diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx index 722d23ff6509..b5b628501092 100644 --- a/cppcanvas/source/mtfrenderer/emfplus.cxx +++ b/cppcanvas/source/mtfrenderer/emfplus.cxx @@ -624,6 +624,7 @@ namespace cppcanvas sal_uInt32 strokeStartCap, strokeEndCap, strokeJoin; float miterLimit; basegfx::B2DPolyPolygon polygon; + bool mbIsFilled; public: EMFPCustomLineCap() : EMFPObject() @@ -650,7 +651,7 @@ namespace cppcanvas aAttributes.MiterLimit = miterLimit; } - void ReadPath(SvStream& s, ImplRenderer& rR, bool bClosed) + void ReadPath(SvStream& s, ImplRenderer& rR, bool bFill) { sal_Int32 pathLength; s >> pathLength; @@ -667,7 +668,7 @@ namespace cppcanvas path.Read(s, pathFlags, rR); polygon = path.GetPolygon(rR, false); - polygon.setClosed(bClosed); + mbIsFilled = bFill; // transformation to convert the path to what LibreOffice // expects @@ -1318,7 +1319,7 @@ namespace cppcanvas } double ImplRenderer::EMFPPlusDrawLineCap(const ::basegfx::B2DPolygon& rPolygon, double fPolyLength, - const ::basegfx::B2DPolyPolygon& rLineCap, bool bStart, const rendering::StrokeAttributes& rAttributes, + const ::basegfx::B2DPolyPolygon& rLineCap, bool bIsFilled, bool bStart, const rendering::StrokeAttributes& rAttributes, const ActionFactoryParameters& rParms, OutDevState& rState) { if (!rLineCap.count()) @@ -1347,6 +1348,20 @@ namespace cppcanvas rParms.mrCurrActionIndex += pAction->getActionCount()-1; } + if (bIsFilled) + { + bool bWasFillColorSet = rState.isFillColorSet; + rState.isFillColorSet = true; + rState.fillColor = rState.lineColor; + ActionSharedPtr pAction2(internal::PolyPolyActionFactory::createPolyPolyAction(aArrow, rParms.mrCanvas, rState)); + if (pAction2) + { + maActions.push_back(MtfAction(pAction2, rParms.mrCurrActionIndex)); + rParms.mrCurrActionIndex += pAction2->getActionCount()-1; + } + rState.isFillColorSet = bWasFillColorSet; + } + return rAttributes.StrokeWidth; } @@ -1401,6 +1416,7 @@ namespace cppcanvas pen->customStartCap->SetAttributes(aAttributes); fStart = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customStartCap->polygon, + pen->customStartCap->mbIsFilled, true, aAttributes, rParms, rState); } @@ -1411,6 +1427,7 @@ namespace cppcanvas pen->customEndCap->SetAttributes(aAttributes); fEnd = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customEndCap->polygon, + pen->customEndCap->mbIsFilled, false, aAttributes, rParms, rState); } |