summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-03-28 10:00:59 +0100
committerAshod Nakashian <ashod.nakashian@collabora.co.uk>2017-12-05 08:17:20 -0500
commitfdc7956bea185b25ebd4147fb196da1e1b13a832 (patch)
tree54d6dd4a240d043ef5bdea4d05754893cd9e17fa
parent9f29f3b63277cfe1830aca24fe0a741cb1d7e1c1 (diff)
ofz#954 out of memory
Change-Id: Ib27f2dfe0d0837544910208f38a1bc11a35e3cb4 Reviewed-on: https://gerrit.libreoffice.org/35794 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com> (cherry picked from commit 5d87c15ef0935081319afe2400c99df14d9fa258) (cherry picked from commit 84d743194e8f92117dff0eabc907c30926a95031)
-rw-r--r--vcl/headless/svpbmp.cxx5
-rw-r--r--vcl/inc/headless/svpbmp.hxx1
-rw-r--r--vcl/inc/impbmp.hxx1
-rw-r--r--vcl/inc/opengl/salbmp.hxx1
-rw-r--r--vcl/inc/quartz/salbmp.h1
-rw-r--r--vcl/inc/salbmp.hxx1
-rw-r--r--vcl/inc/unx/salbmp.h1
-rw-r--r--vcl/inc/win/salbmp.h1
-rw-r--r--vcl/opengl/scale.cxx5
-rw-r--r--vcl/quartz/salbmp.cxx5
-rw-r--r--vcl/source/gdi/bitmap3.cxx2
-rw-r--r--vcl/source/gdi/impbmp.cxx5
-rw-r--r--vcl/unx/generic/gdi/salbmp.cxx5
-rw-r--r--vcl/win/gdi/salbmp.cxx5
14 files changed, 38 insertions, 1 deletions
diff --git a/vcl/headless/svpbmp.cxx b/vcl/headless/svpbmp.cxx
index 02aa41b66bc5..94f795539011 100644
--- a/vcl/headless/svpbmp.cxx
+++ b/vcl/headless/svpbmp.cxx
@@ -277,6 +277,11 @@ bool SvpSalBitmap::GetSystemData( BitmapSystemData& )
return false;
}
+bool SvpSalBitmap::ScalingSupported() const
+{
+ return false;
+}
+
bool SvpSalBitmap::Scale( const double& /*rScaleX*/, const double& /*rScaleY*/, BmpScaleFlag /*nScaleFlag*/ )
{
return false;
diff --git a/vcl/inc/headless/svpbmp.hxx b/vcl/inc/headless/svpbmp.hxx
index af50ecff6cf5..83c197087931 100644
--- a/vcl/inc/headless/svpbmp.hxx
+++ b/vcl/inc/headless/svpbmp.hxx
@@ -57,6 +57,7 @@ public:
virtual void ReleaseBuffer( BitmapBuffer* pBuffer, BitmapAccessMode nMode ) override;
virtual bool GetSystemData( BitmapSystemData& rData ) override;
+ virtual bool ScalingSupported() const override;
virtual bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) override;
virtual bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) override;
};
diff --git a/vcl/inc/impbmp.hxx b/vcl/inc/impbmp.hxx
index dd607fccc2f6..5824068c6c8a 100644
--- a/vcl/inc/impbmp.hxx
+++ b/vcl/inc/impbmp.hxx
@@ -66,6 +66,7 @@ public:
BitmapChecksum ImplGetChecksum() const;
void ImplInvalidateChecksum();
+ bool ImplScalingSupported() const;
bool ImplScale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag );
bool ImplReplace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol );
bool ImplConvert( BmpConversion eConversion );
diff --git a/vcl/inc/opengl/salbmp.hxx b/vcl/inc/opengl/salbmp.hxx
index d10129ce8d0c..8d4e05f77050 100644
--- a/vcl/inc/opengl/salbmp.hxx
+++ b/vcl/inc/opengl/salbmp.hxx
@@ -74,6 +74,7 @@ public:
bool GetSystemData( BitmapSystemData& rData ) override;
+ bool ScalingSupported() const override;
bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) override;
bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) override;
bool ConvertToGreyscale() override;
diff --git a/vcl/inc/quartz/salbmp.h b/vcl/inc/quartz/salbmp.h
index ae384c9bee4b..01baa2905a71 100644
--- a/vcl/inc/quartz/salbmp.h
+++ b/vcl/inc/quartz/salbmp.h
@@ -74,6 +74,7 @@ public:
bool GetSystemData( BitmapSystemData& rData ) override;
+ bool ScalingSupported() const override;
bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) override;
bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) override;
diff --git a/vcl/inc/salbmp.hxx b/vcl/inc/salbmp.hxx
index 69d25392a448..47d0c0280400 100644
--- a/vcl/inc/salbmp.hxx
+++ b/vcl/inc/salbmp.hxx
@@ -66,6 +66,7 @@ public:
virtual void ReleaseBuffer( BitmapBuffer* pBuffer, BitmapAccessMode nMode ) = 0;
virtual bool GetSystemData( BitmapSystemData& rData ) = 0;
+ virtual bool ScalingSupported() const = 0;
virtual bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) = 0;
virtual bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) = 0;
diff --git a/vcl/inc/unx/salbmp.h b/vcl/inc/unx/salbmp.h
index 81998ba35bea..6b0e722dd7d6 100644
--- a/vcl/inc/unx/salbmp.h
+++ b/vcl/inc/unx/salbmp.h
@@ -144,6 +144,7 @@ public:
virtual void ReleaseBuffer( BitmapBuffer* pBuffer, BitmapAccessMode nMode ) override;
virtual bool GetSystemData( BitmapSystemData& rData ) override;
+ virtual bool ScalingSupported() const override;
virtual bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) override;
virtual bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) override;
};
diff --git a/vcl/inc/win/salbmp.h b/vcl/inc/win/salbmp.h
index d1b96be52a1c..33d88bb92a30 100644
--- a/vcl/inc/win/salbmp.h
+++ b/vcl/inc/win/salbmp.h
@@ -95,6 +95,7 @@ public:
virtual void ReleaseBuffer( BitmapBuffer* pBuffer, BitmapAccessMode nMode ) override;
virtual bool GetSystemData( BitmapSystemData& rData ) override;
+ virtual bool ScalingSupported() const override;
virtual bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) override;
virtual bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) override;
};
diff --git a/vcl/opengl/scale.cxx b/vcl/opengl/scale.cxx
index 3e2b9d4127fc..b5a6affb1b72 100644
--- a/vcl/opengl/scale.cxx
+++ b/vcl/opengl/scale.cxx
@@ -371,6 +371,11 @@ bool OpenGLSalBitmap::ImplScale( const double& rScaleX, const double& rScaleY, B
return false;
}
+bool OpenGLSalBitmap::ScalingSupported() const
+{
+ return true;
+}
+
bool OpenGLSalBitmap::Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag )
{
OpenGLVCLContextZone aContextZone;
diff --git a/vcl/quartz/salbmp.cxx b/vcl/quartz/salbmp.cxx
index 86c4dabd4f05..8d6585bf151d 100644
--- a/vcl/quartz/salbmp.cxx
+++ b/vcl/quartz/salbmp.cxx
@@ -1040,6 +1040,11 @@ bool QuartzSalBitmap::GetSystemData( BitmapSystemData& rData )
return bRet;
}
+bool QuartzSalBitmap::ScalingSupported() const
+{
+ return false;
+}
+
bool QuartzSalBitmap::Scale( const double& /*rScaleX*/, const double& /*rScaleY*/, BmpScaleFlag /*nScaleFlag*/ )
{
return false;
diff --git a/vcl/source/gdi/bitmap3.cxx b/vcl/source/gdi/bitmap3.cxx
index cde6cf28d2d8..166b48a41e7b 100644
--- a/vcl/source/gdi/bitmap3.cxx
+++ b/vcl/source/gdi/bitmap3.cxx
@@ -879,7 +879,7 @@ bool Bitmap::Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag n
const sal_uInt16 nStartCount(GetBitCount());
- if (mxImpBmp)
+ if (mxImpBmp && mxImpBmp->ImplScalingSupported())
{
// implementation specific scaling
std::shared_ptr<ImpBitmap> xImpBmp(new ImpBitmap);
diff --git a/vcl/source/gdi/impbmp.cxx b/vcl/source/gdi/impbmp.cxx
index 25ebb604d0f1..4342bc8e6402 100644
--- a/vcl/source/gdi/impbmp.cxx
+++ b/vcl/source/gdi/impbmp.cxx
@@ -102,6 +102,11 @@ void ImpBitmap::ImplInvalidateChecksum()
mpSalBitmap->InvalidateChecksum();
}
+bool ImpBitmap::ImplScalingSupported() const
+{
+ return mpSalBitmap->ScalingSupported();
+}
+
bool ImpBitmap::ImplScale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag )
{
return mpSalBitmap->Scale( rScaleX, rScaleY, nScaleFlag );
diff --git a/vcl/unx/generic/gdi/salbmp.cxx b/vcl/unx/generic/gdi/salbmp.cxx
index 905232319123..fbd0ec07b353 100644
--- a/vcl/unx/generic/gdi/salbmp.cxx
+++ b/vcl/unx/generic/gdi/salbmp.cxx
@@ -911,6 +911,11 @@ bool X11SalBitmap::GetSystemData( BitmapSystemData& rData )
return false;
}
+bool X11SalBitmap::ScalingSupported() const
+{
+ return false;
+}
+
bool X11SalBitmap::Scale( const double& /*rScaleX*/, const double& /*rScaleY*/, BmpScaleFlag /*nScaleFlag*/ )
{
return false;
diff --git a/vcl/win/gdi/salbmp.cxx b/vcl/win/gdi/salbmp.cxx
index 4470576edfd7..8b95249da6d8 100644
--- a/vcl/win/gdi/salbmp.cxx
+++ b/vcl/win/gdi/salbmp.cxx
@@ -1063,6 +1063,11 @@ bool WinSalBitmap::GetSystemData( BitmapSystemData& rData )
return bRet;
}
+bool WinSalBitmap::ScalingSupported() const
+{
+ return false;
+}
+
bool WinSalBitmap::Scale( const double& /*rScaleX*/, const double& /*rScaleY*/, BmpScaleFlag /*nScaleFlag*/ )
{
return false;