vcl/headless/CairoCommon.cxx     |   94 +++++++++++++++++++++++++++++++++++++++
 vcl/headless/svpgdi.cxx          |   81 ---------------------------------
 vcl/inc/headless/CairoCommon.hxx |    3 +
 3 files changed, 97 insertions(+), 81 deletions(-)

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

    vcl: move FastConvert24BitRgbTo32BitCairo to CairoCommon
    
    Intermediate step beore moving bitmap related members.
    
    Change-Id: Ic0adff8ba8fadd0687ec903460e0caf7507e99b6
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127846
    Tested-by: Jenkins
    Reviewed-by: Tomaž Vajngerl <qui...@gmail.com>

diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index af4ee260c1c6..5316b88e699f 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -21,6 +21,7 @@
 #include <dlfcn.h>
 #include <vcl/BitmapTools.hxx>
 #include <svdata.hxx>
+#include <tools/helpers.hxx>
 #include <basegfx/utils/canvastools.hxx>
 #include <basegfx/matrix/b2dhommatrixtools.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
@@ -1066,4 +1067,97 @@ cairo_surface_t* CairoCommon::createCairoSurface(const 
BitmapBuffer* pBuffer)
     return target;
 }
 
+std::unique_ptr<BitmapBuffer> FastConvert24BitRgbTo32BitCairo(const 
BitmapBuffer* pSrc)
+{
+    if (pSrc == nullptr)
+        return nullptr;
+
+    assert(pSrc->mnFormat == SVP_24BIT_FORMAT);
+    const tools::Long nWidth = pSrc->mnWidth;
+    const tools::Long nHeight = pSrc->mnHeight;
+    std::unique_ptr<BitmapBuffer> pDst(new BitmapBuffer);
+    pDst->mnFormat = (ScanlineFormat::N32BitTcArgb | ScanlineFormat::TopDown);
+    pDst->mnWidth = nWidth;
+    pDst->mnHeight = nHeight;
+    pDst->mnBitCount = 32;
+    pDst->maColorMask = pSrc->maColorMask;
+    pDst->maPalette = pSrc->maPalette;
+
+    tools::Long nScanlineBase;
+    const bool bFail = o3tl::checked_multiply<tools::Long>(pDst->mnBitCount, 
nWidth, nScanlineBase);
+    if (bFail)
+    {
+        SAL_WARN("vcl.gdi", "checked multiply failed");
+        pDst->mpBits = nullptr;
+        return nullptr;
+    }
+
+    pDst->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase);
+    if (pDst->mnScanlineSize < nScanlineBase / 8)
+    {
+        SAL_WARN("vcl.gdi", "scanline calculation wraparound");
+        pDst->mpBits = nullptr;
+        return nullptr;
+    }
+
+    try
+    {
+        pDst->mpBits = new sal_uInt8[pDst->mnScanlineSize * nHeight];
+    }
+    catch (const std::bad_alloc&)
+    {
+        // memory exception, clean up
+        pDst->mpBits = nullptr;
+        return nullptr;
+    }
+
+    for (tools::Long y = 0; y < nHeight; ++y)
+    {
+        sal_uInt8* pS = pSrc->mpBits + y * pSrc->mnScanlineSize;
+        sal_uInt8* pD = pDst->mpBits + y * pDst->mnScanlineSize;
+        for (tools::Long x = 0; x < nWidth; ++x)
+        {
+#if defined(ANDROID) && !HAVE_FEATURE_ANDROID_LOK
+            static_assert((SVP_CAIRO_FORMAT & ~ScanlineFormat::TopDown)
+                              == ScanlineFormat::N32BitTcRgba,
+                          "Expected SVP_CAIRO_FORMAT set to N32BitTcBgra");
+            static_assert((SVP_24BIT_FORMAT & ~ScanlineFormat::TopDown)
+                              == ScanlineFormat::N24BitTcRgb,
+                          "Expected SVP_24BIT_FORMAT set to N24BitTcRgb");
+            pD[0] = pS[0];
+            pD[1] = pS[1];
+            pD[2] = pS[2];
+            pD[3] = 0xff; // Alpha
+#elif defined OSL_BIGENDIAN
+            static_assert((SVP_CAIRO_FORMAT & ~ScanlineFormat::TopDown)
+                              == ScanlineFormat::N32BitTcArgb,
+                          "Expected SVP_CAIRO_FORMAT set to N32BitTcBgra");
+            static_assert((SVP_24BIT_FORMAT & ~ScanlineFormat::TopDown)
+                              == ScanlineFormat::N24BitTcRgb,
+                          "Expected SVP_24BIT_FORMAT set to N24BitTcRgb");
+            pD[0] = 0xff; // Alpha
+            pD[1] = pS[0];
+            pD[2] = pS[1];
+            pD[3] = pS[2];
+#else
+            static_assert((SVP_CAIRO_FORMAT & ~ScanlineFormat::TopDown)
+                              == ScanlineFormat::N32BitTcBgra,
+                          "Expected SVP_CAIRO_FORMAT set to N32BitTcBgra");
+            static_assert((SVP_24BIT_FORMAT & ~ScanlineFormat::TopDown)
+                              == ScanlineFormat::N24BitTcBgr,
+                          "Expected SVP_24BIT_FORMAT set to N24BitTcBgr");
+            pD[0] = pS[0];
+            pD[1] = pS[1];
+            pD[2] = pS[2];
+            pD[3] = 0xff; // Alpha
+#endif
+
+            pS += 3;
+            pD += 4;
+        }
+    }
+
+    return pDst;
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 5b685178940b..25f385a8396a 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -72,87 +72,6 @@ namespace
         }
     }
 
