Module: wine Branch: master Commit: c2784e08fcac04ff0e6106292c1b9bf93acfc27c URL: http://source.winehq.org/git/wine.git/?a=commit;h=c2784e08fcac04ff0e6106292c...
Author: Alexandre Julliard julliard@winehq.org Date: Tue May 29 13:53:30 2012 +0200
gdi32: Improve support of bitmaps without a color table in PutImage.
---
dlls/gdi32/dibdrv/bitblt.c | 17 +++++++++++++---- 1 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/dlls/gdi32/dibdrv/bitblt.c b/dlls/gdi32/dibdrv/bitblt.c index d6849bd..5abfd75 100644 --- a/dlls/gdi32/dibdrv/bitblt.c +++ b/dlls/gdi32/dibdrv/bitblt.c @@ -871,16 +871,25 @@ done:
static BOOL matching_color_info( const dib_info *dib, const BITMAPINFO *info ) { + const RGBQUAD *color_table = info->bmiColors; + switch (info->bmiHeader.biBitCount) { case 1: + if (dib->color_table_size != info->bmiHeader.biClrUsed) return FALSE; + return !memcmp( color_table, dib->color_table, dib->color_table_size * sizeof(RGBQUAD) ); + case 4: case 8: - { - RGBQUAD *color_table = (RGBQUAD *)((char *)info + info->bmiHeader.biSize); - if (dib->color_table_size != info->bmiHeader.biClrUsed) return FALSE; + if (!info->bmiHeader.biClrUsed) + { + if (!dib->color_table_size) return TRUE; + if (dib->color_table_size != 1 << info->bmiHeader.biBitCount) return FALSE; + color_table = get_default_color_table( info->bmiHeader.biBitCount ); + } + else if (dib->color_table_size != info->bmiHeader.biClrUsed) return FALSE; + return !memcmp( color_table, dib->color_table, dib->color_table_size * sizeof(RGBQUAD) ); - }
case 16: {