[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