summaryrefslogtreecommitdiff
path: root/vcl/headless
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-04-11 12:09:45 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-04-11 16:43:30 +0200
commitb524de950c6eb0bc61d05d41fe69b67ab59b16c6 (patch)
treec4c2d912942f95b690ce96644b137faaf5bf9824 /vcl/headless
parente65918b837b6c84604413d0de3cfaedaf8a53913 (diff)
Related: rhbz#1396729 use cairo_surface_create_similar
where we can Change-Id: If6fd729a9cbf834faef33586b5bd886aad2fbe1d Reviewed-on: https://gerrit.libreoffice.org/52726 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/svpinst.cxx2
-rw-r--r--vcl/headless/svpvd.cxx34
2 files changed, 19 insertions, 17 deletions
diff --git a/vcl/headless/svpinst.cxx b/vcl/headless/svpinst.cxx
index 81a8f332723b..664547a69a52 100644
--- a/vcl/headless/svpinst.cxx
+++ b/vcl/headless/svpinst.cxx
@@ -243,7 +243,7 @@ SalVirtualDevice* SvpSalInstance::CreateVirtualDevice( SalGraphics* pGraphics,
{
SvpSalGraphics *pSvpSalGraphics = dynamic_cast<SvpSalGraphics*>(pGraphics);
assert(pSvpSalGraphics);
- SvpSalVirtualDevice* pNew = new SvpSalVirtualDevice(eFormat, pSvpSalGraphics->getScale(), pSvpSalGraphics->getSurface());
+ SvpSalVirtualDevice* pNew = new SvpSalVirtualDevice(eFormat, pSvpSalGraphics->getSurface());
pNew->SetSize( nDX, nDY );
return pNew;
}
diff --git a/vcl/headless/svpvd.cxx b/vcl/headless/svpvd.cxx
index decca08a76eb..4172fc383744 100644
--- a/vcl/headless/svpvd.cxx
+++ b/vcl/headless/svpvd.cxx
@@ -30,11 +30,10 @@
using namespace basegfx;
-SvpSalVirtualDevice::SvpSalVirtualDevice(DeviceFormat eFormat, double fScale, cairo_surface_t* pRefSurface)
+SvpSalVirtualDevice::SvpSalVirtualDevice(DeviceFormat eFormat, cairo_surface_t* pRefSurface)
: m_eFormat(eFormat)
, m_pRefSurface(pRefSurface)
, m_pSurface(nullptr)
- , m_fScale(fScale)
{
cairo_surface_reference(m_pRefSurface);
}
@@ -77,9 +76,6 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
{
m_aFrameSize = basegfx::B2IVector(nNewDX, nNewDY);
- nNewDX *= m_fScale;
- nNewDY *= m_fScale;
-
if (m_pSurface)
{
cairo_surface_destroy(m_pSurface);
@@ -87,23 +83,29 @@ bool SvpSalVirtualDevice::SetSizeUsingBuffer( long nNewDX, long nNewDY,
if (m_eFormat == DeviceFormat::BITMASK)
{
- m_pSurface = cairo_surface_create_similar_image(m_pRefSurface, CAIRO_FORMAT_A1,
+ m_pSurface = cairo_surface_create_similar(m_pRefSurface, CAIRO_CONTENT_ALPHA,
nNewDX, nNewDY);
}
- else
+ else if (pBuffer)
{
- m_pSurface = pBuffer ?
- cairo_image_surface_create_for_data(pBuffer, CAIRO_FORMAT_ARGB32,
- nNewDX, nNewDY,
- cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, nNewDX))
- :
- cairo_surface_create_similar_image(m_pRefSurface, CAIRO_FORMAT_ARGB32,
- nNewDX, nNewDY);
- }
+#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
+ double fXScale, fYScale;
+ cairo_surface_get_device_scale(m_pRefSurface, &fXScale, &fYScale);
+ nNewDX *= fXScale;
+ nNewDY *= fYScale;
+#endif
+
+ m_pSurface = cairo_image_surface_create_for_data(pBuffer, CAIRO_FORMAT_ARGB32,
+ nNewDX, nNewDY, cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, nNewDX));
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 14, 0)
- cairo_surface_set_device_scale(m_pSurface, m_fScale, m_fScale);
+ cairo_surface_set_device_scale(m_pSurface, fXScale, fYScale);
#endif
+ }
+ else
+ {
+ m_pSurface = cairo_surface_create_similar(m_pRefSurface, CAIRO_CONTENT_COLOR_ALPHA, nNewDX, nNewDY);
+ }
// update device in existing graphics
for (auto const& graphic : m_aGraphics)