vcl/headless/SvpGraphicsBackend.cxx | 57 +++++++++++++++++++++++++++++++++--- vcl/headless/svpgdi.cxx | 55 ---------------------------------- vcl/inc/headless/svpgdi.hxx | 1 3 files changed, 53 insertions(+), 60 deletions(-)
New commits: commit 96b62c331c5c780100de7a5b474af259c8fbb916 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Tue Dec 28 13:09:15 2021 +0900 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Tue Jan 4 06:55:04 2022 +0100 vcl: drawAlphaRect to SvpGraphicsBackend Change-Id: I44f388b6578d4f9e7d0e5b75e17fab534574da1b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127844 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/vcl/headless/SvpGraphicsBackend.cxx b/vcl/headless/SvpGraphicsBackend.cxx index 460d869766c7..71670cb37bd1 100644 --- a/vcl/headless/SvpGraphicsBackend.cxx +++ b/vcl/headless/SvpGraphicsBackend.cxx @@ -486,11 +486,60 @@ bool SvpGraphicsBackend::drawTransformedBitmap(const basegfx::B2DPoint& /*rNull* bool SvpGraphicsBackend::hasFastDrawTransformedBitmap() const { return false; } -bool SvpGraphicsBackend::drawAlphaRect(tools::Long /*nX*/, tools::Long /*nY*/, - tools::Long /*nWidth*/, tools::Long /*nHeight*/, - sal_uInt8 /*nTransparency*/) +bool SvpGraphicsBackend::drawAlphaRect(tools::Long nX, tools::Long nY, tools::Long nWidth, + tools::Long nHeight, sal_uInt8 nTransparency) { - return false; + const bool bHasFill(m_rCairoCommon.m_aFillColor != SALCOLOR_NONE); + const bool bHasLine(m_rCairoCommon.m_aLineColor != SALCOLOR_NONE); + + if (!(bHasFill || bHasLine)) + { + return true; + } + + cairo_t* cr = m_rCairoCommon.getCairoContext(false, getAntiAlias()); + m_rCairoCommon.clipRegion(cr); + + const double fTransparency = nTransparency * (1.0 / 100); + + // To make releaseCairoContext work, use empty extents + basegfx::B2DRange extents; + + if (bHasFill) + { + cairo_rectangle(cr, nX, nY, nWidth, nHeight); + + m_rCairoCommon.applyColor(cr, m_rCairoCommon.m_aFillColor, fTransparency); + + // set FillDamage + extents = getClippedFillDamage(cr); + + cairo_fill(cr); + } + + if (bHasLine) + { + // PixelOffset used: Set PixelOffset as linear transformation + // Note: Was missing here - probably not by purpose (?) + cairo_matrix_t aMatrix; + cairo_matrix_init_translate(&aMatrix, 0.5, 0.5); + cairo_set_matrix(cr, &aMatrix); + + cairo_rectangle(cr, nX, nY, nWidth, nHeight); + + m_rCairoCommon.applyColor(cr, m_rCairoCommon.m_aLineColor, fTransparency); + + // expand with possible StrokeDamage + basegfx::B2DRange stroke_extents = getClippedStrokeDamage(cr); + stroke_extents.transform(basegfx::utils::createTranslateB2DHomMatrix(0.5, 0.5)); + extents.expand(stroke_extents); + + cairo_stroke(cr); + } + + m_rCairoCommon.releaseCairoContext(cr, false, extents); + + return true; } bool SvpGraphicsBackend::drawGradient(const tools::PolyPolygon& rPolyPolygon, diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index eb8edacafbd3..46016e0e3349 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -756,61 +756,6 @@ bool SvpSalGraphics::drawTransformedBitmap( return true; } -bool SvpSalGraphics::drawAlphaRect(tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, sal_uInt8 nTransparency) -{ - const bool bHasFill(m_aCairoCommon.m_aFillColor != SALCOLOR_NONE); - const bool bHasLine(m_aCairoCommon.m_aLineColor != SALCOLOR_NONE); - - if(!(bHasFill || bHasLine)) - { - return true; - } - - cairo_t* cr = m_aCairoCommon.getCairoContext(false, getAntiAlias()); - clipRegion(cr); - - const double fTransparency = nTransparency * (1.0/100); - - // To make releaseCairoContext work, use empty extents - basegfx::B2DRange extents; - - if (bHasFill) - { - cairo_rectangle(cr, nX, nY, nWidth, nHeight); - - m_aCairoCommon.applyColor(cr, m_aCairoCommon.m_aFillColor, fTransparency); - - // set FillDamage - extents = getClippedFillDamage(cr); - - cairo_fill(cr); - } - - if (bHasLine) - { - // PixelOffset used: Set PixelOffset as linear transformation - // Note: Was missing here - probably not by purpose (?) - cairo_matrix_t aMatrix; - cairo_matrix_init_translate(&aMatrix, 0.5, 0.5); - cairo_set_matrix(cr, &aMatrix); - - cairo_rectangle(cr, nX, nY, nWidth, nHeight); - - m_aCairoCommon.applyColor(cr, m_aCairoCommon.m_aLineColor, fTransparency); - - // expand with possible StrokeDamage - basegfx::B2DRange stroke_extents = getClippedStrokeDamage(cr); - stroke_extents.transform(basegfx::utils::createTranslateB2DHomMatrix(0.5, 0.5)); - extents.expand(stroke_extents); - - cairo_stroke(cr); - } - - m_aCairoCommon.releaseCairoContext(cr, false, extents); - - return true; -} - SvpSalGraphics::SvpSalGraphics() : m_aTextRenderImpl(*this) , m_pBackend(new SvpGraphicsBackend(m_aCairoCommon)) diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index d304b355ab88..61decc908563 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -67,7 +67,6 @@ protected: const SalBitmap& rSourceBitmap, const SalBitmap* pAlphaBitmap, double fAlpha) override; - virtual bool drawAlphaRect( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight, sal_uInt8 nTransparency ) override; cairo_t* createTmpCompatibleCairoContext() const;