Module: wine Branch: master Commit: 5bd003edaa78e7ac6a84b35c056866df53db23de URL: http://source.winehq.org/git/wine.git/?a=commit;h=5bd003edaa78e7ac6a84b35c05...
Author: Huw Davies huw@codeweavers.com Date: Thu Sep 8 09:55:03 2011 +0100
gdi32: When creating a dib_info from a ddb, always make a copy of the colour map.
---
dlls/gdi32/dibdrv/bitblt.c | 17 +++++++++++++---- dlls/gdi32/dibdrv/dc.c | 3 ++- 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/dlls/gdi32/dibdrv/bitblt.c b/dlls/gdi32/dibdrv/bitblt.c index 356d276..0bb37fb 100644 --- a/dlls/gdi32/dibdrv/bitblt.c +++ b/dlls/gdi32/dibdrv/bitblt.c @@ -604,7 +604,7 @@ DWORD dibdrv_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info, struct gdi_image_bits *bits, struct bitblt_coords *src ) { DWORD ret = ERROR_SUCCESS; - dib_info *dib, stand_alone; + dib_info *dib = NULL, stand_alone;
TRACE( "%p %p %p\n", dev, hbitmap, info );
@@ -651,7 +651,12 @@ DWORD dibdrv_GetImage( PHYSDEV dev, HBITMAP hbitmap, BITMAPINFO *info, }
done: - if (hbitmap) GDI_ReleaseObj( hbitmap ); + if (hbitmap) + { + if (dib) free_dib_info( dib ); + GDI_ReleaseObj( hbitmap ); + } + return ret; }
@@ -707,7 +712,7 @@ DWORD dibdrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *info const struct gdi_image_bits *bits, struct bitblt_coords *src, struct bitblt_coords *dst, DWORD rop ) { - dib_info *dib, stand_alone; + dib_info *dib = NULL, stand_alone; DWORD ret; dib_info src_dib; HRGN saved_clip = NULL; @@ -780,7 +785,11 @@ update_format: ret = ERROR_BAD_FORMAT;
done: - if (hbitmap) GDI_ReleaseObj( hbitmap ); + if (hbitmap) + { + if (dib) free_dib_info( dib ); + GDI_ReleaseObj( hbitmap ); + }
return ret; } diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c index 8ab7a06..99b441c 100644 --- a/dlls/gdi32/dibdrv/dc.c +++ b/dlls/gdi32/dibdrv/dc.c @@ -219,7 +219,8 @@ BOOL init_dib_info_from_bitmapobj(dib_info *dib, BITMAPOBJ *bmp, enum dib_info_f BITMAPINFO *info = (BITMAPINFO *)buffer;
get_ddb_bitmapinfo( bmp, info ); - return init_dib_info_from_bitmapinfo( dib, info, bmp->bitmap.bmBits, flags ); + return init_dib_info_from_bitmapinfo( dib, info, bmp->bitmap.bmBits, + flags | private_color_table ); } return init_dib_info( dib, &bmp->dib->dsBmih, bmp->dib->dsBitfields, bmp->color_table, bmp->nb_colors, bmp->dib->dsBm.bmBits, flags );