vcl/headless/CairoCommon.cxx        |   85 ++++++++++++++++++++++++++
 vcl/headless/SvpGraphicsBackend.cxx |   18 ++++-
 vcl/headless/svpgdi.cxx             |  115 ------------------------------------
 vcl/inc/headless/CairoCommon.hxx    |    2 
 vcl/inc/headless/svpgdi.hxx         |    8 --
 5 files changed, 101 insertions(+), 127 deletions(-)

New commits:
commit b4164ec443650f77aa472fc0d06e6dba716e2d28
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Dec 28 10:04:04 2021 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Jan 3 10:44:19 2022 +0100

    vcl: (re)move drawEPS to SvpGraphicsBackend
    
    Change-Id: Ic5936a0d5bfe566d75532ccff52f25bf502019ae
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127827
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index c676a0fea72c..642382ed57b2 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -1108,11 +1108,6 @@ std::shared_ptr<SalBitmap> SvpSalGraphics::getBitmap( 
tools::Long nX, tools::Lon
     return pBitmap;
 }
 
-bool SvpSalGraphics::drawEPS( tools::Long, tools::Long, tools::Long, 
tools::Long, void*, sal_uInt32 )
-{
-    return false;
-}
-
 namespace
 {
     bool isCairoCompatible(const BitmapBuffer* pBuffer)
diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx
index eeac78d50a07..9db0f86cc65b 100644
--- a/vcl/inc/headless/svpgdi.hxx
+++ b/vcl/inc/headless/svpgdi.hxx
@@ -138,8 +138,6 @@ public:
                                       Color nMaskColor ) override;
     virtual std::shared_ptr<SalBitmap> getBitmap( tools::Long nX, tools::Long 
nY, tools::Long nWidth, tools::Long nHeight ) override;
 
-    virtual bool        drawEPS( tools::Long nX, tools::Long nY, tools::Long 
nWidth, tools::Long nHeight, void* pPtr, sal_uInt32 nSize ) override;
-
     virtual SystemGraphicsData GetGraphicsData() const override;
 
 #if ENABLE_CAIRO_CANVAS
commit d1c813809a9f21fc670e759828922c2f11d972dc
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Dec 28 10:01:22 2021 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Mon Jan 3 10:44:03 2022 +0100

    vcl: move invert to SvpGraphicsBackend and CairoCommon
    
    Common invert to CairoCommon, 2 invert members on the interface
    to SvpGraphicsBackend calling the common invert call.
    
    Change-Id: I2fada75cc0d730f0708ae7ca934a51e1d17cef1c
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127826
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index 7161feb7f29f..79baec8ff497 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -25,6 +25,7 @@
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
 #include <basegfx/polygon/b2dpolygontools.hxx>
