Blame SOURCES/0001-rhbz-1589029-impress-not-showing-text-highlight-in-p.patch

27aea6
From 84fd42edf49efd3af6966efb4e326c6fbb37d56f Mon Sep 17 00:00:00 2001
27aea6
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
27aea6
Date: Mon, 11 Jun 2018 09:00:46 +0100
27aea6
Subject: [PATCH] rhbz#1589029 impress not showing text highlight in
27aea6
 presentation mode
27aea6
27aea6
the text hightlighting feature was implemented backed on to the vcl
27aea6
TextFillColor feature. TextFillColor fills the background of the bounds
27aea6
of the text with that color
27aea6
27aea6
Likely either the same problem or similar as tdf#93789
27aea6
27aea6
Change-Id: Iace62cedc49e5f5844ac35d3caa23249b6cb4bc1
27aea6
---
27aea6
 cppcanvas/source/mtfrenderer/emfplus.cxx      |   2 +
27aea6
 cppcanvas/source/mtfrenderer/implrenderer.cxx |   6 +
27aea6
 cppcanvas/source/mtfrenderer/textaction.cxx   | 131 +++++++++++++++---
27aea6
 cppcanvas/source/mtfrenderer/textaction.hxx   |   1 +
27aea6
 4 files changed, 119 insertions(+), 21 deletions(-)
27aea6
27aea6
diff --git a/cppcanvas/source/mtfrenderer/emfplus.cxx b/cppcanvas/source/mtfrenderer/emfplus.cxx
27aea6
index 1da733bd9f73..9b5fae31d584 100644
27aea6
--- a/cppcanvas/source/mtfrenderer/emfplus.cxx
27aea6
+++ b/cppcanvas/source/mtfrenderer/emfplus.cxx
27aea6
@@ -1318,6 +1318,7 @@ namespace cppcanvas
27aea6
                                         ::Color(),
27aea6
                                         ::Size(),
27aea6
                                         ::Color(),
27aea6
+                                        ::Color(),
27aea6
                                         text,
27aea6
                                         0,
27aea6
                                         stringLength,
27aea6
@@ -1633,6 +1634,7 @@ namespace cppcanvas
27aea6
                                         ::Color(),
27aea6
                                         ::Size(),
27aea6
                                         ::Color(),
27aea6
+                                        ::Color(),
27aea6
                                         text,
27aea6
                                         0,
27aea6
                                         glyphsCount,
27aea6
diff --git a/cppcanvas/source/mtfrenderer/implrenderer.cxx b/cppcanvas/source/mtfrenderer/implrenderer.cxx
27aea6
index ad9098defc69..38694caec091 100644
27aea6
--- a/cppcanvas/source/mtfrenderer/implrenderer.cxx
27aea6
+++ b/cppcanvas/source/mtfrenderer/implrenderer.cxx
27aea6
@@ -876,6 +876,7 @@ namespace cppcanvas
27aea6
             // TODO(F2): implement all text effects
27aea6
             // if( rState.textAlignment );             // TODO(F2): NYI
27aea6
 
27aea6
+            ::Color aTextFillColor( COL_AUTO );
27aea6
             ::Color aShadowColor( COL_AUTO );
27aea6
             ::Color aReliefColor( COL_AUTO );
27aea6
             ::Size  aShadowOffset;
27aea6
@@ -941,6 +942,9 @@ namespace cppcanvas
27aea6
                 aReliefColor.SetTransparency( aTextColor.GetTransparency() );
27aea6
             }
27aea6
 
27aea6
+            if (rState.isTextFillColorSet)
27aea6
+                aTextFillColor = vcl::unotools::doubleSequenceToColor(rState.textFillColor, xColorSpace);
27aea6
+
27aea6
             // create the actual text action
