From 812963c5ff6e1c4685eddb830a82a69a3801d820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= Date: Fri, 6 Dec 2013 14:40:50 +0100 Subject: [PATCH 047/109] EMF+: Fill line cap object if EmfPlusCustomLineCapDataFillPath is set. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I7b53a8f18e1fb24b1ae0322bdf0980e431a0725f (cherry picked from commit 131f3230d98f24faf57d9404e333cb1fb183345b) Reviewed-on: https://gerrit.libreoffice.org/6960 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- cppcanvas/source/inc/implrenderer.hxx | 2 +- 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 d602945..a6f86e0 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 2387934..a11dc8b 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 @@ -1321,7 +1322,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()) @@ -1350,6 +1351,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; } @@ -1404,6 +1419,7 @@ namespace cppcanvas pen->customStartCap->SetAttributes(aAttributes); fStart = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customStartCap->polygon, + pen->customStartCap->mbIsFilled, true, aAttributes, rParms, rState); } @@ -1414,6 +1430,7 @@ namespace cppcanvas pen->customEndCap->SetAttributes(aAttributes); fEnd = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customEndCap->polygon, + pen->customEndCap->mbIsFilled, false, aAttributes, rParms, rState); } -- 1.8.4.2