Kaydet (Commit) 2351701d authored tarafından Noel Grandin's avatar Noel Grandin

loplugin:useuniqueptr pass BitmapBuffer around via std::unique_ptr

Change-Id: I0a20e7d3816714e42d6863fff27734dd08ae24ae
Reviewed-on: https://gerrit.libreoffice.org/53357Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst 7c9d8afd
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <vcl/dllapi.h> #include <vcl/dllapi.h>
#include <o3tl/typed_flags_set.hxx> #include <o3tl/typed_flags_set.hxx>
#include <vector> #include <vector>
#include <memory>
typedef sal_uInt8* Scanline; typedef sal_uInt8* Scanline;
typedef const sal_uInt8* ConstScanline; typedef const sal_uInt8* ConstScanline;
...@@ -344,7 +345,7 @@ enum class BitmapAccessMode ...@@ -344,7 +345,7 @@ enum class BitmapAccessMode
Write Write
}; };
VCL_DLLPUBLIC BitmapBuffer* StretchAndConvert( VCL_DLLPUBLIC std::unique_ptr<BitmapBuffer> StretchAndConvert(
const BitmapBuffer& rSrcBuffer, const SalTwoRect& rTwoRect, const BitmapBuffer& rSrcBuffer, const SalTwoRect& rTwoRect,
ScanlineFormat nDstBitmapFormat, const BitmapPalette* pDstPal = nullptr, const ColorMask* pDstMask = nullptr ); ScanlineFormat nDstBitmapFormat, const BitmapPalette* pDstPal = nullptr, const ColorMask* pDstMask = nullptr );
......
...@@ -38,7 +38,7 @@ SvpSalBitmap::~SvpSalBitmap() ...@@ -38,7 +38,7 @@ SvpSalBitmap::~SvpSalBitmap()
Destroy(); Destroy();
} }
BitmapBuffer* ImplCreateDIB( std::unique_ptr<BitmapBuffer> ImplCreateDIB(
const Size& rSize, const Size& rSize,
sal_uInt16 nBitCount, sal_uInt16 nBitCount,
const BitmapPalette& rPal) const BitmapPalette& rPal)
...@@ -56,11 +56,11 @@ BitmapBuffer* ImplCreateDIB( ...@@ -56,11 +56,11 @@ BitmapBuffer* ImplCreateDIB(
if (!rSize.Width() || !rSize.Height()) if (!rSize.Width() || !rSize.Height())
return nullptr; return nullptr;
BitmapBuffer* pDIB = nullptr; std::unique_ptr<BitmapBuffer> pDIB;
try try
{ {
pDIB = new BitmapBuffer; pDIB.reset(new BitmapBuffer);
} }
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
...@@ -115,14 +115,12 @@ BitmapBuffer* ImplCreateDIB( ...@@ -115,14 +115,12 @@ BitmapBuffer* ImplCreateDIB(
if (bFail) if (bFail)
{ {
SAL_WARN("vcl.gdi", "checked multiply failed"); SAL_WARN("vcl.gdi", "checked multiply failed");
delete pDIB;
return nullptr; return nullptr;
} }
pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase); pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase);
if (pDIB->mnScanlineSize < nScanlineBase/8) if (pDIB->mnScanlineSize < nScanlineBase/8)
{ {
SAL_WARN("vcl.gdi", "scanline calculation wraparound"); SAL_WARN("vcl.gdi", "scanline calculation wraparound");
delete pDIB;
return nullptr; return nullptr;
} }
pDIB->mnBitCount = nBitCount; pDIB->mnBitCount = nBitCount;
...@@ -138,7 +136,6 @@ BitmapBuffer* ImplCreateDIB( ...@@ -138,7 +136,6 @@ BitmapBuffer* ImplCreateDIB(
SAL_WARN_IF(bFail, "vcl.gdi", "checked multiply failed"); SAL_WARN_IF(bFail, "vcl.gdi", "checked multiply failed");
if (bFail || size > SAL_MAX_INT32/2) if (bFail || size > SAL_MAX_INT32/2)
{ {
delete pDIB;
return nullptr; return nullptr;
} }
...@@ -148,8 +145,7 @@ BitmapBuffer* ImplCreateDIB( ...@@ -148,8 +145,7 @@ BitmapBuffer* ImplCreateDIB(
#ifdef __SANITIZE_ADDRESS__ #ifdef __SANITIZE_ADDRESS__
if (!pDIB->mpBits) if (!pDIB->mpBits)
{ // can only happen with ASAN allocator_may_return_null=1 { // can only happen with ASAN allocator_may_return_null=1
delete pDIB; pDIB.reset();
pDIB = nullptr;
} }
else else
#endif #endif
...@@ -159,17 +155,16 @@ BitmapBuffer* ImplCreateDIB( ...@@ -159,17 +155,16 @@ BitmapBuffer* ImplCreateDIB(
} }
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
delete pDIB; pDIB.reset();
pDIB = nullptr;
} }
return pDIB; return pDIB;
} }
void SvpSalBitmap::Create(BitmapBuffer *pBuf) void SvpSalBitmap::Create(std::unique_ptr<BitmapBuffer> pBuf)
{ {
Destroy(); Destroy();
mpDIB = pBuf; mpDIB = std::move(pBuf);
} }
bool SvpSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const BitmapPalette& rPal) bool SvpSalBitmap::Create(const Size& rSize, sal_uInt16 nBitCount, const BitmapPalette& rPal)
...@@ -188,13 +183,12 @@ bool SvpSalBitmap::Create(const SalBitmap& rBmp) ...@@ -188,13 +183,12 @@ bool SvpSalBitmap::Create(const SalBitmap& rBmp)
if (rSalBmp.mpDIB) if (rSalBmp.mpDIB)
{ {
// TODO: reference counting... // TODO: reference counting...
mpDIB = new BitmapBuffer( *rSalBmp.mpDIB ); mpDIB.reset(new BitmapBuffer( *rSalBmp.mpDIB ));
const size_t size = mpDIB->mnScanlineSize * mpDIB->mnHeight; const size_t size = mpDIB->mnScanlineSize * mpDIB->mnHeight;
if (size > SAL_MAX_INT32/2) if (size > SAL_MAX_INT32/2)
{ {
delete mpDIB; mpDIB.reset();
mpDIB = nullptr;
return false; return false;
} }
...@@ -206,8 +200,7 @@ bool SvpSalBitmap::Create(const SalBitmap& rBmp) ...@@ -206,8 +200,7 @@ bool SvpSalBitmap::Create(const SalBitmap& rBmp)
} }
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
delete mpDIB; mpDIB.reset();
mpDIB = nullptr;
} }
} }
...@@ -236,8 +229,7 @@ void SvpSalBitmap::Destroy() ...@@ -236,8 +229,7 @@ void SvpSalBitmap::Destroy()
if (mpDIB) if (mpDIB)
{ {
delete[] mpDIB->mpBits; delete[] mpDIB->mpBits;
delete mpDIB; mpDIB.reset();
mpDIB = nullptr;
} }
} }
...@@ -268,7 +260,7 @@ sal_uInt16 SvpSalBitmap::GetBitCount() const ...@@ -268,7 +260,7 @@ sal_uInt16 SvpSalBitmap::GetBitCount() const
BitmapBuffer* SvpSalBitmap::AcquireBuffer(BitmapAccessMode) BitmapBuffer* SvpSalBitmap::AcquireBuffer(BitmapAccessMode)
{ {
return mpDIB; return mpDIB.get();
} }
void SvpSalBitmap::ReleaseBuffer(BitmapBuffer*, BitmapAccessMode nMode) void SvpSalBitmap::ReleaseBuffer(BitmapBuffer*, BitmapAccessMode nMode)
......
...@@ -134,7 +134,7 @@ namespace ...@@ -134,7 +134,7 @@ namespace
} }
} }
BitmapBuffer* FastConvert24BitRgbTo32BitCairo(const BitmapBuffer* pSrc) std::unique_ptr<BitmapBuffer> FastConvert24BitRgbTo32BitCairo(const BitmapBuffer* pSrc)
{ {
if (pSrc == nullptr) if (pSrc == nullptr)
return nullptr; return nullptr;
...@@ -142,7 +142,7 @@ namespace ...@@ -142,7 +142,7 @@ namespace
assert(pSrc->mnFormat == SVP_24BIT_FORMAT); assert(pSrc->mnFormat == SVP_24BIT_FORMAT);
const long nWidth = pSrc->mnWidth; const long nWidth = pSrc->mnWidth;
const long nHeight = pSrc->mnHeight; const long nHeight = pSrc->mnHeight;
BitmapBuffer* pDst = new BitmapBuffer; std::unique_ptr<BitmapBuffer> pDst(new BitmapBuffer);
pDst->mnFormat = (ScanlineFormat::N32BitTcArgb | ScanlineFormat::TopDown); pDst->mnFormat = (ScanlineFormat::N32BitTcArgb | ScanlineFormat::TopDown);
pDst->mnWidth = nWidth; pDst->mnWidth = nWidth;
pDst->mnHeight = nHeight; pDst->mnHeight = nHeight;
...@@ -156,7 +156,6 @@ namespace ...@@ -156,7 +156,6 @@ namespace
{ {
SAL_WARN("vcl.gdi", "checked multiply failed"); SAL_WARN("vcl.gdi", "checked multiply failed");
pDst->mpBits = nullptr; pDst->mpBits = nullptr;
delete pDst;
return nullptr; return nullptr;
} }
...@@ -165,7 +164,6 @@ namespace ...@@ -165,7 +164,6 @@ namespace
{ {
SAL_WARN("vcl.gdi", "scanline calculation wraparound"); SAL_WARN("vcl.gdi", "scanline calculation wraparound");
pDst->mpBits = nullptr; pDst->mpBits = nullptr;
delete pDst;
return nullptr; return nullptr;
} }
...@@ -177,7 +175,6 @@ namespace ...@@ -177,7 +175,6 @@ namespace
{ {
// memory exception, clean up // memory exception, clean up
pDst->mpBits = nullptr; pDst->mpBits = nullptr;
delete pDst;
return nullptr; return nullptr;
} }
...@@ -242,10 +239,10 @@ namespace ...@@ -242,10 +239,10 @@ namespace
const BitmapBuffer* pSrc = rSrcBmp.GetBuffer(); const BitmapBuffer* pSrc = rSrcBmp.GetBuffer();
const SalTwoRect aTwoRect = { 0, 0, pSrc->mnWidth, pSrc->mnHeight, const SalTwoRect aTwoRect = { 0, 0, pSrc->mnWidth, pSrc->mnHeight,
0, 0, pSrc->mnWidth, pSrc->mnHeight }; 0, 0, pSrc->mnWidth, pSrc->mnHeight };
BitmapBuffer* pTmp = (pSrc->mnFormat == SVP_24BIT_FORMAT std::unique_ptr<BitmapBuffer> pTmp = (pSrc->mnFormat == SVP_24BIT_FORMAT
? FastConvert24BitRgbTo32BitCairo(pSrc) ? FastConvert24BitRgbTo32BitCairo(pSrc)
: StretchAndConvert(*pSrc, aTwoRect, SVP_CAIRO_FORMAT)); : StretchAndConvert(*pSrc, aTwoRect, SVP_CAIRO_FORMAT));
aTmpBmp.Create(pTmp); aTmpBmp.Create(std::move(pTmp));
assert(aTmpBmp.GetBitCount() == 32); assert(aTmpBmp.GetBitCount() == 32);
source = SvpSalGraphics::createCairoSurface(aTmpBmp.GetBuffer()); source = SvpSalGraphics::createCairoSurface(aTmpBmp.GetBuffer());
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
class VCL_DLLPUBLIC SvpSalBitmap : public SalBitmap class VCL_DLLPUBLIC SvpSalBitmap : public SalBitmap
{ {
BitmapBuffer* mpDIB; std::unique_ptr<BitmapBuffer> mpDIB;
public: public:
SvpSalBitmap() : mpDIB(nullptr) {} SvpSalBitmap() : mpDIB(nullptr) {}
virtual ~SvpSalBitmap() override; virtual ~SvpSalBitmap() override;
...@@ -44,10 +44,10 @@ public: ...@@ -44,10 +44,10 @@ public:
virtual bool Create( const css::uno::Reference< css::rendering::XBitmapCanvas >& rBitmapCanvas, virtual bool Create( const css::uno::Reference< css::rendering::XBitmapCanvas >& rBitmapCanvas,
Size& rSize, Size& rSize,
bool bMask = false ) override; bool bMask = false ) override;
void Create(BitmapBuffer *pBuf); void Create(std::unique_ptr<BitmapBuffer> pBuf);
const BitmapBuffer* GetBuffer() const const BitmapBuffer* GetBuffer() const
{ {
return mpDIB; return mpDIB.get();
} }
virtual void Destroy() final override; virtual void Destroy() final override;
virtual Size GetSize() const override; virtual Size GetSize() const override;
......
...@@ -40,13 +40,15 @@ class VCLPLUG_GEN_PUBLIC X11SalBitmap : public SalBitmap ...@@ -40,13 +40,15 @@ class VCLPLUG_GEN_PUBLIC X11SalBitmap : public SalBitmap
{ {
private: private:
static BitmapBuffer* ImplCreateDIB( static std::unique_ptr<BitmapBuffer>
ImplCreateDIB(
const Size& rSize, const Size& rSize,
sal_uInt16 nBitCount, sal_uInt16 nBitCount,
const BitmapPalette& rPal const BitmapPalette& rPal
); );
static BitmapBuffer* ImplCreateDIB( static std::unique_ptr<BitmapBuffer>
ImplCreateDIB(
Drawable aDrawable, Drawable aDrawable,
SalX11Screen nXScreen, SalX11Screen nXScreen,
long nDrawableDepth, long nDrawableDepth,
...@@ -68,7 +70,7 @@ public: ...@@ -68,7 +70,7 @@ public:
private: private:
BitmapBuffer* mpDIB; std::unique_ptr<BitmapBuffer> mpDIB;
ImplSalDDB* mpDDB; ImplSalDDB* mpDDB;
bool mbGrey; bool mbGrey;
......
...@@ -259,13 +259,13 @@ static void ImplTCToPAL( const BitmapBuffer& rSrcBuffer, BitmapBuffer const & rD ...@@ -259,13 +259,13 @@ static void ImplTCToPAL( const BitmapBuffer& rSrcBuffer, BitmapBuffer const & rD
} }
} }
BitmapBuffer* StretchAndConvert( std::unique_ptr<BitmapBuffer> StretchAndConvert(
const BitmapBuffer& rSrcBuffer, const SalTwoRect& rTwoRect, const BitmapBuffer& rSrcBuffer, const SalTwoRect& rTwoRect,
ScanlineFormat nDstBitmapFormat, const BitmapPalette* pDstPal, const ColorMask* pDstMask ) ScanlineFormat nDstBitmapFormat, const BitmapPalette* pDstPal, const ColorMask* pDstMask )
{ {
FncGetPixel pFncGetPixel; FncGetPixel pFncGetPixel;
FncSetPixel pFncSetPixel; FncSetPixel pFncSetPixel;
BitmapBuffer* pDstBuffer = new BitmapBuffer; std::unique_ptr<BitmapBuffer> pDstBuffer(new BitmapBuffer);
// set function for getting pixels // set function for getting pixels
switch( RemoveScanline( rSrcBuffer.mnFormat ) ) switch( RemoveScanline( rSrcBuffer.mnFormat ) )
...@@ -335,7 +335,6 @@ BitmapBuffer* StretchAndConvert( ...@@ -335,7 +335,6 @@ BitmapBuffer* StretchAndConvert(
{ {
SAL_WARN("vcl.gdi", "checked multiply failed"); SAL_WARN("vcl.gdi", "checked multiply failed");
pDstBuffer->mpBits = nullptr; pDstBuffer->mpBits = nullptr;
delete pDstBuffer;
return nullptr; return nullptr;
} }
pDstBuffer->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase); pDstBuffer->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase);
...@@ -343,7 +342,6 @@ BitmapBuffer* StretchAndConvert( ...@@ -343,7 +342,6 @@ BitmapBuffer* StretchAndConvert(
{ {
SAL_WARN("vcl.gdi", "scanline calculation wraparound"); SAL_WARN("vcl.gdi", "scanline calculation wraparound");
pDstBuffer->mpBits = nullptr; pDstBuffer->mpBits = nullptr;
delete pDstBuffer;
return nullptr; return nullptr;
} }
try try
...@@ -354,7 +352,6 @@ BitmapBuffer* StretchAndConvert( ...@@ -354,7 +352,6 @@ BitmapBuffer* StretchAndConvert(
{ {
// memory exception, clean up // memory exception, clean up
pDstBuffer->mpBits = nullptr; pDstBuffer->mpBits = nullptr;
delete pDstBuffer;
return nullptr; return nullptr;
} }
...@@ -368,7 +365,6 @@ BitmapBuffer* StretchAndConvert( ...@@ -368,7 +365,6 @@ BitmapBuffer* StretchAndConvert(
assert(pDstPal && "destination buffer requires palette"); assert(pDstPal && "destination buffer requires palette");
if (!pDstPal) if (!pDstPal)
{ {
delete pDstBuffer;
return nullptr; return nullptr;
} }
pDstBuffer->maPalette = *pDstPal; pDstBuffer->maPalette = *pDstPal;
...@@ -381,7 +377,6 @@ BitmapBuffer* StretchAndConvert( ...@@ -381,7 +377,6 @@ BitmapBuffer* StretchAndConvert(
assert(pDstMask && "destination buffer requires color mask"); assert(pDstMask && "destination buffer requires color mask");
if (!pDstMask) if (!pDstMask)
{ {
delete pDstBuffer;
return nullptr; return nullptr;
} }
pDstBuffer->maColorMask = *pDstMask; pDstBuffer->maColorMask = *pDstMask;
...@@ -409,7 +404,6 @@ BitmapBuffer* StretchAndConvert( ...@@ -409,7 +404,6 @@ BitmapBuffer* StretchAndConvert(
// memory exception, clean up // memory exception, clean up
// remark: the buffer ptr causing the exception // remark: the buffer ptr causing the exception
// is still NULL here // is still NULL here
delete pDstBuffer;
return nullptr; return nullptr;
} }
......
...@@ -119,7 +119,7 @@ namespace ...@@ -119,7 +119,7 @@ namespace
} }
#endif #endif
BitmapBuffer* X11SalBitmap::ImplCreateDIB( std::unique_ptr<BitmapBuffer> X11SalBitmap::ImplCreateDIB(
const Size& rSize, const Size& rSize,
sal_uInt16 nBitCount, sal_uInt16 nBitCount,
const BitmapPalette& rPal) const BitmapPalette& rPal)
...@@ -133,14 +133,14 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB( ...@@ -133,14 +133,14 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB(
, "Unsupported BitCount!" , "Unsupported BitCount!"
); );
BitmapBuffer* pDIB = nullptr; std::unique_ptr<BitmapBuffer> pDIB;
if( !rSize.Width() || !rSize.Height() ) if( !rSize.Width() || !rSize.Height() )
return nullptr; return nullptr;
try try
{ {
pDIB = new BitmapBuffer; pDIB.reset(new BitmapBuffer);
} }
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
...@@ -198,14 +198,12 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB( ...@@ -198,14 +198,12 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB(
if (bFail) if (bFail)
{ {
SAL_WARN("vcl.gdi", "checked multiply failed"); SAL_WARN("vcl.gdi", "checked multiply failed");
delete pDIB;
return nullptr; return nullptr;
} }
pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase); pDIB->mnScanlineSize = AlignedWidth4Bytes(nScanlineBase);
if (pDIB->mnScanlineSize < nScanlineBase/8) if (pDIB->mnScanlineSize < nScanlineBase/8)
{ {
SAL_WARN("vcl.gdi", "scanline calculation wraparound"); SAL_WARN("vcl.gdi", "scanline calculation wraparound");
delete pDIB;
return nullptr; return nullptr;
} }
pDIB->mnBitCount = nBitCount; pDIB->mnBitCount = nBitCount;
...@@ -221,19 +219,18 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB( ...@@ -221,19 +219,18 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB(
pDIB->mpBits = new sal_uInt8[ pDIB->mnScanlineSize * pDIB->mnHeight ]; pDIB->mpBits = new sal_uInt8[ pDIB->mnScanlineSize * pDIB->mnHeight ];
#if defined HAVE_VALGRIND_HEADERS #if defined HAVE_VALGRIND_HEADERS
if (RUNNING_ON_VALGRIND) if (RUNNING_ON_VALGRIND)
blankExtraSpace(pDIB); blankExtraSpace(pDIB.get());
#endif #endif
} }
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
delete pDIB; return nullptr;
pDIB = nullptr;
} }
return pDIB; return pDIB;
} }
BitmapBuffer* X11SalBitmap::ImplCreateDIB( std::unique_ptr<BitmapBuffer> X11SalBitmap::ImplCreateDIB(
Drawable aDrawable, Drawable aDrawable,
SalX11Screen nScreen, SalX11Screen nScreen,
long nDrawableDepth, long nDrawableDepth,
...@@ -243,7 +240,7 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB( ...@@ -243,7 +240,7 @@ BitmapBuffer* X11SalBitmap::ImplCreateDIB(
long nHeight, long nHeight,
bool bGrey bool bGrey
) { ) {
BitmapBuffer* pDIB = nullptr; std::unique_ptr<BitmapBuffer> pDIB;
if( aDrawable && nWidth && nHeight && nDrawableDepth ) if( aDrawable && nWidth && nHeight && nDrawableDepth )
{ {
...@@ -438,7 +435,7 @@ XImage* X11SalBitmap::ImplCreateXImage( ...@@ -438,7 +435,7 @@ XImage* X11SalBitmap::ImplCreateXImage(
if( pImage ) if( pImage )
{ {
BitmapBuffer* pDstBuf; std::unique_ptr<BitmapBuffer> pDstBuf;
ScanlineFormat nDstFormat = ScanlineFormat::TopDown; ScanlineFormat nDstFormat = ScanlineFormat::TopDown;
std::unique_ptr<BitmapPalette> xPal; std::unique_ptr<BitmapPalette> xPal;
std::unique_ptr<ColorMask> xMask; std::unique_ptr<ColorMask> xMask;
...@@ -563,7 +560,7 @@ XImage* X11SalBitmap::ImplCreateXImage( ...@@ -563,7 +560,7 @@ XImage* X11SalBitmap::ImplCreateXImage(
{ {
#if defined HAVE_VALGRIND_HEADERS #if defined HAVE_VALGRIND_HEADERS
if (RUNNING_ON_VALGRIND) if (RUNNING_ON_VALGRIND)
blankExtraSpace(pDstBuf); blankExtraSpace(pDstBuf.get());
#endif #endif
// set data in buffer as data member in pImage // set data in buffer as data member in pImage
pImage->data = reinterpret_cast<char*>(pDstBuf->mpBits); pImage->data = reinterpret_cast<char*>(pDstBuf->mpBits);
...@@ -574,8 +571,7 @@ XImage* X11SalBitmap::ImplCreateXImage( ...@@ -574,8 +571,7 @@ XImage* X11SalBitmap::ImplCreateXImage(
pImage = nullptr; pImage = nullptr;
} }
// destroy buffer; doesn't destroy allocated data in buffer // note that pDstBuf it deleted here, but that doesn't destroy allocated data in buffer
delete pDstBuf;
} }
} }
...@@ -728,20 +724,19 @@ bool X11SalBitmap::Create( const SalBitmap& rSSalBmp ) ...@@ -728,20 +724,19 @@ bool X11SalBitmap::Create( const SalBitmap& rSSalBmp )
if( rSalBmp.mpDIB ) if( rSalBmp.mpDIB )
{ {
// TODO: reference counting... // TODO: reference counting...
mpDIB = new BitmapBuffer( *rSalBmp.mpDIB ); mpDIB.reset(new BitmapBuffer( *rSalBmp.mpDIB ));
// TODO: get rid of this when BitmapBuffer gets copy constructor // TODO: get rid of this when BitmapBuffer gets copy constructor
try try
{ {
mpDIB->mpBits = new sal_uInt8[ mpDIB->mnScanlineSize * mpDIB->mnHeight ]; mpDIB->mpBits = new sal_uInt8[ mpDIB->mnScanlineSize * mpDIB->mnHeight ];
#if defined HAVE_VALGRIND_HEADERS #if defined HAVE_VALGRIND_HEADERS
if (RUNNING_ON_VALGRIND) if (RUNNING_ON_VALGRIND)
blankExtraSpace(mpDIB); blankExtraSpace(mpDIB.get());
#endif #endif
} }
catch (const std::bad_alloc&) catch (const std::bad_alloc&)
{ {
delete mpDIB; mpDIB.reset();
mpDIB = nullptr;
} }
if( mpDIB ) if( mpDIB )
...@@ -811,8 +806,7 @@ void X11SalBitmap::Destroy() ...@@ -811,8 +806,7 @@ void X11SalBitmap::Destroy()
if( mpDIB ) if( mpDIB )
{ {
delete[] mpDIB->mpBits; delete[] mpDIB->mpBits;
delete mpDIB; mpDIB.reset();
mpDIB = nullptr;
} }
if( mpDDB ) if( mpDDB )
...@@ -872,7 +866,7 @@ BitmapBuffer* X11SalBitmap::AcquireBuffer( BitmapAccessMode /*nMode*/ ) ...@@ -872,7 +866,7 @@ BitmapBuffer* X11SalBitmap::AcquireBuffer( BitmapAccessMode /*nMode*/ )
); );
} }
return mpDIB; return mpDIB.get();
} }
void X11SalBitmap::ReleaseBuffer( BitmapBuffer*, BitmapAccessMode nMode ) void X11SalBitmap::ReleaseBuffer( BitmapBuffer*, BitmapAccessMode nMode )
......
...@@ -266,7 +266,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap() ...@@ -266,7 +266,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap()
} }
BitmapBuffer* pRGB = pSalRGB->AcquireBuffer(BitmapAccessMode::Read); BitmapBuffer* pRGB = pSalRGB->AcquireBuffer(BitmapAccessMode::Read);
BitmapBuffer* pExtraRGB = nullptr; std::unique_ptr<BitmapBuffer> pExtraRGB;
if(pRGB && ScanlineFormat::N24BitTcBgr != (pRGB->mnFormat & ~ScanlineFormat::TopDown)) if(pRGB && ScanlineFormat::N24BitTcBgr != (pRGB->mnFormat & ~ScanlineFormat::TopDown))
{ {
...@@ -278,7 +278,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap() ...@@ -278,7 +278,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap()
ScanlineFormat::N24BitTcBgr); ScanlineFormat::N24BitTcBgr);
pSalRGB->ReleaseBuffer(pRGB, BitmapAccessMode::Write); pSalRGB->ReleaseBuffer(pRGB, BitmapAccessMode::Write);
pRGB = pExtraRGB; pRGB = pExtraRGB.get();
} }
if(pRGB if(pRGB
...@@ -322,9 +322,9 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap() ...@@ -322,9 +322,9 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap()
if(pExtraRGB) if(pExtraRGB)
{ {
// #i123478# shockingly, BitmapBuffer does not free the memory it is controlling // #i123478# shockingly, BitmapBuffer does not free the memory it is controlling
// in its destructor, this *has to be done handish*. Doing it here now // in its destructor, this *has to be done by hand*. Doing it here now
delete[] pExtraRGB->mpBits; delete[] pExtraRGB->mpBits;
delete pExtraRGB; pExtraRGB.reset();
} }
else else
{ {
...@@ -354,7 +354,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph ...@@ -354,7 +354,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph
} }
BitmapBuffer* pRGB = pSalRGB->AcquireBuffer(BitmapAccessMode::Read); BitmapBuffer* pRGB = pSalRGB->AcquireBuffer(BitmapAccessMode::Read);
BitmapBuffer* pExtraRGB = nullptr; std::unique_ptr<BitmapBuffer> pExtraRGB;
if(pRGB && ScanlineFormat::N24BitTcBgr != (pRGB->mnFormat & ~ScanlineFormat::TopDown)) if(pRGB && ScanlineFormat::N24BitTcBgr != (pRGB->mnFormat & ~ScanlineFormat::TopDown))
{ {
...@@ -366,7 +366,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph ...@@ -366,7 +366,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph
ScanlineFormat::N24BitTcBgr); ScanlineFormat::N24BitTcBgr);
pSalRGB->ReleaseBuffer(pRGB, BitmapAccessMode::Read); pSalRGB->ReleaseBuffer(pRGB, BitmapAccessMode::Read);
pRGB = pExtraRGB; pRGB = pExtraRGB.get();
} }
WinSalBitmap* pSalA = const_cast< WinSalBitmap* >(&rAlphaSource); WinSalBitmap* pSalA = const_cast< WinSalBitmap* >(&rAlphaSource);
...@@ -381,7 +381,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph ...@@ -381,7 +381,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph
} }
BitmapBuffer* pA = pSalA->AcquireBuffer(BitmapAccessMode::Read); BitmapBuffer* pA = pSalA->AcquireBuffer(BitmapAccessMode::Read);
BitmapBuffer* pExtraA = nullptr; std::unique_ptr<BitmapBuffer> pExtraA;
if(pA && ScanlineFormat::N8BitPal != (pA->mnFormat & ~ScanlineFormat::TopDown)) if(pA && ScanlineFormat::N8BitPal != (pA->mnFormat & ~ScanlineFormat::TopDown))
{ {
...@@ -396,7 +396,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph ...@@ -396,7 +396,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph
&rTargetPalette); &rTargetPalette);
pSalA->ReleaseBuffer(pA, BitmapAccessMode::Read); pSalA->ReleaseBuffer(pA, BitmapAccessMode::Read);
pA = pExtraA; pA = pExtraA.get();
} }
if(pRGB if(pRGB
...@@ -458,7 +458,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph ...@@ -458,7 +458,7 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph
// #i123478# shockingly, BitmapBuffer does not free the memory it is controlling // #i123478# shockingly, BitmapBuffer does not free the memory it is controlling
// in its destructor, this *has to be done handish*. Doing it here now // in its destructor, this *has to be done handish*. Doing it here now
delete[] pExtraA->mpBits; delete[] pExtraA->mpBits;
delete pExtraA; pExtraA.reset();
} }
else else
{ {
...@@ -473,9 +473,9 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph ...@@ -473,9 +473,9 @@ Gdiplus::Bitmap* WinSalBitmap::ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlph
if(pExtraRGB) if(pExtraRGB)
{ {
// #i123478# shockingly, BitmapBuffer does not free the memory it is controlling // #i123478# shockingly, BitmapBuffer does not free the memory it is controlling
// in its destructor, this *has to be done handish*. Doing it here now // in its destructor, this *has to be done by hand*. Doing it here now
delete[] pExtraRGB->mpBits; delete[] pExtraRGB->mpBits;
delete pExtraRGB; pExtraRGB.reset();
} }
else else
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment