Alexandre Julliard : gdi32: Only use the hdc parameter in SetDIBits when needed.
Alexandre Julliard
julliard at winehq.org
Wed Aug 31 13:19:19 CDT 2011
Module: wine
Branch: master
Commit: 5f35075c8be21f46d5c73d782d2aa7435f5d576f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5f35075c8be21f46d5c73d782d2aa7435f5d576f
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Aug 30 21:13:55 2011 +0200
gdi32: Only use the hdc parameter in SetDIBits when needed.
---
dlls/gdi32/dib.c | 33 +++++++--------------------------
1 files changed, 7 insertions(+), 26 deletions(-)
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c
index 978119a..a2e9b5e 100644
--- a/dlls/gdi32/dib.c
+++ b/dlls/gdi32/dib.c
@@ -207,15 +207,17 @@ static BOOL bitmapinfo_from_user_bitmapinfo( BITMAPINFO *dst, const BITMAPINFO *
return TRUE;
}
-static int fill_color_table_from_palette( BITMAPINFO *info, DC *dc )
+static int fill_color_table_from_palette( BITMAPINFO *info, HDC hdc )
{
PALETTEENTRY palEntry[256];
+ HPALETTE palette = GetCurrentObject( hdc, OBJ_PAL );
int i, colors = get_dib_num_of_colors( info );
+ if (!palette) return 0;
if (!colors) return 0;
memset( palEntry, 0, sizeof(palEntry) );
- if (!GetPaletteEntries( dc->hPalette, 0, colors, palEntry ))
+ if (!GetPaletteEntries( palette, 0, colors, palEntry ))
return 0;
for (i = 0; i < colors; i++)
@@ -498,8 +500,6 @@ INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan,
UINT lines, LPCVOID bits, const BITMAPINFO *info,
UINT coloruse )
{
- DC *dc = get_dc_ptr( hdc );
- BOOL delete_hdc = FALSE;
BITMAPOBJ *bitmap;
char src_bmibuf[FIELD_OFFSET( BITMAPINFO, bmiColors[256] )];
BITMAPINFO *src_info = (BITMAPINFO *)src_bmibuf;
@@ -524,26 +524,9 @@ INT WINAPI SetDIBits( HDC hdc, HBITMAP hbitmap, UINT startscan,
src_bits.free = NULL;
src_bits.param = NULL;
- if (coloruse == DIB_RGB_COLORS && !dc)
- {
- hdc = CreateCompatibleDC(0);
- dc = get_dc_ptr( hdc );
- delete_hdc = TRUE;
- }
+ if (coloruse == DIB_PAL_COLORS && !fill_color_table_from_palette( src_info, hdc )) return 0;
- if (!dc) return 0;
-
- update_dc( dc );
-
- if (!(bitmap = GDI_GetObjPtr( hbitmap, OBJ_BITMAP )))
- {
- release_dc_ptr( dc );
- if (delete_hdc) DeleteDC(hdc);
- return 0;
- }
-
- if (coloruse == DIB_PAL_COLORS)
- if (!fill_color_table_from_palette( src_info, dc )) goto done;
+ if (!(bitmap = GDI_GetObjPtr( hbitmap, OBJ_BITMAP ))) return 0;
if (src_info->bmiHeader.biCompression == BI_RLE4 || src_info->bmiHeader.biCompression == BI_RLE8)
{
@@ -623,8 +606,6 @@ done:
if (src_bits.free) src_bits.free( &src_bits );
if (clip) DeleteObject( clip );
GDI_ReleaseObj( hbitmap );
- release_dc_ptr( dc );
- if (delete_hdc) DeleteDC(hdc);
return result;
}
@@ -1104,7 +1085,7 @@ INT WINAPI GetDIBits(
{
if( coloruse == DIB_PAL_COLORS )
{
- if (!fill_color_table_from_palette( dst_info, dc )) goto done;
+ if (!fill_color_table_from_palette( dst_info, hdc )) goto done;
}
else
{
More information about the wine-cvs
mailing list