Module: wine Branch: master Commit: 2127e9444dd2bc07531d78cbe4b1d9f35d36fc95 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2127e9444dd2bc07531d78cbe4...
Author: Huw Davies huw@codeweavers.com Date: Mon Oct 17 15:46:04 2011 +0100
gdi32: Allow a caller to build_rle_bitmap to not request the clip region.
---
dlls/gdi32/dib.c | 21 +++++++++++++-------- 1 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c index 20041ad..eea257c 100644 --- a/dlls/gdi32/dib.c +++ b/dlls/gdi32/dib.c @@ -252,14 +252,19 @@ static BOOL build_rle_bitmap( const BITMAPINFO *info, struct gdi_image_bits *bit BYTE skip, num, data; BYTE *out_bits, *in_bits = bits->ptr;
- *clip = NULL; + if (clip) *clip = NULL;
assert( info->bmiHeader.biBitCount == 4 || info->bmiHeader.biBitCount == 8 );
- out_bits = HeapAlloc( GetProcessHeap(), 0, get_dib_image_size( info ) ); - *clip = CreateRectRgn( 0, 0, 0, 0 ); - run = CreateRectRgn( 0, 0, 0, 0 ); - if (!out_bits || !*clip || !run) goto fail; + out_bits = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, get_dib_image_size( info ) ); + if (!out_bits) goto fail; + + if (clip) + { + *clip = CreateRectRgn( 0, 0, 0, 0 ); + run = CreateRectRgn( 0, 0, 0, 0 ); + if (!*clip || !run) goto fail; + }
x = left = right = 0; y = height - 1; @@ -299,7 +304,7 @@ static BOOL build_rle_bitmap( const BITMAPINFO *info, struct gdi_image_bits *bit { if (data < 3) { - if(left != right) + if(left != right && clip) { SetRectRgn( run, left, y, right, y + 1 ); CombineRgn( *clip, run, *clip, RGN_OR ); @@ -365,7 +370,7 @@ static BOOL build_rle_bitmap( const BITMAPINFO *info, struct gdi_image_bits *bit }
done: - DeleteObject( run ); + if (run) DeleteObject( run ); if (bits->free) bits->free( bits );
bits->ptr = out_bits; @@ -376,7 +381,7 @@ done:
fail: if (run) DeleteObject( run ); - if (*clip) DeleteObject( *clip ); + if (clip && *clip) DeleteObject( *clip ); HeapFree( GetProcessHeap(), 0, out_bits ); return FALSE; }