-    std::unique_ptr<BitmapBuffer> FastConvert24BitRgbTo32BitCairo(const 
BitmapBuffer* pSrc)
-    {
-        if (pSrc == nullptr)
-            return nullptr;
-
-        assert(pSrc->mnFormat == SVP_24BIT_FORMAT);
-        const tools::Long nWidth = pSrc->mnWidth;
-        const tools::Long nHeight = pSrc->mnHeight;
-        std::unique_ptr<BitmapBuffer> pDst(new BitmapBuffer);
-        pDst->mnFormat = (ScanlineFormat::N32BitTcArgb | 
ScanlineFormat::TopDown);
-        pDst->mnWidth = nWidth;
-        pDst->mnHeight = nHeight;
-        pDst->mnBitCount = 32;
-        pDst->maColorMask = pSrc->maColorMask;
-        pDst->maPalette = pSrc->maPalette;
-
-        tools::Long nScanlineBase;
-        const bool bFail = 
o3tl::checked_multiply<tools::Long>(pDst->mnBitCount, nWidth, nScanlineBase);
-        if (bFail)
-        {
-            SAL_WARN("vcl.gdi", "checked multiply failed");
-            pDst->mpBits = nullptr;
-            return nullptr;
-        }
-
-        pDst->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase);
-        if (pDst->mnScanlineSize < nScanlineBase/8)
-        {
-            SAL_WARN("vcl.gdi", "scanline calculation wraparound");
-            pDst->mpBits = nullptr;
-            return nullptr;
-        }
-
-        try
-        {
-            pDst->mpBits = new sal_uInt8[ pDst->mnScanlineSize * nHeight ];
-        }
-        catch (const std::bad_alloc&)
-        {
-            // memory exception, clean up
-            pDst->mpBits = nullptr;
-            return nullptr;
-        }
-
-        for (tools::Long y = 0; y < nHeight; ++y)
-        {
-            sal_uInt8* pS = pSrc->mpBits + y * pSrc->mnScanlineSize;
-            sal_uInt8* pD = pDst->mpBits + y * pDst->mnScanlineSize;
-            for (tools::Long x = 0; x < nWidth; ++x)
-            {
-#if defined(ANDROID) && !HAVE_FEATURE_ANDROID_LOK
-                static_assert((SVP_CAIRO_FORMAT & ~ScanlineFormat::TopDown) == 
ScanlineFormat::N32BitTcRgba, "Expected SVP_CAIRO_FORMAT set to N32BitTcBgra");
-                static_assert((SVP_24BIT_FORMAT & ~ScanlineFormat::TopDown) == 
ScanlineFormat::N24BitTcRgb, "Expected SVP_24BIT_FORMAT set to N24BitTcRgb");
-                pD[0] = pS[0];
-                pD[1] = pS[1];
-                pD[2] = pS[2];
-                pD[3] = 0xff; // Alpha
-#elif defined OSL_BIGENDIAN
-                static_assert((SVP_CAIRO_FORMAT & ~ScanlineFormat::TopDown) == 
ScanlineFormat::N32BitTcArgb, "Expected SVP_CAIRO_FORMAT set to N32BitTcBgra");
-                static_assert((SVP_24BIT_FORMAT & ~ScanlineFormat::TopDown) == 
ScanlineFormat::N24BitTcRgb, "Expected SVP_24BIT_FORMAT set to N24BitTcRgb");
-                pD[0] = 0xff; // Alpha
-                pD[1] = pS[0];
-                pD[2] = pS[1];
-                pD[3] = pS[2];
-#else
-                static_assert((SVP_CAIRO_FORMAT & ~ScanlineFormat::TopDown) == 
ScanlineFormat::N32BitTcBgra, "Expected SVP_CAIRO_FORMAT set to N32BitTcBgra");
-                static_assert((SVP_24BIT_FORMAT & ~ScanlineFormat::TopDown) == 
ScanlineFormat::N24BitTcBgr, "Expected SVP_24BIT_FORMAT set to N24BitTcBgr");
-                pD[0] = pS[0];
-                pD[1] = pS[1];
-                pD[2] = pS[2];
-                pD[3] = 0xff; // Alpha
-#endif
-
-                pS += 3;
-                pD += 4;
-            }
-        }
-
-        return pDst;
-    }
-
     // check for env var that decides for using downscale pattern
     const char* pDisableDownScale(getenv("SAL_DISABLE_CAIRO_DOWNSCALE"));
     bool bDisableDownScale(nullptr != pDisableDownScale);
diff --git a/vcl/inc/headless/CairoCommon.hxx b/vcl/inc/headless/CairoCommon.hxx
index 02dfcfa3ff0b..c79b2297e106 100644
--- a/vcl/inc/headless/CairoCommon.hxx
+++ b/vcl/inc/headless/CairoCommon.hxx
@@ -122,6 +122,9 @@ VCL_DLLPUBLIC void add_polygon_path(cairo_t* cr, const 
basegfx::B2DPolyPolygon&
 
 VCL_DLLPUBLIC cairo_format_t getCairoFormat(const BitmapBuffer& rBuffer);
 
+VCL_DLLPUBLIC std::unique_ptr<BitmapBuffer>
+FastConvert24BitRgbTo32BitCairo(const BitmapBuffer* pSrc);
+
 enum class PaintMode
 {
     Over,

Reply via email to