Huw Davies : gdi32: When creating a dib_info from a ddb, always make a copy of the colour map.
Alexandre Julliard
julliard at winehq.org
Thu Sep 8 14:52:10 CDT 2011
Module: wine
Branch: master
Commit: 5bd003edaa78e7ac6a84b35c056866df53db23de
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5bd003edaa78e7ac6a84b35c056866df53db23de
Author: Huw Davies <huw at 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 );
More information about the wine-cvs
mailing list