diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2013-12-06 13:40:50 +0000 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2014-04-23 22:14:44 +0200 |
commit | b8ad8e1e3e072e2740a00389a4fb46cde61010b3 (patch) | |
tree | 9a9eaf377dae8e25fe2905ef12a553eb01da86cb | |
parent | 9991faaded25e9494a02619f053bb04b8aa2ec1a (diff) |
EMF+: Fill line cap object if EmfPlusCustomLineCapDataFillPath is set.
Change-Id: I7b53a8f18e1fb24b1ae0322bdf0980e431a0725f
(cherry picked from commit 131f3230d98f24faf57d9404e333cb1fb183345b)
-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 e3c970711ea0..bd78ee1594b6 100644 --- a/cppcanvas/source/inc/implrenderer.hxx +++ b/cppcanvas/source/inc/implrenderer.hxx @@ -276,7 +276,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 0abad0dd4bde..b4a442c49045 100644 --- a/cppcanvas/source/mtfrenderer/emfplus.cxx +++ b/cppcanvas/source/mtfrenderer/emfplus.cxx @@ -626,6 +626,7 @@ namespace cppcanvas sal_uInt32 strokeStartCap, strokeEndCap, strokeJoin; float miterLimit; basegfx::B2DPolyPolygon polygon; + bool mbIsFilled; public: EMFPCustomLineCap() : EMFPObject() @@ -652,7 +653,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; @@ -669,7 +670,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 @@ -1322,7 +1323,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()) @@ -1351,6 +1352,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; } @@ -1405,6 +1420,7 @@ namespace cppcanvas pen->customStartCap->SetAttributes(aAttributes); fStart = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customStartCap->polygon, + pen->customStartCap->mbIsFilled, true, aAttributes, rParms, rState); } @@ -1415,6 +1431,7 @@ namespace cppcanvas pen->customEndCap->SetAttributes(aAttributes); fEnd = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customEndCap->polygon, + pen->customEndCap->mbIsFilled, false, aAttributes, rParms, rState); } |