+#include <sal/log.hxx>
 
 void dl_cairo_surface_set_device_scale(cairo_surface_t* surface, double 
x_scale, double y_scale)
 {
@@ -833,4 +834,88 @@ bool CairoCommon::drawPolyLine(cairo_t* cr, 
basegfx::B2DRange* pExtents, const C
     return true;
 }
 
+namespace
+{
+cairo_pattern_t* create_stipple()
+{
+    static unsigned char data[16] = { 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 
0x00, 0x00,
+                                      0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 
0xFF, 0xFF };
+    cairo_surface_t* surface = cairo_image_surface_create_for_data(data, 
CAIRO_FORMAT_A8, 4, 4, 4);
+    cairo_pattern_t* pattern = cairo_pattern_create_for_surface(surface);
+    cairo_surface_destroy(surface);
+    cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
+    cairo_pattern_set_filter(pattern, CAIRO_FILTER_NEAREST);
+    return pattern;
+}
+}
+
+void CairoCommon::invert(const basegfx::B2DPolygon& rPoly, SalInvert nFlags, 
bool bAntiAlias)
+{
+    cairo_t* cr = getCairoContext(false, bAntiAlias);
+    clipRegion(cr);
+
+    // To make releaseCairoContext work, use empty extents
+    basegfx::B2DRange extents;
+
+    AddPolygonToPath(cr, rPoly, basegfx::B2DHomMatrix(), !bAntiAlias, false);
+
+    cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+
+    if (cairo_version() >= CAIRO_VERSION_ENCODE(1, 10, 0))
+    {
+        cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE);
+    }
+    else
+    {
+        SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, archaic cairo");
+    }
+
+    if (nFlags & SalInvert::TrackFrame)
+    {
+        cairo_set_line_width(cr, 2.0);
+        const double dashLengths[2] = { 4.0, 4.0 };
+        cairo_set_dash(cr, dashLengths, 2, 0);
+
+        extents = getClippedStrokeDamage(cr);
+        //see tdf#106577 under wayland, some pixel droppings seen, maybe we're
+        //out by one somewhere, or cairo_stroke_extents is confused by
+        //dashes/line width
+        if (!extents.isEmpty())
+        {
+            extents.grow(1);
+        }
+
+        cairo_stroke(cr);
+    }
+    else
+    {
+        extents = getClippedFillDamage(cr);
+
+        cairo_clip(cr);
+
+        if (nFlags & SalInvert::N50)
+        {
+            cairo_pattern_t* pattern = create_stipple();
+            cairo_surface_t* surface = cairo_surface_create_similar(
+                m_pSurface, cairo_surface_get_content(m_pSurface), 
extents.getWidth() * m_fScale,
+                extents.getHeight() * m_fScale);
+
+            dl_cairo_surface_set_device_scale(surface, m_fScale, m_fScale);
+            cairo_t* stipple_cr = cairo_create(surface);
+            cairo_set_source_rgb(stipple_cr, 1.0, 1.0, 1.0);
+            cairo_mask(stipple_cr, pattern);
+            cairo_pattern_destroy(pattern);
+            cairo_destroy(stipple_cr);
+            cairo_mask_surface(cr, surface, extents.getMinX(), 
extents.getMinY());
+            cairo_surface_destroy(surface);
+        }
+        else
+        {
+            cairo_paint(cr);
+        }
+    }
+
+    releaseCairoContext(cr, false, extents);
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/headless/SvpGraphicsBackend.cxx 
b/vcl/headless/SvpGraphicsBackend.cxx
index d5dd2fe48b27..6a50ca17353c 100644
--- a/vcl/headless/SvpGraphicsBackend.cxx
+++ b/vcl/headless/SvpGraphicsBackend.cxx
@@ -412,14 +412,24 @@ Color SvpGraphicsBackend::getPixel(tools::Long nX, 
tools::Long nY)
     return aColor;
 }
 
-void SvpGraphicsBackend::invert(tools::Long /*nX*/, tools::Long /*nY*/, 
tools::Long /*nWidth*/,
-                                tools::Long /*nHeight*/, SalInvert /*nFlags*/)
+void SvpGraphicsBackend::invert(tools::Long nX, tools::Long nY, tools::Long 
nWidth,
+                                tools::Long nHeight, SalInvert nFlags)
 {
+    basegfx::B2DPolygon aRect = basegfx::utils::createPolygonFromRect(
+        basegfx::B2DRectangle(nX, nY, nX + nWidth, nY + nHeight));
+
+    m_rCairoCommon.invert(aRect, nFlags, getAntiAlias());
 }
 
