diff options
author | Katarina Behrens <Katarina.Behrens@cib.de> | 2019-05-02 18:24:10 +0200 |
---|---|---|
committer | Christian Lohmaier <lohmaier+LibreOffice@googlemail.com> | 2019-05-04 10:30:58 +0200 |
commit | 7f3b76ab45b70fe8465a432cd82e0d9d2a4c3eb6 (patch) | |
tree | 0ff8ba1151f67541503a7f4440bb73e7976eadb3 | |
parent | tdf#119965 implement tooltip widget style on macos (diff) | |
download | core-7f3b76ab45b70fe8465a432cd82e0d9d2a4c3eb6.tar.gz core-7f3b76ab45b70fe8465a432cd82e0d9d2a4c3eb6.zip |
tdf#120585: use applyColor and make it transparency-aware
An overloaded drawPolyPolygon for zero transparency case used to
exist and it used applyColor to fill cairo path. It was removed
by commit 7034311dce663c895577267110baadbec312d491 and the new
transparency-aware drawPolyPolygon missed cairo_set_operator call
that is present in applyColor. This works OK most of the time
but breaks sometimes when no transparency (~no antialiasing)
is involved.
To fix that add transparency argument to applyColor and use it
where applicable
Change-Id: Ib1b077e38e7f5d30778434d45be67284407a7d16
Reviewed-on: https://gerrit.libreoffice.org/71759
Tested-by: Jenkins
Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
-rw-r--r-- | vcl/headless/svpgdi.cxx | 29 | ||||
-rw-r--r-- | vcl/inc/headless/svpgdi.hxx | 2 |
2 files changed, 8 insertions, 23 deletions
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index 2e29518a7dac..c8f179bd0066 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -550,7 +550,7 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight, cairo_t* cr = getCairoContext(false); clipRegion(cr); - const double fTransparency = (100 - nTransparency) * (1.0/100); + const double fTransparency = nTransparency * (1.0/100); // To make releaseCairoContext work, use empty extents basegfx::B2DRange extents; @@ -559,10 +559,7 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight, if (bHasFill) { - cairo_set_source_rgba(cr, m_aFillColor.GetRed()/255.0, - m_aFillColor.GetGreen()/255.0, - m_aFillColor.GetBlue()/255.0, - fTransparency); + applyColor(cr, m_aFillColor, fTransparency); // set FillDamage extents = getClippedFillDamage(cr); @@ -578,10 +575,7 @@ bool SvpSalGraphics::drawAlphaRect(long nX, long nY, long nWidth, long nHeight, cairo_matrix_init_translate(&aMatrix, 0.5, 0.5); cairo_set_matrix(cr, &aMatrix); - cairo_set_source_rgba(cr, m_aLineColor.GetRed()/255.0, - m_aLineColor.GetGreen()/255.0, - m_aLineColor.GetBlue()/255.0, - fTransparency); + applyColor(cr, m_aLineColor, fTransparency); // expand with possible StrokeDamage extents.expand(getClippedStrokeDamage(cr)); @@ -1450,11 +1444,7 @@ bool SvpSalGraphics::drawPolyPolygon( if (bHasFill) { - cairo_set_source_rgba(cr, m_aFillColor.GetRed()/255.0, - m_aFillColor.GetGreen()/255.0, - m_aFillColor.GetBlue()/255.0, - 1.0-fTransparency); - + applyColor(cr, m_aFillColor, fTransparency); // Get FillDamage (will be extended for LineDamage below) extents = getClippedFillDamage(cr); @@ -1468,12 +1458,7 @@ bool SvpSalGraphics::drawPolyPolygon( cairo_matrix_init_translate(&aMatrix, 0.5, 0.5); cairo_set_matrix(cr, &aMatrix); - // Note: Other methods use applyColor(...) to set the Color. That - // seems to do some more. Maybe it should be used here, too (?) - cairo_set_source_rgba(cr, m_aLineColor.GetRed()/255.0, - m_aLineColor.GetGreen()/255.0, - m_aLineColor.GetBlue()/255.0, - 1.0-fTransparency); + applyColor(cr, m_aLineColor, fTransparency); // expand with possible StrokeDamage extents.expand(getClippedStrokeDamage(cr)); @@ -1489,14 +1474,14 @@ bool SvpSalGraphics::drawPolyPolygon( return true; } -void SvpSalGraphics::applyColor(cairo_t *cr, Color aColor) +void SvpSalGraphics::applyColor(cairo_t *cr, Color aColor, double fTransparency) { if (cairo_surface_get_content(m_pSurface) == CAIRO_CONTENT_COLOR_ALPHA) { cairo_set_source_rgba(cr, aColor.GetRed()/255.0, aColor.GetGreen()/255.0, aColor.GetBlue()/255.0, - 1.0); + 1.0 - fTransparency); } else { diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index 855421d671d3..c33dd9dfb827 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -126,7 +126,7 @@ public: private: void invert(const basegfx::B2DPolygon &rPoly, SalInvert nFlags); - void applyColor(cairo_t *cr, Color rColor); + void applyColor(cairo_t *cr, Color rColor, double fTransparency = 0.0); protected: vcl::Region m_aClipRegion; |