vcl/headless/SvpGraphicsBackend.cxx | 29 ++++++++++++++++++++++++++++- vcl/headless/svpgdi.cxx | 28 ---------------------------- vcl/inc/headless/svpgdi.hxx | 2 +- 3 files changed, 29 insertions(+), 30 deletions(-)
New commits: commit 3aaf8506b3ee0d4a1bb86be7c6ca4d9402467d49 Author: Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk> AuthorDate: Tue Dec 28 09:48:30 2021 +0900 Commit: Tomaž Vajngerl <qui...@gmail.com> CommitDate: Mon Jan 3 08:03:20 2022 +0100 vcl: move getPixel to SvpGraphicsBackend Change-Id: I409581a2bdc9e18420bb159ce349fb5a5b86c463 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127825 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <qui...@gmail.com> diff --git a/vcl/headless/SvpGraphicsBackend.cxx b/vcl/headless/SvpGraphicsBackend.cxx index 10c02d4644f9..d5dd2fe48b27 100644 --- a/vcl/headless/SvpGraphicsBackend.cxx +++ b/vcl/headless/SvpGraphicsBackend.cxx @@ -383,7 +383,34 @@ std::shared_ptr<SalBitmap> SvpGraphicsBackend::getBitmap(tools::Long /*nX*/, too return std::shared_ptr<SalBitmap>(); } -Color SvpGraphicsBackend::getPixel(tools::Long /*nX*/, tools::Long /*nY*/) { return Color(); } +Color SvpGraphicsBackend::getPixel(tools::Long nX, tools::Long nY) +{ +#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 12, 0) + cairo_surface_t* target + = cairo_surface_create_similar_image(m_rCairoCommon.m_pSurface, CAIRO_FORMAT_ARGB32, 1, 1); +#else + cairo_surface_t* target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); +#endif + + cairo_t* cr = cairo_create(target); + + cairo_rectangle(cr, 0, 0, 1, 1); + cairo_set_source_surface(cr, m_rCairoCommon.m_pSurface, -nX, -nY); + cairo_paint(cr); + cairo_destroy(cr); + + cairo_surface_flush(target); + vcl::bitmap::lookup_table const& unpremultiply_table = vcl::bitmap::get_unpremultiply_table(); + unsigned char* data = cairo_image_surface_get_data(target); + sal_uInt8 a = data[SVP_CAIRO_ALPHA]; + sal_uInt8 b = unpremultiply_table[a][data[SVP_CAIRO_BLUE]]; + sal_uInt8 g = unpremultiply_table[a][data[SVP_CAIRO_GREEN]]; + sal_uInt8 r = unpremultiply_table[a][data[SVP_CAIRO_RED]]; + Color aColor(ColorAlpha, a, r, g, b); + cairo_surface_destroy(target); + + return aColor; +} void SvpGraphicsBackend::invert(tools::Long /*nX*/, tools::Long /*nY*/, tools::Long /*nWidth*/, tools::Long /*nHeight*/, SalInvert /*nFlags*/) diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx index 523a76fbb530..bc6a6231d1c1 100644 --- a/vcl/headless/svpgdi.cxx +++ b/vcl/headless/svpgdi.cxx @@ -1108,34 +1108,6 @@ std::shared_ptr<SalBitmap> SvpSalGraphics::getBitmap( tools::Long nX, tools::Lon return pBitmap; } -Color SvpSalGraphics::getPixel( tools::Long nX, tools::Long nY ) -{ -#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 12, 0) - cairo_surface_t *target = cairo_surface_create_similar_image(m_aCairoCommon.m_pSurface, CAIRO_FORMAT_ARGB32, 1, 1); -#else - cairo_surface_t *target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1); -#endif - - cairo_t* cr = cairo_create(target); - - cairo_rectangle(cr, 0, 0, 1, 1); - cairo_set_source_surface(cr, m_aCairoCommon.m_pSurface, -nX, -nY); - cairo_paint(cr); - cairo_destroy(cr); - - cairo_surface_flush(target); - vcl::bitmap::lookup_table const & unpremultiply_table = vcl::bitmap::get_unpremultiply_table(); - unsigned char *data = cairo_image_surface_get_data(target); - sal_uInt8 a = data[SVP_CAIRO_ALPHA]; - sal_uInt8 b = unpremultiply_table[a][data[SVP_CAIRO_BLUE]]; - sal_uInt8 g = unpremultiply_table[a][data[SVP_CAIRO_GREEN]]; - sal_uInt8 r = unpremultiply_table[a][data[SVP_CAIRO_RED]]; - Color aColor(ColorAlpha, a, r, g, b); - cairo_surface_destroy(target); - - return aColor; -} - namespace { cairo_pattern_t * create_stipple() diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index 0d36a2cf8442..ba4dec8d29e8 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -140,7 +140,7 @@ public: const SalBitmap& rSalBitmap, Color nMaskColor ) override; virtual std::shared_ptr<SalBitmap> getBitmap( tools::Long nX, tools::Long nY, tools::Long nWidth, tools::Long nHeight ) override; - virtual Color getPixel( tools::Long nX, tools::Long nY ) 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;