summaryrefslogtreecommitdiff
path: root/vcl/source/gdi/virdev.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/source/gdi/virdev.cxx')
-rw-r--r--vcl/source/gdi/virdev.cxx13
1 files changed, 10 insertions, 3 deletions
diff --git a/vcl/source/gdi/virdev.cxx b/vcl/source/gdi/virdev.cxx
index b94b6c20e1d6..c453d91ef81d 100644
--- a/vcl/source/gdi/virdev.cxx
+++ b/vcl/source/gdi/virdev.cxx
@@ -255,6 +255,12 @@ VirtualDevice::VirtualDevice(const SystemGraphicsData *pData, const Size &rSize,
VirtualDevice::~VirtualDevice()
{
SAL_INFO( "vcl.gdi", "VirtualDevice::~VirtualDevice()" );
+ disposeOnce();
+}
+
+void VirtualDevice::dispose()
+{
+ SAL_INFO( "vcl.gdi", "VirtualDevice::dispose()" );
ImplSVData* pSVData = ImplGetSVData();
@@ -272,6 +278,8 @@ VirtualDevice::~VirtualDevice()
mpNext->mpPrev = mpPrev;
else
pSVData->maGDIData.mpLastVirDev = mpPrev;
+
+ OutputDevice::dispose();
}
bool VirtualDevice::InnerImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
@@ -392,13 +400,12 @@ bool VirtualDevice::ImplSetOutputSizePixel( const Size& rNewSize, bool bErase,
// #110958# Setup alpha bitmap
if(mpAlphaVDev && mpAlphaVDev->GetOutputSizePixel() != rNewSize)
{
- delete mpAlphaVDev;
- mpAlphaVDev = 0L;
+ mpAlphaVDev.disposeAndClear();
}
if( !mpAlphaVDev )
{
- mpAlphaVDev = new VirtualDevice( *this, mnAlphaDepth );
+ mpAlphaVDev = VclPtr<VirtualDevice>::Create( *this, mnAlphaDepth );
mpAlphaVDev->InnerImplSetOutputSizePixel(rNewSize, bErase,
basebmp::RawMemorySharedArray(),
bTopDown );