summaryrefslogtreecommitdiff
path: root/vcl/headless
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-04-11 11:06:37 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-04-11 15:37:46 +0200
commit6eea5cffc4399fd31f97b19359eb6ae9c75d21b8 (patch)
treeda70477a17ec80ceda41bc0a739e00d0774d8e29 /vcl/headless
parenta87569e9ea8db9a0d869570613603eebf7c145e8 (diff)
Related: rhbz#1396729 use cairo_surface_create_similar_image
don't expect it to make much of a difference but does allow bubbling the initial widget surface type around through the virtual devices Change-Id: I414a4b10b0ae4195345b81d9da7f748652d4f566 Reviewed-on: https://gerrit.libreoffice.org/52718 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/headless')
-rw-r--r--vcl/headless/svpgdi.cxx4
-rw-r--r--vcl/headless/svpinst.cxx6
-rw-r--r--vcl/headless/svpvd.cxx14
3 files changed, 18 insertions, 6 deletions
diff --git a/vcl/headless/svpgdi.cxx b/vcl/headless/svpgdi.cxx
index 487796755ec5..cad5f5ea21a5 100644
--- a/vcl/headless/svpgdi.cxx
+++ b/vcl/headless/svpgdi.cxx
@@ -1320,7 +1320,7 @@ SalBitmap* SvpSalGraphics::getBitmap( long nX, long nY, long nWidth, long nHeigh
Color SvpSalGraphics::getPixel( long nX, long nY )
{
- cairo_surface_t *target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1, 1);
+ cairo_surface_t *target = cairo_surface_create_similar_image(m_pSurface, CAIRO_FORMAT_ARGB32, 1, 1);
cairo_t* cr = cairo_create(target);
cairo_rectangle(cr, 0, 0, 1, 1);
@@ -1484,7 +1484,7 @@ cairo_surface_t* SvpSalGraphics::createCairoSurface(const BitmapBuffer *pBuffer)
cairo_t* SvpSalGraphics::createTmpCompatibleCairoContext() const
{
- cairo_surface_t *target = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
+ cairo_surface_t *target = cairo_surface_create_similar_image(m_pSurface, CAIRO_FORMAT_ARGB32,
m_aFrameSize.getX() * m_fScale,
m_aFrameSize.getY() * m_fScale);
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx
index 412e86c55351..81a8f332723b 100644
--- a/vcl/headless/svpinst.cxx
+++ b/vcl/headless/svpinst.cxx
@@ -236,12 +236,14 @@ void SvpSalInstance::DestroyObject( SalObject* pObject )
#ifndef IOS
-SalVirtualDevice* SvpSalInstance::CreateVirtualDevice( SalGraphics* /* pGraphics */,
+SalVirtualDevice* SvpSalInstance::CreateVirtualDevice( SalGraphics* pGraphics,
long &nDX, long &nDY,
DeviceFormat eFormat,
const SystemGraphicsData* /* pData */ )
{
- SvpSalVirtualDevice* pNew = new SvpSalVirtualDevice(eFormat, 1);
+ SvpSalGraphics *pSvpSalGraphics = dynamic_cast<SvpSalGraphics*>(pGraphics);
+ assert(pSvpSalGraphics);
+ SvpSalVirtualDevice* pNew = new SvpSalVirtualDevice(eFormat, pSvpSalGraphics->getScale(), pSvpSalGraphics->getSurface());
pNew->SetSize( nDX, nDY );
return pNew;
}
diff --git a/vcl/headless/svpvd.cxx b/vcl/headless/svpvd.cxx
index cf78ebc8eb7d..decca08a76eb 100644
--- a/vcl/headless/svpvd.cxx
+++ b/vcl/headless/svpvd.cxx
@@ -30,9 +30,19 @@
using namespace basegfx;
+SvpSalVirtualDevice::SvpSalVirtualDevice(DeviceFormat eFormat, double fScale, cairo_surface_t* pRefSurface)
+ : m_eFormat(eFormat)
+ , m_pRefSurface(pRefSurface)
+ , m_pSurface(nullptr)
+ , m_fScale(fScale)
+{
+ cairo_surface_reference(m_pRefSurface);
+}
+
SvpSalVirtualDevice::~SvpSalVirtualDevice()
{
cairo_surface_destroy(m_pSurface);
+ cairo_surface_destroy(m_pRefSurface);
}
SalGraphics* SvpSalVirtualDevice::AcquireGraphics()
@@ -77,7 +87,7 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
if (m_eFormat == DeviceFormat::BITMASK)
{
- m_pSurface = cairo_image_surface_create(CAIRO_FORMAT_A1,
+ m_pSurface = cairo_surface_create_similar_image(m_pRefSurface, CAIRO_FORMAT_A1,
nNewDX, nNewDY);
}
else
@@ -87,7 +97,7 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
nNewDX, nNewDY,
cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, nNewDX))
:
- cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
+ cairo_surface_create_similar_image(m_pRefSurface, CAIRO_FORMAT_ARGB32,
nNewDX, nNewDY);
}