-void SvpGraphicsBackend::invert(sal_uInt32 /*nPoints*/, const Point* 
/*pPtAry*/,
-                                SalInvert /*nFlags*/)
+void SvpGraphicsBackend::invert(sal_uInt32 nPoints, const Point* pPtAry, 
SalInvert nFlags)
 {
+    basegfx::B2DPolygon aPoly;
+    aPoly.append(basegfx::B2DPoint(pPtAry->getX(), pPtAry->getY()), nPoints);
+    for (sal_uInt32 i = 1; i < nPoints; ++i)
+        aPoly.setB2DPoint(i, basegfx::B2DPoint(pPtAry[i].getX(), 
pPtAry[i].getY()));
+    aPoly.setClosed(true);
+
+    m_rCairoCommon.invert(aPoly, nFlags, getAntiAlias());
 }
 
 bool SvpGraphicsBackend::drawEPS(tools::Long /*nX*/, tools::Long /*nY*/, 
tools::Long /*nWidth*/,
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index bc6a6231d1c1..c676a0fea72c 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -1108,116 +1108,6 @@ std::shared_ptr<SalBitmap> SvpSalGraphics::getBitmap( 
tools::Long nX, tools::Lon
     return pBitmap;
 }
 
-namespace
-{
-    cairo_pattern_t * create_stipple()
-    {
-        static unsigned char data[16] = { 0xFF, 0xFF, 0x00, 0x00,
-                                          0xFF, 0xFF, 0x00, 0x00,
-                                          0x00, 0x00, 0xFF, 0xFF,
-                                          0x00, 0x00, 0xFF, 0xFF };
-        cairo_surface_t* surface = cairo_image_surface_create_for_data(data, 
CAIRO_FORMAT_A8, 4, 4, 4);
-        cairo_pattern_t* pattern = cairo_pattern_create_for_surface(surface);
-        cairo_surface_destroy(surface);
-        cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
-        cairo_pattern_set_filter(pattern, CAIRO_FILTER_NEAREST);
-        return pattern;
-    }
-}
-
-void SvpSalGraphics::invert(const basegfx::B2DPolygon &rPoly, SalInvert nFlags)
-{
-    cairo_t* cr = m_aCairoCommon.getCairoContext(false, getAntiAlias());
-    clipRegion(cr);
-
-    // To make releaseCairoContext work, use empty extents
-    basegfx::B2DRange extents;
-
-    AddPolygonToPath(
-        cr,
-        rPoly,
-        basegfx::B2DHomMatrix(),
-        !getAntiAlias(),
-        false);
-
-    cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
-
-    if (cairo_version() >= CAIRO_VERSION_ENCODE(1, 10, 0))
-    {
-        cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE);
-    }
-    else
-    {
-        SAL_WARN("vcl.gdi", "SvpSalGraphics::invert, archaic cairo");
-    }
-
-    if (nFlags & SalInvert::TrackFrame)
-    {
-        cairo_set_line_width(cr, 2.0);
-        const double dashLengths[2] = { 4.0, 4.0 };
-        cairo_set_dash(cr, dashLengths, 2, 0);
-
-        extents = getClippedStrokeDamage(cr);
-        //see tdf#106577 under wayland, some pixel droppings seen, maybe we're
-        //out by one somewhere, or cairo_stroke_extents is confused by
-        //dashes/line width
-        if(!extents.isEmpty())
-        {
-            extents.grow(1);
-        }
-
-        cairo_stroke(cr);
-    }
-    else
-    {
-        extents = getClippedFillDamage(cr);
-
-        cairo_clip(cr);
-
-        if (nFlags & SalInvert::N50)
-        {
-            cairo_pattern_t *pattern = create_stipple();
-            cairo_surface_t* surface = 
cairo_surface_create_similar(m_aCairoCommon.m_pSurface,
-                                                                    
cairo_surface_get_content(m_aCairoCommon.m_pSurface),
-                                                                    
extents.getWidth() * m_aCairoCommon.m_fScale,
-                                                                    
extents.getHeight() * m_aCairoCommon.m_fScale);
-
-            dl_cairo_surface_set_device_scale(surface, 
m_aCairoCommon.m_fScale, m_aCairoCommon.m_fScale);
-            cairo_t* stipple_cr = cairo_create(surface);
-            cairo_set_source_rgb(stipple_cr, 1.0, 1.0, 1.0);
-            cairo_mask(stipple_cr, pattern);
-            cairo_pattern_destroy(pattern);
-            cairo_destroy(stipple_cr);
-            cairo_mask_surface(cr, surface, extents.getMinX(), 
extents.getMinY());
-            cairo_surface_destroy(surface);
-        }
-        else
-        {
-            cairo_paint(cr);
-        }
-    }
-
-    m_aCairoCommon.releaseCairoContext(cr, false, extents);
-}
-
-void SvpSalGraphics::invert( tools::Long nX, tools::Long nY, tools::Long 
nWidth, tools::Long nHeight, SalInvert nFlags )
-{
-    basegfx::B2DPolygon aRect = 
basegfx::utils::createPolygonFromRect(basegfx::B2DRectangle(nX, nY, nX+nWidth, 
nY+nHeight));
-
-    invert(aRect, nFlags);
-}
-
-void SvpSalGraphics::invert(sal_uInt32 nPoints, const Point* pPtAry, SalInvert 
nFlags)
-{
-    basegfx::B2DPolygon aPoly;
-    aPoly.append(basegfx::B2DPoint(pPtAry->getX(), pPtAry->getY()), nPoints);
-    for (sal_uInt32 i = 1; i < nPoints; ++i)
-        aPoly.setB2DPoint(i, basegfx::B2DPoint(pPtAry[i].getX(), 
pPtAry[i].getY()));
-    aPoly.setClosed(true);
-
-    invert(aPoly, nFlags);
-}
-
 bool SvpSalGraphics::drawEPS( tools::Long, tools::Long, tools::Long, 
tools::Long, void*, sal_uInt32 )
 {
     return false;
diff --git a/vcl/inc/headless/CairoCommon.hxx b/vcl/inc/headless/CairoCommon.hxx
index 038bd3a42c35..fb7526377801 100644
--- a/vcl/inc/headless/CairoCommon.hxx
+++ b/vcl/inc/headless/CairoCommon.hxx
@@ -175,6 +175,8 @@ struct VCL_DLLPUBLIC CairoCommon
                              double fLineWidth, const std::vector<double>* 
pStroke,
                              basegfx::B2DLineJoin eLineJoin, 
css::drawing::LineCap eLineCap,
                              double fMiterMinimumAngle, bool 
bPixelSnapHairline);
+
+    void invert(const basegfx::B2DPolygon& rPoly, SalInvert nFlags, bool 
bAntiAlias);
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx
index ba4dec8d29e8..eeac78d50a07 100644
--- a/vcl/inc/headless/svpgdi.hxx
+++ b/vcl/inc/headless/svpgdi.hxx
@@ -58,9 +58,6 @@ public:
     void copyWithOperator(const SalTwoRect& rTR, cairo_surface_t* source,
                           cairo_operator_t eOp = CAIRO_OPERATOR_SOURCE);
 
-private:
-    void invert(const basegfx::B2DPolygon &rPoly, SalInvert nFlags);
-
 protected:
     SvpCairoTextRender                  m_aTextRenderImpl;
     std::unique_ptr<SvpGraphicsBackend> m_pBackend;
@@ -141,9 +138,6 @@ public:
                                       Color nMaskColor ) override;
     virtual std::shared_ptr<SalBitmap> getBitmap( tools::Long nX, tools::Long 
nY, tools::Long nWidth, tools::Long nHeight ) override;
 
-    virtual void            invert( tools::Long nX, tools::Long nY, 
tools::Long nWidth, tools::Long nHeight, SalInvert nFlags ) override;
-    virtual void            invert( sal_uInt32 nPoints, const Point* pPtAry, 
SalInvert nFlags ) override;
-
     virtual bool        drawEPS( tools::Long nX, tools::Long nY, tools::Long 
nWidth, tools::Long nHeight, void* pPtr, sal_uInt32 nSize ) override;
 
     virtual SystemGraphicsData GetGraphicsData() const override;

Reply via email to