27aea6
             ActionSharedPtr pTextAction(
27aea6
                 TextActionFactory::createTextAction(
27aea6
@@ -949,6 +953,7 @@ namespace cppcanvas
27aea6
                     aReliefColor,
27aea6
                     aShadowOffset,
27aea6
                     aShadowColor,
27aea6
+                    aTextFillColor,
27aea6
                     rString,
27aea6
                     nIndex,
27aea6
                     nLength,
27aea6
@@ -1015,6 +1020,7 @@ namespace cppcanvas
27aea6
                             aReliefColor,
27aea6
                             aShadowOffset,
27aea6
                             aShadowColor,
27aea6
+                            aTextFillColor,
27aea6
                             aStrikeoutText,
27aea6
                             nStartPos,
27aea6
                             aStrikeoutText.getLength(),
27aea6
diff --git a/cppcanvas/source/mtfrenderer/textaction.cxx b/cppcanvas/source/mtfrenderer/textaction.cxx
27aea6
index 51554a2e3595..0c5ef91354e3 100644
27aea6
--- a/cppcanvas/source/mtfrenderer/textaction.cxx
27aea6
+++ b/cppcanvas/source/mtfrenderer/textaction.cxx
27aea6
@@ -472,7 +472,7 @@ namespace cppcanvas
27aea6
                 virtual ~TextRenderer() {}
27aea6
 
27aea6
                 /// Render text with given RenderState
27aea6
-                virtual bool operator()( const rendering::RenderState& rRenderState ) const = 0;
27aea6
+                virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const = 0;
27aea6
             };
27aea6
 
27aea6
             /** Render effect text.
27aea6
@@ -489,7 +489,8 @@ namespace cppcanvas
27aea6
                                    const ::Color&                               rShadowColor,
27aea6
                                    const ::basegfx::B2DSize&                    rShadowOffset,
27aea6
                                    const ::Color&                               rReliefColor,
27aea6
-                                   const ::basegfx::B2DSize&                    rReliefOffset )
27aea6
+                                   const ::basegfx::B2DSize&                    rReliefOffset,
27aea6
+                                   const ::Color&                               rTextFillColor )
27aea6
             {
27aea6
                 ::Color aEmptyColor( COL_AUTO );
27aea6
                 uno::Reference<rendering::XColorSpace> xColorSpace(
27aea6
@@ -510,7 +511,7 @@ namespace cppcanvas
27aea6
                         vcl::unotools::colorToDoubleSequence( rShadowColor,
27aea6
                                                                 xColorSpace );
27aea6
 
27aea6
-                    rRenderer( aShadowState );
27aea6
+                    rRenderer( aShadowState, rTextFillColor );
27aea6
                 }
27aea6
 
27aea6
                 // draw relief text, if enabled
27aea6
@@ -528,11 +529,11 @@ namespace cppcanvas
27aea6
                         vcl::unotools::colorToDoubleSequence( rReliefColor,
27aea6
                                                                 xColorSpace );
27aea6
 
27aea6
-                    rRenderer( aReliefState );
27aea6
+                    rRenderer( aReliefState, rTextFillColor );
27aea6
                 }
27aea6
 
27aea6
                 // draw normal text
27aea6
-                rRenderer( rRenderState );
27aea6
+                rRenderer( rRenderState, rTextFillColor );
27aea6
 
27aea6
                 return true;
27aea6
             }
27aea6
@@ -803,7 +804,10 @@ namespace cppcanvas
27aea6
 
27aea6
             private:
27aea6
                 /// Interface TextRenderer
27aea6
-                virtual bool operator()( const rendering::RenderState& rRenderState ) const override;
27aea6
+                virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override;
27aea6
+
27aea6
+                geometry::RealRectangle2D queryTextBounds() const;
27aea6
+                css::uno::Reference<css::rendering::XPolyPolygon2D> queryTextBounds(const uno::Reference<rendering::XCanvas>& rCanvas) const;
27aea6
 
27aea6
                 // TODO(P2): This is potentially a real mass object
27aea6
                 // (every character might be a separate TextAction),
27aea6
@@ -824,6 +828,7 @@ namespace cppcanvas
27aea6
                 const ::Color                               maReliefColor;
27aea6
                 const ::basegfx::B2DSize                    maShadowOffset;
27aea6
                 const ::Color                               maShadowColor;
27aea6
+                const ::Color                               maTextFillColor;
27aea6
                 const sal_Int8                              maTextDirection;
27aea6
             };
27aea6
 
27aea6
@@ -906,7 +911,7 @@ namespace cppcanvas
27aea6
                                   "::cppcanvas::internal::EffectTextAction(): Invalid font or lines" );
27aea6
             }
27aea6
 
27aea6
-            bool EffectTextAction::operator()( const rendering::RenderState& rRenderState ) const
27aea6
+            bool EffectTextAction::operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const
27aea6
             {
27aea6
                 const rendering::ViewState& rViewState( mpCanvas->getViewState() );
27aea6
                 const uno::Reference< rendering::XCanvas >& rCanvas( mpCanvas->getUNOCanvas() );
27aea6
@@ -915,6 +920,18 @@ namespace cppcanvas
27aea6
                                           rViewState,
27aea6
                                           rRenderState );
27aea6
 
27aea6
+                //rhbz#1589029 non-transparent text fill background support
27aea6
+                ::Color aEmptyColor( COL_AUTO );
27aea6
+                if (rTextFillColor != aEmptyColor)
27aea6
+                {
27aea6
+                    rendering::RenderState aLocalState( rRenderState );
27aea6
+                    aLocalState.DeviceColor = vcl::unotools::colorToDoubleSequence(
27aea6
+                        rTextFillColor, rCanvas->getDevice()->getDeviceColorSpace());
27aea6
+                    auto xTextBounds = queryTextBounds(rCanvas);
27aea6
+                    // background of text
27aea6
+                    rCanvas->fillPolyPolygon(xTextBounds, rViewState, aLocalState);
27aea6
+                }
27aea6
+
27aea6
                 rCanvas->drawText( maStringContext, mxFont,
27aea6
                                    rViewState,
27aea6
                                    rRenderState,
27aea6
@@ -938,7 +955,8 @@ namespace cppcanvas
27aea6
                                          maShadowColor,
27aea6
                                          maShadowOffset,
27aea6
                                          maReliefColor,
27aea6
-                                         maReliefOffset );
27aea6
+                                         maReliefOffset,
27aea6
+                                         maTextFillColor);
27aea6
             }
27aea6
 
27aea6
             bool EffectTextAction::renderSubset( const ::basegfx::B2DHomMatrix&   rTransformation,
27aea6
@@ -953,7 +971,7 @@ namespace cppcanvas
27aea6
                 return render( rTransformation );
27aea6
             }
27aea6
 
27aea6
-            ::basegfx::B2DRange EffectTextAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const
27aea6
+            geometry::RealRectangle2D EffectTextAction::queryTextBounds() const
27aea6
             {
27aea6
                 // create XTextLayout, to have the
27aea6
                 // XTextLayout::queryTextBounds() method available
27aea6
@@ -963,11 +981,24 @@ namespace cppcanvas
27aea6
                         maTextDirection,
27aea6
                         0 ) );
27aea6
 
27aea6
+                return xTextLayout->queryTextBounds();
27aea6
+            }
27aea6
+
27aea6
+            css::uno::Reference<css::rendering::XPolyPolygon2D> EffectTextAction::queryTextBounds(const uno::Reference<rendering::XCanvas>& rCanvas) const
27aea6
+            {
27aea6
+                auto aTextBounds = queryTextBounds();
27aea6
+                auto aB2DBounds = ::basegfx::unotools::b2DRectangleFromRealRectangle2D(aTextBounds);
27aea6
+                auto aTextBoundsPoly = ::basegfx::tools::createPolygonFromRect(aB2DBounds);
27aea6
+                return ::basegfx::unotools::xPolyPolygonFromB2DPolygon(rCanvas->getDevice(), aTextBoundsPoly);
27aea6
+            }
27aea6
+
27aea6
+            ::basegfx::B2DRange EffectTextAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const
27aea6
+            {
27aea6
                 rendering::RenderState aLocalState( maState );
27aea6
                 ::canvas::tools::prependToRenderState(aLocalState, rTransformation);
27aea6
 
27aea6
                 return calcEffectTextBounds( ::basegfx::unotools::b2DRectangleFromRealRectangle2D(
27aea6
-                                                 xTextLayout->queryTextBounds() ),
27aea6
+                                                 queryTextBounds() ),
27aea6
                                              ::basegfx::B2DRange( 0,0,
27aea6
                                                                   maLinesOverallSize.getX(),
27aea6
                                                                   maLinesOverallSize.getY() ),
27aea6
@@ -1188,6 +1219,7 @@ namespace cppcanvas
27aea6
                                        const ::Color&                   rReliefColor,
27aea6
                                        const ::basegfx::B2DSize&        rShadowOffset,
27aea6
                                        const ::Color&                   rShadowColor,
27aea6
+                                       const ::Color&                   rTextFillColor,
27aea6
                                        const OUString&           rText,
27aea6
                                        sal_Int32                        nStartPos,
27aea6
                                        sal_Int32                        nLen,
27aea6
@@ -1200,6 +1232,7 @@ namespace cppcanvas
27aea6
                                        const ::Color&                   rReliefColor,
27aea6
                                        const ::basegfx::B2DSize&        rShadowOffset,
27aea6
                                        const ::Color&                   rShadowColor,
27aea6
+                                       const ::Color&                   rTextFillColor,
27aea6
                                        const OUString&           rText,
27aea6
                                        sal_Int32                        nStartPos,
27aea6
                                        sal_Int32                        nLen,
27aea6
@@ -1224,7 +1257,9 @@ namespace cppcanvas
27aea6
 
27aea6
             private:
27aea6
                 // TextRenderer interface
27aea6
-                virtual bool operator()( const rendering::RenderState& rRenderState ) const override;
27aea6
+                virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override;
27aea6
+
27aea6
+                css::uno::Reference<css::rendering::XPolyPolygon2D> queryTextBounds(const uno::Reference<rendering::XCanvas>& rCanvas) const;
27aea6
 
27aea6
                 // TODO(P2): This is potentially a real mass object
27aea6
                 // (every character might be a separate TextAction),
27aea6
@@ -1243,6 +1278,7 @@ namespace cppcanvas
27aea6
                 const ::Color                                   maReliefColor;
27aea6
                 const ::basegfx::B2DSize                        maShadowOffset;
27aea6
                 const ::Color                                   maShadowColor;
27aea6
+                const ::Color                                   maTextFillColor;
27aea6
             };
27aea6
 
27aea6
             EffectTextArrayAction::EffectTextArrayAction( const ::basegfx::B2DPoint&        rStartPoint,
27aea6
@@ -1250,6 +1286,7 @@ namespace cppcanvas
27aea6
                                                           const ::Color&                    rReliefColor,
27aea6
                                                           const ::basegfx::B2DSize&         rShadowOffset,
27aea6
                                                           const ::Color&                    rShadowColor,
27aea6
+                                                          const ::Color&                    rTextFillColor,
27aea6
                                                           const OUString&            rText,
27aea6
                                                           sal_Int32                         nStartPos,
27aea6
                                                           sal_Int32                         nLen,
27aea6
@@ -1266,7 +1303,8 @@ namespace cppcanvas
27aea6
                 maReliefOffset( rReliefOffset ),
27aea6
                 maReliefColor( rReliefColor ),
27aea6
                 maShadowOffset( rShadowOffset ),
27aea6
-                maShadowColor( rShadowColor )
27aea6
+                maShadowColor( rShadowColor ),
27aea6
+                maTextFillColor( rTextFillColor )
27aea6
             {
27aea6
                 initEffectLinePolyPolygon( maLinesOverallSize,
27aea6
                                            mxTextLines,
27aea6
@@ -1290,6 +1328,7 @@ namespace cppcanvas
27aea6
                                                           const ::Color&                    rReliefColor,
27aea6
                                                           const ::basegfx::B2DSize&         rShadowOffset,
27aea6
                                                           const ::Color&                    rShadowColor,
27aea6
+                                                          const ::Color&                    rTextFillColor,
27aea6
                                                           const OUString&            rText,
27aea6
                                                           sal_Int32                         nStartPos,
27aea6
                                                           sal_Int32                         nLen,
27aea6
@@ -1307,7 +1346,8 @@ namespace cppcanvas
27aea6
                 maReliefOffset( rReliefOffset ),
27aea6
                 maReliefColor( rReliefColor ),
27aea6
                 maShadowOffset( rShadowOffset ),
27aea6
-                maShadowColor( rShadowColor )
27aea6
+                maShadowColor( rShadowColor ),
27aea6
+                maTextFillColor( rTextFillColor )
27aea6
             {
27aea6
                 initEffectLinePolyPolygon( maLinesOverallSize,
27aea6
                                            mxTextLines,
27aea6
@@ -1327,7 +1367,15 @@ namespace cppcanvas
27aea6
                                  &rTextTransform );
27aea6
             }
27aea6
 
27aea6
-            bool EffectTextArrayAction::operator()( const rendering::RenderState& rRenderState ) const
27aea6
+            css::uno::Reference<css::rendering::XPolyPolygon2D> EffectTextArrayAction::queryTextBounds(const uno::Reference<rendering::XCanvas>& rCanvas) const
27aea6
+            {
27aea6
+                const geometry::RealRectangle2D aTextBounds(mxTextLayout->queryTextBounds());
27aea6
+                auto aB2DBounds = ::basegfx::unotools::b2DRectangleFromRealRectangle2D(aTextBounds);
27aea6
+                auto aTextBoundsPoly = ::basegfx::tools::createPolygonFromRect(aB2DBounds);
27aea6
+                return ::basegfx::unotools::xPolyPolygonFromB2DPolygon(rCanvas->getDevice(), aTextBoundsPoly);
27aea6
+            }
27aea6
+
27aea6
+            bool EffectTextArrayAction::operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const
27aea6
             {
27aea6
                 const rendering::ViewState& rViewState( mpCanvas->getViewState() );
27aea6
                 const uno::Reference< rendering::XCanvas >& rCanvas( mpCanvas->getUNOCanvas() );
27aea6
@@ -1336,6 +1384,18 @@ namespace cppcanvas
27aea6
                                           rViewState,
27aea6
                                           rRenderState );
27aea6
 
27aea6
+                //rhbz#1589029 non-transparent text fill background support
27aea6
+                ::Color aEmptyColor( COL_AUTO );
27aea6
+                if (rTextFillColor != aEmptyColor)
27aea6
+                {
27aea6
+                    rendering::RenderState aLocalState(rRenderState);
27aea6
+                    aLocalState.DeviceColor = vcl::unotools::colorToDoubleSequence(
27aea6
+                        rTextFillColor, rCanvas->getDevice()->getDeviceColorSpace());
27aea6
+                    auto xTextBounds = queryTextBounds(rCanvas);
27aea6
+                    // background of text
27aea6
+                    rCanvas->fillPolyPolygon(xTextBounds, rViewState, aLocalState);
27aea6
+                }
27aea6
+
27aea6
                 rCanvas->drawTextLayout( mxTextLayout,
27aea6
                                          rViewState,
27aea6
                                          rRenderState );
27aea6
@@ -1358,7 +1418,8 @@ namespace cppcanvas
27aea6
                                          maShadowColor,
27aea6
                                          maShadowOffset,
27aea6
                                          maReliefColor,
27aea6
-                                         maReliefOffset );
27aea6
+                                         maReliefOffset,
27aea6
+                                         maTextFillColor);
27aea6
             }
27aea6
 
27aea6
             class EffectTextArrayRenderHelper : public TextRenderer
27aea6
@@ -1376,12 +1437,24 @@ namespace cppcanvas
27aea6
                 }
27aea6
 
27aea6
                 // TextRenderer interface
27aea6
-                virtual bool operator()( const rendering::RenderState& rRenderState ) const override
27aea6
+                virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override
27aea6
                 {
27aea6
                     mrCanvas->fillPolyPolygon( mrLinePolygon,
27aea6
                                                mrViewState,
27aea6
                                                rRenderState );
27aea6
 
27aea6
+                    //rhbz#1589029 non-transparent text fill background support
27aea6
+                    ::Color aEmptyColor( COL_AUTO );
27aea6
+                    if (rTextFillColor != aEmptyColor)
27aea6
+                    {
27aea6
+                        rendering::RenderState aLocalState(rRenderState);
27aea6
+                        aLocalState.DeviceColor = vcl::unotools::colorToDoubleSequence(
27aea6
+                            rTextFillColor, mrCanvas->getDevice()->getDeviceColorSpace());
27aea6
+                        auto xTextBounds = queryTextBounds();
27aea6
+                        // background of text
27aea6
+                        mrCanvas->fillPolyPolygon(xTextBounds, mrViewState, aLocalState);
27aea6
+                    }
27aea6
+
27aea6
                     mrCanvas->drawTextLayout( mrTextLayout,
27aea6
                                               mrViewState,
27aea6
                                               rRenderState );
27aea6
@@ -1390,6 +1463,15 @@ namespace cppcanvas
27aea6
                 }
27aea6
 
27aea6
             private:
27aea6
+
27aea6
+                css::uno::Reference<css::rendering::XPolyPolygon2D> queryTextBounds() const
27aea6
+                {
27aea6
+                    const geometry::RealRectangle2D aTextBounds(mrTextLayout->queryTextBounds());
27aea6
+                    auto aB2DBounds = ::basegfx::unotools::b2DRectangleFromRealRectangle2D(aTextBounds);
27aea6
+                    auto aTextBoundsPoly = ::basegfx::tools::createPolygonFromRect(aB2DBounds);
27aea6
+                    return ::basegfx::unotools::xPolyPolygonFromB2DPolygon(mrCanvas->getDevice(), aTextBoundsPoly);
27aea6
+                }
27aea6
+
27aea6
                 const uno::Reference< rendering::XCanvas >&         mrCanvas;
27aea6
                 const uno::Reference< rendering::XTextLayout >&     mrTextLayout;
27aea6
                 const uno::Reference< rendering::XPolyPolygon2D >&  mrLinePolygon;
27aea6
@@ -1448,7 +1530,8 @@ namespace cppcanvas
27aea6
                     maShadowColor,
27aea6
                     maShadowOffset,
27aea6
                     maReliefColor,
27aea6
-                    maReliefOffset );
27aea6
+                    maReliefOffset,
27aea6
+                    maTextFillColor);
27aea6
             }
27aea6
 
27aea6
             ::basegfx::B2DRange EffectTextArrayAction::getBounds( const ::basegfx::B2DHomMatrix& rTransformation ) const
27aea6
@@ -1560,7 +1643,7 @@ namespace cppcanvas
27aea6
 
27aea6
             private:
27aea6
                 // TextRenderer interface
27aea6
-                virtual bool operator()( const rendering::RenderState& rRenderState ) const override;
27aea6
+                virtual bool operator()( const rendering::RenderState& rRenderState, const ::Color& rTextFillColor ) const override;
27aea6
 
27aea6
                 // TODO(P2): This is potentially a real mass object
27aea6
                 // (every character might be a separate TextAction),
27aea6
@@ -1584,6 +1667,7 @@ namespace cppcanvas
27aea6
                 const ::Color                                       maReliefColor;
27aea6
                 const ::basegfx::B2DSize                            maShadowOffset;
27aea6
                 const ::Color                                       maShadowColor;
27aea6
+                const ::Color                                       maTextFillColor;
27aea6
             };
27aea6
 
27aea6
             double calcOutlineWidth( const OutDevState& rState,
27aea6
@@ -1682,7 +1766,7 @@ namespace cppcanvas
27aea6
                       rTextTransform );
27aea6
             }
27aea6
 
27aea6
-            bool OutlineAction::operator()( const rendering::RenderState& rRenderState ) const
27aea6
+            bool OutlineAction::operator()( const rendering::RenderState& rRenderState, const ::Color& /*rTextFillColor*/ ) const
27aea6
             {
27aea6
                 const rendering::ViewState&                 rViewState( mpCanvas->getViewState() );
27aea6
                 const uno::Reference< rendering::XCanvas >& rCanvas( mpCanvas->getUNOCanvas() );
27aea6
@@ -1739,7 +1823,8 @@ namespace cppcanvas
27aea6
                                          maShadowColor,
27aea6
                                          maShadowOffset,
27aea6
                                          maReliefColor,
27aea6
-                                         maReliefOffset );
27aea6
+                                         maReliefOffset,
27aea6
+                                         maTextFillColor);
27aea6
             }
27aea6
 
27aea6
 #if 0 // see #if'ed out use in OutlineAction::renderSubset below:
27aea6
@@ -2048,6 +2133,7 @@ namespace cppcanvas
27aea6
                                                              const ::Color&                 rReliefColor,
27aea6
                                                              const ::Size&                  rShadowOffset,
27aea6
                                                              const ::Color&                 rShadowColor,
27aea6
+                                                             const ::Color&                 rTextFillColor,
27aea6
                                                              const OUString&                rText,
27aea6
                                                              sal_Int32                      nStartPos,
27aea6
                                                              sal_Int32                      nLen,
27aea6
@@ -2181,7 +2267,8 @@ namespace cppcanvas
27aea6
                     !rState.textUnderlineStyle &&
27aea6
                     !rState.textStrikeoutStyle &&
27aea6
                     rReliefColor == aEmptyColor &&
27aea6
-                    rShadowColor == aEmptyColor )
27aea6
+                    rShadowColor == aEmptyColor &&
27aea6
+                    rTextFillColor == aEmptyColor )
27aea6
                 {
27aea6
                     // nope
27aea6
                     if( rParms.maTextTransformation.is_initialized() )
27aea6
@@ -2214,6 +2301,7 @@ namespace cppcanvas
27aea6
                                                     rReliefColor,
27aea6
                                                     aShadowOffset,
27aea6
                                                     rShadowColor,
27aea6
+                                                    rTextFillColor,
27aea6
                                                     rText,
27aea6
                                                     nStartPos,
27aea6
                                                     nLen,
27aea6
@@ -2229,6 +2317,7 @@ namespace cppcanvas
27aea6
                                                     rReliefColor,
27aea6
                                                     aShadowOffset,
27aea6
                                                     rShadowColor,
27aea6
+                                                    rTextFillColor,
27aea6
                                                     rText,
27aea6
                                                     nStartPos,
27aea6
                                                     nLen,
27aea6
diff --git a/cppcanvas/source/mtfrenderer/textaction.hxx b/cppcanvas/source/mtfrenderer/textaction.hxx
27aea6
index 2c0b240fc847..1770470f9fff 100644
27aea6
--- a/cppcanvas/source/mtfrenderer/textaction.hxx
27aea6
+++ b/cppcanvas/source/mtfrenderer/textaction.hxx
27aea6
@@ -66,6 +66,7 @@ namespace cppcanvas
27aea6
                                                      const ::Color&                 rReliefColor,
27aea6
                                                      const ::Size&                  rShadowOffset,
27aea6
                                                      const ::Color&                 rShadowColor,
27aea6
+                                                     const ::Color&                 rTextFillColor,
27aea6
                                                      const OUString&                rText,
27aea6
                                                      sal_Int32                      nStartPos,
27aea6
                                                      sal_Int32                      nLen,
27aea6
-- 
27aea6
2.17.0
27aea6