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

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