|
 |
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 |
|