vcl/headless/CairoCommon.cxx     |   56 ++++++++++++++++++++++++++++++++
 vcl/headless/svpgdi.cxx          |   67 ++-------------------------------------
 vcl/inc/headless/CairoCommon.hxx |    5 ++
 vcl/inc/headless/svpgdi.hxx      |    1 
 4 files changed, 65 insertions(+), 64 deletions(-)

New commits:
commit 5b185397198171bf8adaa99439931d12f42eff51
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Tue Dec 28 14:00:02 2021 +0900
Commit:     Tomaž Vajngerl <qui...@gmail.com>
CommitDate: Tue Jan 4 06:55:57 2022 +0100

    vcl: move createCairoSurface to CairoCommon
    
    Intermediate step beore moving bitmap related members.
    
    Change-Id: Ia3321ddd1ca3adb11e2b4610c3fb6b0be5ee6515
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127845
    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 234bfe29fcce..af4ee260c1c6 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -1010,4 +1010,60 @@ void CairoCommon::invert(const basegfx::B2DPolygon& 
rPoly, SalInvert nFlags, boo
     releaseCairoContext(cr, false, extents);
 }
 
+cairo_format_t getCairoFormat(const BitmapBuffer& rBuffer)
+{
+    cairo_format_t nFormat;
+#ifdef HAVE_CAIRO_FORMAT_RGB24_888
+    assert(rBuffer.mnBitCount == 32 || rBuffer.mnBitCount == 24 || 
rBuffer.mnBitCount == 1);
+#else
+    assert(rBuffer.mnBitCount == 32 || rBuffer.mnBitCount == 1);
+#endif
+
+    if (rBuffer.mnBitCount == 32)
+        nFormat = CAIRO_FORMAT_ARGB32;
+#ifdef HAVE_CAIRO_FORMAT_RGB24_888
+    else if (rBuffer.mnBitCount == 24)
+        nFormat = CAIRO_FORMAT_RGB24_888;
+#endif
+    else
+        nFormat = CAIRO_FORMAT_A1;
+    return nFormat;
+}
+
+namespace
+{
+bool isCairoCompatible(const BitmapBuffer* pBuffer)
+{
+    if (!pBuffer)
+        return false;
+
+        // We use Cairo that supports 24-bit RGB.
+#ifdef HAVE_CAIRO_FORMAT_RGB24_888
+    if (pBuffer->mnBitCount != 32 && pBuffer->mnBitCount != 24 && 
pBuffer->mnBitCount != 1)
+#else
+    if (pBuffer->mnBitCount != 32 && pBuffer->mnBitCount != 1)
+#endif
+        return false;
+
+    cairo_format_t nFormat = getCairoFormat(*pBuffer);
+    return (cairo_format_stride_for_width(nFormat, pBuffer->mnWidth) == 
pBuffer->mnScanlineSize);
+}
+}
+
+cairo_surface_t* CairoCommon::createCairoSurface(const BitmapBuffer* pBuffer)
+{
+    if (!isCairoCompatible(pBuffer))
+        return nullptr;
+
+    cairo_format_t nFormat = getCairoFormat(*pBuffer);
+    cairo_surface_t* target = cairo_image_surface_create_for_data(
+        pBuffer->mpBits, nFormat, pBuffer->mnWidth, pBuffer->mnHeight, 
pBuffer->mnScanlineSize);
+    if (cairo_surface_status(target) != CAIRO_STATUS_SUCCESS)
+    {
+        cairo_surface_destroy(target);
+        return nullptr;
+    }
+    return target;
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 46016e0e3349..5b685178940b 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -59,26 +59,6 @@
 
 namespace
 {
-    cairo_format_t getCairoFormat(const BitmapBuffer& rBuffer)
-    {
-        cairo_format_t nFormat;
-#ifdef HAVE_CAIRO_FORMAT_RGB24_888
-        assert(rBuffer.mnBitCount == 32 || rBuffer.mnBitCount == 24 || 
rBuffer.mnBitCount == 1);
-#else
-        assert(rBuffer.mnBitCount == 32 || rBuffer.mnBitCount == 1);
-#endif
-
-        if (rBuffer.mnBitCount == 32)
-            nFormat = CAIRO_FORMAT_ARGB32;
-#ifdef HAVE_CAIRO_FORMAT_RGB24_888
-        else if (rBuffer.mnBitCount == 24)
-            nFormat = CAIRO_FORMAT_RGB24_888;
-#endif
-        else
-            nFormat = CAIRO_FORMAT_A1;
-        return nFormat;
-    }
-
     void Toggle1BitTransparency(const BitmapBuffer& rBuf)
     {
         assert(rBuf.maPalette.GetBestIndex(BitmapColor(COL_BLACK)) == 0);
@@ -347,11 +327,11 @@ namespace
                 aTmpBmp.Create(std::move(pTmp));
 
                 assert(aTmpBmp.GetBitCount() == 32);
-                
implSetSurface(SvpSalGraphics::createCairoSurface(aTmpBmp.GetBuffer()));
+                
implSetSurface(CairoCommon::createCairoSurface(aTmpBmp.GetBuffer()));
             }
             else
             {
-                
implSetSurface(SvpSalGraphics::createCairoSurface(rSrcBmp.GetBuffer()));
+                
implSetSurface(CairoCommon::createCairoSurface(rSrcBmp.GetBuffer()));
             }
         }
         void mark_dirty()
@@ -807,7 +787,7 @@ void SvpSalGraphics::drawBitmap(const SalTwoRect& rTR, 
const SalBitmap& rSourceB
 
 void SvpSalGraphics::drawBitmap(const SalTwoRect& rTR, const BitmapBuffer* 
pBuffer, cairo_operator_t eOp)
 {
-    cairo_surface_t* source = createCairoSurface( pBuffer );
+    cairo_surface_t* source = CairoCommon::createCairoSurface(pBuffer);
     m_aCairoCommon.copyWithOperator(rTR, source, eOp, getAntiAlias());
     cairo_surface_destroy(source);
 }
@@ -915,7 +895,7 @@ std::shared_ptr<SalBitmap> SvpSalGraphics::getBitmap( 
tools::Long nX, tools::Lon
         return nullptr;
     }
 
-    cairo_surface_t* target = 
SvpSalGraphics::createCairoSurface(pBitmap->GetBuffer());
+    cairo_surface_t* target = 
CairoCommon::createCairoSurface(pBitmap->GetBuffer());
     if (!target)
     {
         SAL_WARN("vcl.gdi", "SvpSalGraphics::getBitmap, cannot create cairo 
surface");
@@ -934,45 +914,6 @@ std::shared_ptr<SalBitmap> SvpSalGraphics::getBitmap( 
tools::Long nX, tools::Lon
     return pBitmap;
 }
 
-namespace
-{
-    bool isCairoCompatible(const BitmapBuffer* pBuffer)
-    {
-        if (!pBuffer)
-            return false;
-
-        // We use Cairo that supports 24-bit RGB.
-#ifdef HAVE_CAIRO_FORMAT_RGB24_888
-        if (pBuffer->mnBitCount != 32 && pBuffer->mnBitCount != 24 && 
pBuffer->mnBitCount != 1)
-#else
-        if (pBuffer->mnBitCount != 32 && pBuffer->mnBitCount != 1)
-#endif
-            return false;
-
-        cairo_format_t nFormat = getCairoFormat(*pBuffer);
-        return (cairo_format_stride_for_width(nFormat, pBuffer->mnWidth) == 
pBuffer->mnScanlineSize);
-    }
-}
-
-cairo_surface_t* SvpSalGraphics::createCairoSurface(const BitmapBuffer 
*pBuffer)
-{
-    if (!isCairoCompatible(pBuffer))
-        return nullptr;
-
-    cairo_format_t nFormat = getCairoFormat(*pBuffer);
-    cairo_surface_t *target =
-        cairo_image_surface_create_for_data(pBuffer->mpBits,
-                                        nFormat,
-                                        pBuffer->mnWidth, pBuffer->mnHeight,
-                                        pBuffer->mnScanlineSize);
-    if (cairo_surface_status(target) != CAIRO_STATUS_SUCCESS)
-    {
-        cairo_surface_destroy(target);
-        return nullptr;
-    }
-    return target;
-}
-
 #if ENABLE_CAIRO_CANVAS
 bool SvpSalGraphics::SupportsCairo() const
 {
diff --git a/vcl/inc/headless/CairoCommon.hxx b/vcl/inc/headless/CairoCommon.hxx
index cdf66c012cde..02dfcfa3ff0b 100644
--- a/vcl/inc/headless/CairoCommon.hxx
+++ b/vcl/inc/headless/CairoCommon.hxx
@@ -27,6 +27,7 @@
 #include <vcl/dllapi.h>
 #include <vcl/region.hxx>
 #include <vcl/salgtype.hxx>
+#include <vcl/BitmapBuffer.hxx>
 
 #include <com/sun/star/drawing/LineCap.hpp>
 
@@ -119,6 +120,8 @@ VCL_DLLPUBLIC basegfx::B2DPoint impPixelSnap(const 
basegfx::B2DPolygon& rPolygon
 VCL_DLLPUBLIC void add_polygon_path(cairo_t* cr, const 
basegfx::B2DPolyPolygon& rPolyPolygon,
                                     const basegfx::B2DHomMatrix& 
rObjectToDevice, bool bPixelSnap);
 
+VCL_DLLPUBLIC cairo_format_t getCairoFormat(const BitmapBuffer& rBuffer);
+
 enum class PaintMode
 {
     Over,
@@ -187,6 +190,8 @@ struct VCL_DLLPUBLIC CairoCommon
     void copyBitsCairo(const SalTwoRect& rTR, cairo_surface_t* pSourceSurface, 
bool bAntiAlias);
 
     void invert(const basegfx::B2DPolygon& rPoly, SalInvert nFlags, bool 
bAntiAlias);
+
+    static cairo_surface_t* createCairoSurface(const BitmapBuffer* pBuffer);
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx
index 61decc908563..0f747fe99af2 100644
--- a/vcl/inc/headless/svpgdi.hxx
+++ b/vcl/inc/headless/svpgdi.hxx
@@ -137,7 +137,6 @@ public:
         return m_aCairoCommon.releaseCairoContext(cr, bXorModeAllowed, 
rExtents);
     }
 
-    static cairo_surface_t* createCairoSurface(const BitmapBuffer *pBuffer);
     void clipRegion(cairo_t* cr)
     {
         m_aCairoCommon.clipRegion(cr);

Reply via email to