vcl/headless/CairoCommon.cxx     |   35 ++++++++++++++++++++++++++
 vcl/headless/svpgdi.cxx          |   51 ++++-----------------------------------
 vcl/inc/headless/CairoCommon.hxx |    4 +++
 vcl/inc/headless/svpgdi.hxx      |    8 +++---
 vcl/unx/generic/gdi/salgdi.cxx   |    6 +++-
 5 files changed, 54 insertions(+), 50 deletions(-)

New commits:
commit 9d895ff47126b4fd95b95c8138bc8fdb8abbf1cc
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Nov 16 22:15:58 2021 +0100
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Thu Dec 30 16:19:48 2021 +0100

    vcl: move applyColor and clipRegion to CairoCommon
    
    Change-Id: I0a207b10017923c4336d49ebc8abd53c78d809ac
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127708
    Tested-by: Tomaž Vajngerl <qui...@gmail.com>
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index f4aea95a1bdd..37a77d866456 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -223,4 +223,39 @@ cairo_t* CairoCommon::createTmpCompatibleCairoContext() 
const
     return cairo_create(target);
 }
 
+void CairoCommon::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 - fTransparency);
+    }
+    else
+    {
+        double fSet = aColor == COL_BLACK ? 1.0 : 0.0;
+        cairo_set_source_rgba(cr, 1, 1, 1, fSet);
+        cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
+    }
+}
+
+void CairoCommon::clipRegion(cairo_t* cr, const vcl::Region& rClipRegion)
+{
+    RectangleVector aRectangles;
+    if (!rClipRegion.IsEmpty())
+    {
+        rClipRegion.GetRegionRectangles(aRectangles);
+    }
+    if (!aRectangles.empty())
+    {
+        for (auto const& rectangle : aRectangles)
+        {
+            cairo_rectangle(cr, rectangle.Left(), rectangle.Top(), 
rectangle.GetWidth(),
+                            rectangle.GetHeight());
+        }
+        cairo_clip(cr);
+    }
+}
+
+void CairoCommon::clipRegion(cairo_t* cr) { CairoCommon::clipRegion(cr, 
m_aClipRegion); }
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index b119a0b749e4..d6c7fd16c17e 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -835,28 +835,6 @@ bool SvpSalGraphics::hasFastDrawTransformedBitmap() const
     return false;
 }
 
-void SvpSalGraphics::clipRegion(cairo_t* cr, const vcl::Region& rClipRegion)
-{
-    RectangleVector aRectangles;
-    if (!rClipRegion.IsEmpty())
-    {
-        rClipRegion.GetRegionRectangles(aRectangles);
-    }
-    if (!aRectangles.empty())
-    {
-        for (auto const& rectangle : aRectangles)
-        {
-            cairo_rectangle(cr, rectangle.Left(), rectangle.Top(), 
rectangle.GetWidth(), rectangle.GetHeight());
-        }
-        cairo_clip(cr);
-    }
-}
-
-void SvpSalGraphics::clipRegion(cairo_t* cr)
-{
-    SvpSalGraphics::clipRegion(cr, m_aCairoCommon.m_aClipRegion);
-}
-
 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);
