summaryrefslogtreecommitdiff
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
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>
-rw-r--r--vcl/headless/svpinst.cxx2
-rw-r--r--vcl/headless/svpvd.cxx34
-rw-r--r--vcl/inc/headless/svpvd.hxx3
-rw-r--r--vcl/qt5/Qt5Instance.cxx3
-rw-r--r--vcl/unx/gtk/gtkinst.cxx2
5 files changed, 22 insertions, 22 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)
diff --git a/vcl/inc/headless/svpvd.hxx b/vcl/inc/headless/svpvd.hxx
index 990915169d56..51d6af9cb499 100644
--- a/vcl/inc/headless/svpvd.hxx
+++ b/vcl/inc/headless/svpvd.hxx
@@ -33,11 +33,10 @@ class VCL_DLLPUBLIC SvpSalVirtualDevice : public SalVirtualDevice
cairo_surface_t* m_pRefSurface;
cairo_surface_t* m_pSurface;
basegfx::B2IVector m_aFrameSize;
- double m_fScale;
std::vector< SvpSalGraphics* > m_aGraphics;
public:
- SvpSalVirtualDevice(DeviceFormat eFormat, double fScale, cairo_surface_t* pRefSurface);
+ SvpSalVirtualDevice(DeviceFormat eFormat, cairo_surface_t* pRefSurface);
virtual ~SvpSalVirtualDevice() override;
// SalVirtualDevice
diff --git a/vcl/qt5/Qt5Instance.cxx b/vcl/qt5/Qt5Instance.cxx
index 26f0fafcafb8..7eb734195756 100644
--- a/vcl/qt5/Qt5Instance.cxx
+++ b/vcl/qt5/Qt5Instance.cxx
@@ -92,8 +92,7 @@ SalVirtualDevice* Qt5Instance::CreateVirtualDevice(SalGraphics* pGraphics, long&
{
SvpSalGraphics* pSvpSalGraphics = dynamic_cast<SvpSalGraphics*>(pGraphics);
assert(pSvpSalGraphics);
- SvpSalVirtualDevice* pVD = new SvpSalVirtualDevice(eFormat, pSvpSalGraphics->getScale(),
- pSvpSalGraphics->getSurface());
+ SvpSalVirtualDevice* pVD = new SvpSalVirtualDevice(eFormat, pSvpSalGraphics->getSurface());
pVD->SetSize(nDX, nDY);
return pVD;
}
diff --git a/vcl/unx/gtk/gtkinst.cxx b/vcl/unx/gtk/gtkinst.cxx
index 3899e2d5d692..dbd0d64ab32b 100644
--- a/vcl/unx/gtk/gtkinst.cxx
+++ b/vcl/unx/gtk/gtkinst.cxx
@@ -331,7 +331,7 @@ SalVirtualDevice* GtkInstance::CreateVirtualDevice( SalGraphics *pG,
(void) pGd;
SvpSalGraphics *pSvpSalGraphics = dynamic_cast<SvpSalGraphics*>(pG);
assert(pSvpSalGraphics);
- SvpSalVirtualDevice* pNew = new SvpSalVirtualDevice(eFormat, pSvpSalGraphics->getScale(), pSvpSalGraphics->getSurface());
+ SvpSalVirtualDevice* pNew = new SvpSalVirtualDevice(eFormat, pSvpSalGraphics->getSurface());
pNew->SetSize( nDX, nDY );
return pNew;
#else