Huw Davies : gdi32: Add helpers to clear and free dib_info structures.
Alexandre Julliard
julliard at winehq.org
Thu May 12 13:57:50 CDT 2011
Module: wine
Branch: master
Commit: 5ac51cd24f386d5bb7136f09e1448ffb5cc1b943
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5ac51cd24f386d5bb7136f09e1448ffb5cc1b943
Author: Huw Davies <huw at codeweavers.com>
Date: Thu May 12 11:27:35 2011 +0100
gdi32: Add helpers to clear and free dib_info structures.
---
dlls/gdi32/dibdrv/dc.c | 48 +++++++++++++++++++++++++++++++++++-------------
1 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c
index e43ec15..a9a53ad 100644
--- a/dlls/gdi32/dibdrv/dc.c
+++ b/dlls/gdi32/dibdrv/dc.c
@@ -27,17 +27,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(dib);
-/***********************************************************************
- * dibdrv_DeleteDC
- */
-static BOOL CDECL dibdrv_DeleteDC( PHYSDEV dev )
-{
- dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
- TRACE("(%p)\n", dev);
- DeleteObject(pdev->clip);
- return 0;
-}
-
static void calc_shift_and_len(DWORD mask, int *shift, int *len)
{
int s, l;
@@ -74,7 +63,7 @@ static void init_bit_fields(dib_info *dib, const DWORD *bit_fields)
calc_shift_and_len(dib->blue_mask, &dib->blue_shift, &dib->blue_len);
}
-static BOOL init_dib(dib_info *dib, const BITMAPINFOHEADER *bi, const DWORD *bit_fields, void *bits)
+static BOOL init_dib_info(dib_info *dib, const BITMAPINFOHEADER *bi, const DWORD *bit_fields, void *bits)
{
static const DWORD bit_fields_888[3] = {0xff0000, 0x00ff00, 0x0000ff};
@@ -119,6 +108,37 @@ static BOOL init_dib(dib_info *dib, const BITMAPINFOHEADER *bi, const DWORD *bit
return TRUE;
}
+static void clear_dib_info(dib_info *dib)
+{
+ dib->bits = NULL;
+}
+
+/**********************************************************************
+ * free_dib_info
+ *
+ * Free the resources associated with a dib and optionally the bits
+ */
+static void free_dib_info(dib_info *dib, BOOL free_bits)
+{
+ if(free_bits)
+ {
+ HeapFree(GetProcessHeap(), 0, dib->bits);
+ dib->bits = NULL;
+ }
+}
+
+/***********************************************************************
+ * dibdrv_DeleteDC
+ */
+static BOOL CDECL dibdrv_DeleteDC( PHYSDEV dev )
+{
+ dibdrv_physdev *pdev = get_dibdrv_pdev(dev);
+ TRACE("(%p)\n", dev);
+ DeleteObject(pdev->clip);
+ free_dib_info(&pdev->dib, FALSE);
+ return 0;
+}
+
/***********************************************************************
* dibdrv_SelectBitmap
*/
@@ -135,7 +155,9 @@ static HBITMAP CDECL dibdrv_SelectBitmap( PHYSDEV dev, HBITMAP bitmap )
pdev->clip = CreateRectRgn(0, 0, 0, 0);
pdev->defer = 0;
- if(!init_dib(&pdev->dib, &bmp->dib->dsBmih, bmp->dib->dsBitfields, bmp->dib->dsBm.bmBits))
+ clear_dib_info(&pdev->dib);
+
+ if(!init_dib_info(&pdev->dib, &bmp->dib->dsBmih, bmp->dib->dsBitfields, bmp->dib->dsBm.bmBits))
pdev->defer |= DEFER_FORMAT;
GDI_ReleaseObj( bitmap );
More information about the wine-cvs
mailing list