@@ -879,7 +857,7 @@ bool SvpSalGraphics::drawAlphaRect(tools::Long nX, 
tools::Long nY, tools::Long n
     {
         cairo_rectangle(cr, nX, nY, nWidth, nHeight);
 
-        applyColor(cr, m_aCairoCommon.m_aFillColor, fTransparency);
+        m_aCairoCommon.applyColor(cr, m_aCairoCommon.m_aFillColor, 
fTransparency);
 
         // set FillDamage
         extents = getClippedFillDamage(cr);
@@ -897,7 +875,7 @@ bool SvpSalGraphics::drawAlphaRect(tools::Long nX, 
tools::Long nY, tools::Long n
 
         cairo_rectangle(cr, nX, nY, nWidth, nHeight);
 
-        applyColor(cr, m_aCairoCommon.m_aLineColor, fTransparency);
+        m_aCairoCommon.applyColor(cr, m_aCairoCommon.m_aLineColor, 
fTransparency);
 
         // expand with possible StrokeDamage
         basegfx::B2DRange stroke_extents = getClippedStrokeDamage(cr);
@@ -952,7 +930,7 @@ void SvpSalGraphics::drawPixel( tools::Long nX, tools::Long 
nY, Color aColor )
     clipRegion(cr);
 
     cairo_rectangle(cr, nX, nY, 1, 1);
-    applyColor(cr, aColor, 0.0);
+    m_aCairoCommon.applyColor(cr, aColor, 0.0);
     cairo_fill(cr);
 
     basegfx::B2DRange extents = getClippedFillDamage(cr);
@@ -1271,7 +1249,7 @@ void SvpSalGraphics::drawLine( tools::Long nX1, 
tools::Long nY1, tools::Long nX2
         !getAntiAlias(),
         false);
 
-    applyColor(cr, m_aCairoCommon.m_aLineColor);
+    m_aCairoCommon.applyColor(cr, m_aCairoCommon.m_aLineColor);
 
     basegfx::B2DRange extents = getClippedStrokeDamage(cr);
     extents.transform(basegfx::utils::createTranslateB2DHomMatrix(0.5, 0.5));
@@ -1793,7 +1771,7 @@ bool SvpSalGraphics::drawPolyPolygon(
     {
         add_polygon_path(cr, rPolyPolygon, rObjectToDevice, !getAntiAlias());
 
-        applyColor(cr, m_aCairoCommon.m_aFillColor, fTransparency);
+        m_aCairoCommon.applyColor(cr, m_aCairoCommon.m_aFillColor, 
fTransparency);
         // Get FillDamage (will be extended for LineDamage below)
         extents = getClippedFillDamage(cr);
 
@@ -1809,7 +1787,7 @@ bool SvpSalGraphics::drawPolyPolygon(
 
         add_polygon_path(cr, rPolyPolygon, rObjectToDevice, !getAntiAlias());
 
-        applyColor(cr, m_aCairoCommon.m_aLineColor, fTransparency);
+        m_aCairoCommon.applyColor(cr, m_aCairoCommon.m_aLineColor, 
fTransparency);
 
         // expand with possible StrokeDamage
         basegfx::B2DRange stroke_extents = getClippedStrokeDamage(cr);
@@ -1940,23 +1918,6 @@ bool 
SvpSalGraphics::implDrawGradient(basegfx::B2DPolyPolygon const & rPolyPolyg
     return true;
 }
 
-void SvpSalGraphics::applyColor(cairo_t *cr, Color aColor, double 
fTransparency)
-{
-    if (cairo_surface_get_content(m_aCairoCommon.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 - fTransparency);
-    }
-    else
-    {
-        double fSet = aColor == COL_BLACK ? 1.0 : 0.0;
-        cairo_set_source_rgba(cr, 1, 1, 1, fSet);
-        cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
-    }
-}
-
 void SvpSalGraphics::copyArea( tools::Long nDestX,
                                tools::Long nDestY,
                                tools::Long nSrcX,
diff --git a/vcl/inc/headless/CairoCommon.hxx b/vcl/inc/headless/CairoCommon.hxx
index c817a85de8ca..6911c545e7a1 100644
--- a/vcl/inc/headless/CairoCommon.hxx
+++ b/vcl/inc/headless/CairoCommon.hxx
@@ -110,6 +110,10 @@ struct VCL_DLLPUBLIC CairoCommon
     void releaseCairoContext(cairo_t* cr, bool bXorModeAllowed,
                              const basegfx::B2DRange& rExtents) const;
     cairo_t* createTmpCompatibleCairoContext() const;
+
+    void applyColor(cairo_t* cr, Color rColor, double fTransparency = 0.0);
+    void clipRegion(cairo_t* cr);
+    static void clipRegion(cairo_t* cr, const vcl::Region& rClipRegion);
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx
index 73ec3b175082..8f58ebd89276 100644
--- a/vcl/inc/headless/svpgdi.hxx
+++ b/vcl/inc/headless/svpgdi.hxx
@@ -54,8 +54,6 @@ public:
         return CairoCommon::getDamageKey();
     }
 
-    static void clipRegion(cairo_t* cr, const vcl::Region& rClipRegion);
-
     // need this static version of ::drawPolyLine for usage from
     // vcl/unx/generic/gdi/salgdi.cxx. It gets wrapped by
     // ::drawPolyLine with some added parameters (see there)
@@ -80,7 +78,6 @@ public:
 
 private:
     void invert(const basegfx::B2DPolygon &rPoly, SalInvert nFlags);
-    void applyColor(cairo_t *cr, Color rColor, double fTransparency = 0.0);
 
 protected:
     SvpCairoTextRender                  m_aTextRenderImpl;
@@ -227,7 +224,10 @@ public:
     }
 
     static cairo_surface_t* createCairoSurface(const BitmapBuffer *pBuffer);
-    void                    clipRegion(cairo_t* cr);
+    void clipRegion(cairo_t* cr)
+    {
+        m_aCairoCommon.clipRegion(cr);
+    }
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/unx/generic/gdi/salgdi.cxx b/vcl/unx/generic/gdi/salgdi.cxx
index d65313843155..3b2946e2f18c 100644
--- a/vcl/unx/generic/gdi/salgdi.cxx
+++ b/vcl/unx/generic/gdi/salgdi.cxx
@@ -57,6 +57,10 @@
 #include "cairo_xlib_cairo.hxx"
 #include <cairo-xlib.h>
 
+#if ENABLE_CAIRO_CANVAS
+#include <headless/CairoCommon.hxx>
+#endif
+
 X11SalGraphics::X11SalGraphics():
     m_pFrame(nullptr),
     m_pVDev(nullptr),
@@ -692,7 +696,7 @@ bool X11SalGraphics::drawPolyPolygon(
 #if ENABLE_CAIRO_CANVAS
 void X11SalGraphics::clipRegion(cairo_t* cr)
 {
-    SvpSalGraphics::clipRegion(cr, maClipRegion);
+    CairoCommon::clipRegion(cr, maClipRegion);
 }
 #endif // ENABLE_CAIRO_CANVAS
 

Reply via email to