Module: wine Branch: master Commit: f234ce9dccbb47cf69ab1eb0c45f11205d407a4a URL: http://source.winehq.org/git/wine.git/?a=commit;h=f234ce9dccbb47cf69ab1eb0c4...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Aug 4 14:37:20 2011 +0200
gdi32: Move initialization of a correct BITMAPINFOHEADER to a separate function.
---
dlls/gdi32/dib.c | 102 +++++++++++++++++++++++++++--------------------------- 1 files changed, 51 insertions(+), 51 deletions(-)
diff --git a/dlls/gdi32/dib.c b/dlls/gdi32/dib.c index 6676762..5f3dd93 100644 --- a/dlls/gdi32/dib.c +++ b/dlls/gdi32/dib.c @@ -135,77 +135,77 @@ int DIB_GetBitmapInfo( const BITMAPINFOHEADER *header, LONG *width, }
/******************************************************************************************* - * Fill out a true BITMAPINFO from a variable sized BITMAPINFO / BITMAPCOREINFO. + * Fill out a true BITMAPINFOHEADER from a variable sized BITMAPINFOHEADER / BITMAPCOREHEADER. */ -static BOOL bitmapinfo_from_user_bitmapinfo( BITMAPINFO *dst, const BITMAPINFO *info, UINT coloruse ) +static BOOL bitmapinfoheader_from_user_bitmapinfo( BITMAPINFOHEADER *dst, const BITMAPINFOHEADER *info ) { LONG width, height; WORD planes, bpp; DWORD compr, size; - void *src_colors; - unsigned int colors; - int bitmap_type = DIB_GetBitmapInfo( &info->bmiHeader, &width, &height, &planes, &bpp, &compr, &size ); + int bitmap_type = DIB_GetBitmapInfo( info, &width, &height, &planes, &bpp, &compr, &size );
if (bitmap_type == -1) return FALSE;
- src_colors = (char *)info + info->bmiHeader.biSize; if (bitmap_type == 1) { - dst->bmiHeader = info->bmiHeader; - dst->bmiHeader.biSize = sizeof(dst->bmiHeader); + *dst = *info; + } + else + { + dst->biWidth = width; + dst->biHeight = height; + dst->biPlanes = planes; + dst->biBitCount = bpp; + dst->biCompression = compr; + dst->biXPelsPerMeter = 0; + dst->biYPelsPerMeter = 0; + dst->biClrUsed = 0; + dst->biClrImportant = 0; + }
- colors = get_dib_num_of_colors( dst ); + dst->biSize = sizeof(*dst); + if (dst->biCompression == BI_RGB || dst->biCompression == BI_BITFIELDS) + dst->biSizeImage = get_dib_image_size( (BITMAPINFO *)dst ); + return TRUE; +}
- if (info->bmiHeader.biCompression == BI_BITFIELDS) - /* bitfields are always at bmiColors even in larger structures */ - memcpy( dst->bmiColors, info->bmiColors, 3 * sizeof(DWORD) ); - else if (colors) - { - unsigned int size; +/******************************************************************************************* + * Fill out a true BITMAPINFO from a variable sized BITMAPINFO / BITMAPCOREINFO. + */ +static BOOL bitmapinfo_from_user_bitmapinfo( BITMAPINFO *dst, const BITMAPINFO *info, UINT coloruse ) +{ + void *src_colors; + unsigned int colors;
- if (coloruse == DIB_PAL_COLORS) - size = colors * sizeof(WORD); - else - size = colors * sizeof(RGBQUAD); - memcpy( dst->bmiColors, src_colors, size ); - } + if (!bitmapinfoheader_from_user_bitmapinfo( &dst->bmiHeader, &info->bmiHeader )) return FALSE; + + src_colors = (char *)info + info->bmiHeader.biSize; + colors = get_dib_num_of_colors( dst ); + + if (info->bmiHeader.biCompression == BI_BITFIELDS) + { + /* bitfields are always at bmiColors even in larger structures */ + memcpy( dst->bmiColors, info->bmiColors, 3 * sizeof(DWORD) ); } - else + else if (colors) { - dst->bmiHeader.biSize = sizeof(dst->bmiHeader); - dst->bmiHeader.biWidth = width; - dst->bmiHeader.biHeight = height; - dst->bmiHeader.biPlanes = planes; - dst->bmiHeader.biBitCount = bpp; - dst->bmiHeader.biCompression = compr; - dst->bmiHeader.biXPelsPerMeter = 0; - dst->bmiHeader.biYPelsPerMeter = 0; - dst->bmiHeader.biClrUsed = 0; - dst->bmiHeader.biClrImportant = 0; - - colors = get_dib_num_of_colors( dst ); - - if (colors) + if (coloruse == DIB_PAL_COLORS) + memcpy( dst->bmiColors, src_colors, colors * sizeof(WORD) ); + else if (info->bmiHeader.biSize != sizeof(BITMAPCOREHEADER)) + memcpy( dst->bmiColors, src_colors, colors * sizeof(RGBQUAD) ); + else { - if (coloruse == DIB_PAL_COLORS) - memcpy( dst->bmiColors, src_colors, colors * sizeof(WORD) ); - else + unsigned int i; + RGBTRIPLE *triple = (RGBTRIPLE *)src_colors; + for (i = 0; i < colors; i++) { - unsigned int i; - RGBTRIPLE *triple = (RGBTRIPLE *)src_colors; - for (i = 0; i < colors; i++) - { - dst->bmiColors[i].rgbRed = triple[i].rgbtRed; - dst->bmiColors[i].rgbGreen = triple[i].rgbtGreen; - dst->bmiColors[i].rgbBlue = triple[i].rgbtBlue; - dst->bmiColors[i].rgbReserved = 0; - } + dst->bmiColors[i].rgbRed = triple[i].rgbtRed; + dst->bmiColors[i].rgbGreen = triple[i].rgbtGreen; + dst->bmiColors[i].rgbBlue = triple[i].rgbtBlue; + dst->bmiColors[i].rgbReserved = 0; } } } - - if (dst->bmiHeader.biCompression == BI_RGB || dst->bmiHeader.biCompression == BI_BITFIELDS) - dst->bmiHeader.biSizeImage = get_dib_image_size( dst ); return TRUE; }