summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Shilin <dshil@fastmail.com>2019-01-20 01:24:02 -0800
committerMike Kaganski <mike.kaganski@collabora.com>2019-02-01 12:45:38 +0100
commitcd520894e7092349f1a7aad07066376bb28571fc (patch)
treeed6e3e92e2b35407915294a677fd0538247ce97b
parentcd5e4e1f99960910f89855ddc3b7bfea0855d4b7 (diff)
tdf#107792 vcl/win: use ScopedGDI in WinSalVirtualDevice
Change-Id: Ia804f4ab527870ded8d57aa0d49aae1d357b7ac9 Reviewed-on: https://gerrit.libreoffice.org/66649 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
-rw-r--r--vcl/inc/win/salvd.h3
-rw-r--r--vcl/win/gdi/salvd.cxx55
2 files changed, 28 insertions, 30 deletions
diff --git a/vcl/inc/win/salvd.h b/vcl/inc/win/salvd.h
index f4825836036e..4121d2c89979 100644
--- a/vcl/inc/win/salvd.h
+++ b/vcl/inc/win/salvd.h
@@ -21,6 +21,7 @@
#define INCLUDED_VCL_INC_WIN_SALVD_H
#include <sal/config.h>
+#include <win/scoped_gdi.hxx>
#include <memory>
@@ -33,7 +34,7 @@ class WinSalVirtualDevice : public SalVirtualDevice
{
private:
HDC mhLocalDC; // HDC or 0 for Cache Device
- HBITMAP mhBmp; // Memory Bitmap
+ ScopedHBITMAP mhBmp; // Memory Bitmap
HBITMAP mhDefBmp; // Default Bitmap
std::unique_ptr<WinSalGraphics> mpGraphics; // current VirDev graphics
WinSalVirtualDevice* mpNext; // next VirDev
diff --git a/vcl/win/gdi/salvd.cxx b/vcl/win/gdi/salvd.cxx
index f0cf1fc9f47b..6dc94f0b12a2 100644
--- a/vcl/win/gdi/salvd.cxx
+++ b/vcl/win/gdi/salvd.cxx
@@ -30,6 +30,7 @@
#include <win/salvd.h>
#include <opengl/win/gdiimpl.hxx>
#include <sal/log.hxx>
+#include <o3tl/temporary.hxx>
HBITMAP WinSalVirtualDevice::ImplCreateVirDevBitmap(HDC hDC, long nDX, long nDY, sal_uInt16 nBitCount, void **ppData)
{
@@ -184,8 +185,8 @@ WinSalVirtualDevice::~WinSalVirtualDevice()
SelectBitmap( mpGraphics->getHDC(), mhDefBmp );
if( !mbForeignDC )
DeleteDC( mpGraphics->getHDC() );
- if( mhBmp )
- DeleteBitmap( mhBmp );
+
+ mhBmp.reset();
mpGraphics.reset();
}
@@ -209,35 +210,31 @@ bool WinSalVirtualDevice::SetSize( long nDX, long nDY )
{
if( mbForeignDC || !mhBmp )
return true; // ???
- else
+
+ HBITMAP hNewBmp = ImplCreateVirDevBitmap(getHDC(), nDX, nDY, mnBitCount,
+ &o3tl::temporary<void*>(nullptr));
+ if (!hNewBmp)
{
- void *pDummy;
- HBITMAP hNewBmp = ImplCreateVirDevBitmap(getHDC(), nDX, nDY, mnBitCount, &pDummy);
- if ( hNewBmp )
- {
- mnWidth = nDX;
- mnHeight = nDY;
-
- SelectBitmap( getHDC(), hNewBmp );
- DeleteBitmap( mhBmp );
- mhBmp = hNewBmp;
-
- if (mpGraphics)
- {
- WinOpenGLSalGraphicsImpl *pImpl;
- pImpl = dynamic_cast< WinOpenGLSalGraphicsImpl * >(mpGraphics->GetImpl());
- if (pImpl)
- pImpl->Init();
- }
- return true;
- }
- else
- {
- mnWidth = 0;
- mnHeight = 0;
- return false;
- }
+ mnWidth = 0;
+ mnHeight = 0;
+ return false;
}
+
+ mnWidth = nDX;
+ mnHeight = nDY;
+
+ SelectBitmap(getHDC(), hNewBmp);
+ mhBmp.reset(hNewBmp);
+
+ if (mpGraphics)
+ {
+ WinOpenGLSalGraphicsImpl *pImpl;
+ pImpl = dynamic_cast< WinOpenGLSalGraphicsImpl * >(mpGraphics->GetImpl());
+ if (pImpl)
+ pImpl->Init();
+ }
+
+ return true;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */