[PATCH] Use supplied hdc for DIB_RGB_COLORS if it's valid
Nikolay Sivov
nsivov at codeweavers.com
Mon Apr 12 04:00:45 CDT 2010
---
dlls/gdi32/dib.c | 17 +++++++++++------
1 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c
index 767c0a9..eebc321 100644
--- a/dlls/gdi32/dib.c
+++ b/dlls/gdi32/dib.c
@@ -332,21 +332,26 @@ INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan,
UINT lines, LPCVOID bits, const BITMAPINFO *info,
UINT coloruse )
{
- DC *dc;
+ DC *dc = get_dc_ptr( hdc );
+ BOOL delete_hdc = FALSE;
BITMAPOBJ *bitmap;
INT result = 0;
- if (coloruse == DIB_RGB_COLORS) hdc = CreateCompatibleDC(0);
+ if (coloruse == DIB_RGB_COLORS && !dc)
+ {
+ hdc = CreateCompatibleDC(0);
+ dc = get_dc_ptr( hdc );
+ delete_hdc = TRUE;
+ }
- if (!(dc = get_dc_ptr( hdc )))
- return 0;
+ if (!dc) return 0;
update_dc( dc );
if (!(bitmap = GDI_GetObjPtr( hbitmap, OBJ_BITMAP )))
{
release_dc_ptr( dc );
- if (coloruse == DIB_RGB_COLORS) DeleteDC(hdc);
+ if (delete_hdc) DeleteDC(hdc);
return 0;
}
@@ -365,7 +370,7 @@ INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan,
done:
GDI_ReleaseObj( hbitmap );
release_dc_ptr( dc );
- if (coloruse == DIB_RGB_COLORS) DeleteDC(hdc);
+ if (delete_hdc) DeleteDC(hdc);
return result;
}
--
1.5.6.5
--=-L1AGMdydLyfvFv3l6v4/--
More information about the wine-patches
mailing list