kbrown / rpms / libreoffice

Forked from rpms/libreoffice 2 years ago
Clone

Blame SOURCES/0047-EMF-Fill-line-cap-object-if-EmfPlusCustomLineCapData.patch

f0633d
From 812963c5ff6e1c4685eddb830a82a69a3801d820 Mon Sep 17 00:00:00 2001
f0633d
From: =?UTF-8?q?Mat=C3=BA=C5=A1=20Kukan?= <matus.kukan@collabora.com>
f0633d
Date: Fri, 6 Dec 2013 14:40:50 +0100
f0633d
Subject: [PATCH 047/109] EMF+: Fill line cap object if
f0633d
 EmfPlusCustomLineCapDataFillPath is set.
f0633d
MIME-Version: 1.0
f0633d
Content-Type: text/plain; charset=UTF-8
f0633d
Content-Transfer-Encoding: 8bit
f0633d
f0633d
Change-Id: I7b53a8f18e1fb24b1ae0322bdf0980e431a0725f
f0633d
(cherry picked from commit 131f3230d98f24faf57d9404e333cb1fb183345b)
f0633d
Reviewed-on: https://gerrit.libreoffice.org/6960
f0633d
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
f0633d
Tested-by: Caolán McNamara <caolanm@redhat.com>
f0633d
---
f0633d
 cppcanvas/source/inc/implrenderer.hxx    |  2 +-
f0633d
 cppcanvas/source/mtfrenderer/emfplus.cxx | 23 ++++++++++++++++++++---
f0633d
 2 files changed, 21 insertions(+), 4 deletions(-)
f0633d
f0633d
diff --git a/cppcanvas/source/inc/implrenderer.hxx b/cppcanvas/source/inc/implrenderer.hxx
f0633d
index d602945..a6f86e0 100644
f0633d
--- a/cppcanvas/source/inc/implrenderer.hxx
f0633d
+++ b/cppcanvas/source/inc/implrenderer.hxx
f0633d
@@ -284,7 +284,7 @@ static float GetSwapFloat( SvStream& rSt )
f0633d
             /// Render LineCap, like the start or end arrow of a polygon.
f0633d
             /// @return how much we should shorten the original polygon.
f0633d
             double EMFPPlusDrawLineCap(const ::basegfx::B2DPolygon& rPolygon, double fPolyLength,
f0633d
-                    const ::basegfx::B2DPolyPolygon& rLineCap, bool bStart,
f0633d
+                    const ::basegfx::B2DPolyPolygon& rLineCap, bool isFilled, bool bStart,
f0633d
                     const com::sun::star::rendering::StrokeAttributes& rAttributes,
f0633d
                     const ActionFactoryParameters& rParms, OutDevState& rState);
f0633d
 
f0633d
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
f0633d
index 2387934..a11dc8b 100644
f0633d
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
f0633d
+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx
f0633d
@@ -626,6 +626,7 @@ namespace cppcanvas
f0633d
             sal_uInt32 strokeStartCap, strokeEndCap, strokeJoin;
f0633d
             float miterLimit;
f0633d
             basegfx::B2DPolyPolygon polygon;
f0633d
+            bool mbIsFilled;
f0633d
 
f0633d
         public:
f0633d
             EMFPCustomLineCap() : EMFPObject()
f0633d
@@ -652,7 +653,7 @@ namespace cppcanvas
f0633d
                 aAttributes.MiterLimit = miterLimit;
f0633d
             }
f0633d
 
f0633d
-            void ReadPath(SvStream& s, ImplRenderer& rR, bool bClosed)
f0633d
+            void ReadPath(SvStream& s, ImplRenderer& rR, bool bFill)
f0633d
             {
f0633d
                 sal_Int32 pathLength;
f0633d
                 s >> pathLength;
f0633d
@@ -669,7 +670,7 @@ namespace cppcanvas
f0633d
                 path.Read(s, pathFlags, rR);
f0633d
 
f0633d
                 polygon = path.GetPolygon(rR, false);
f0633d
-                polygon.setClosed(bClosed);
f0633d
+                mbIsFilled = bFill;
f0633d
 
f0633d
                 // transformation to convert the path to what LibreOffice
f0633d
                 // expects
f0633d
@@ -1321,7 +1322,7 @@ namespace cppcanvas
f0633d
         }
f0633d
 
f0633d
         double ImplRenderer::EMFPPlusDrawLineCap(const ::basegfx::B2DPolygon& rPolygon, double fPolyLength,
f0633d
-                const ::basegfx::B2DPolyPolygon& rLineCap, bool bStart, const rendering::StrokeAttributes& rAttributes,
f0633d
+                const ::basegfx::B2DPolyPolygon& rLineCap, bool bIsFilled, bool bStart, const rendering::StrokeAttributes& rAttributes,
f0633d
                 const ActionFactoryParameters& rParms, OutDevState& rState)
f0633d
         {
f0633d
             if (!rLineCap.count())
f0633d
@@ -1350,6 +1351,20 @@ namespace cppcanvas
f0633d
                 rParms.mrCurrActionIndex += pAction->getActionCount()-1;
f0633d
             }
f0633d
 
f0633d
+            if (bIsFilled)
f0633d
+            {
f0633d
+                bool bWasFillColorSet = rState.isFillColorSet;
f0633d
+                rState.isFillColorSet = true;
f0633d
+                rState.fillColor = rState.lineColor;
f0633d
+                ActionSharedPtr pAction2(internal::PolyPolyActionFactory::createPolyPolyAction(aArrow, rParms.mrCanvas, rState));
f0633d
+                if (pAction2)
f0633d
+                {
f0633d
+                    maActions.push_back(MtfAction(pAction2, rParms.mrCurrActionIndex));
f0633d
+                    rParms.mrCurrActionIndex += pAction2->getActionCount()-1;
f0633d
+                }
f0633d
+                rState.isFillColorSet = bWasFillColorSet;
f0633d
+            }
f0633d
+
f0633d
             return rAttributes.StrokeWidth;
f0633d
         }
f0633d
 
f0633d
@@ -1404,6 +1419,7 @@ namespace cppcanvas
f0633d
                                 pen->customStartCap->SetAttributes(aAttributes);
f0633d
 
f0633d
                                 fStart = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customStartCap->polygon,
f0633d
+                                        pen->customStartCap->mbIsFilled,
f0633d
                                         true, aAttributes, rParms, rState);
f0633d
                             }
f0633d
 
f0633d
@@ -1414,6 +1430,7 @@ namespace cppcanvas
f0633d
                                 pen->customEndCap->SetAttributes(aAttributes);
f0633d
 
f0633d
                                 fEnd = EMFPPlusDrawLineCap(aPolygon, fPolyLength, pen->customEndCap->polygon,
f0633d
+                                        pen->customEndCap->mbIsFilled,
f0633d
                                         false, aAttributes, rParms, rState);
f0633d
                             }
f0633d
 
f0633d
-- 
f0633d
1.8.4.2
f0633d