Alexandre Julliard : gdi32: Forward the null driver PutImage to the DIB driver since the bits are in DIB format .
Alexandre Julliard
julliard at winehq.org
Wed Aug 31 13:19:19 CDT 2011
Module: wine
Branch: master
Commit: 6f066ec18a07dea56cf0f544514e5361c434110b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f066ec18a07dea56cf0f544514e5361c434110b
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Aug 30 20:48:51 2011 +0200
gdi32: Forward the null driver PutImage to the DIB driver since the bits are in DIB format.
---
dlls/gdi32/bitmap.c | 68 ++++++--------------------------------------
dlls/gdi32/mfdrv/objects.c | 1 +
2 files changed, 10 insertions(+), 59 deletions(-)
diff --git a/dlls/gdi32/bitmap.c b/dlls/gdi32/bitmap.c
index 9e2cd32..5790248 100644
--- a/dlls/gdi32/bitmap.c
+++ b/dlls/gdi32/bitmap.c
@@ -88,73 +88,23 @@ DWORD nulldrv_PutImage( PHYSDEV dev, HBITMAP hbitmap, HRGN clip, BITMAPINFO *inf
BITMAPOBJ *bmp;
if (!hbitmap) return ERROR_SUCCESS;
- if (!(bmp = GDI_GetObjPtr( hbitmap, OBJ_BITMAP ))) return ERROR_INVALID_HANDLE;
-
- if (info->bmiHeader.biPlanes != 1) goto update_format;
- if (info->bmiHeader.biBitCount != bmp->bitmap.bmBitsPixel) goto update_format;
- /* FIXME: check color masks */
if (bits)
{
- int i, width_bytes = get_dib_stride( info->bmiHeader.biWidth, info->bmiHeader.biBitCount );
- unsigned char *dst_bits, *src_bits;
-
- if ((src->width != dst->width) || (src->height != dst->height))
- {
- GDI_ReleaseObj( hbitmap );
- return ERROR_TRANSFORM_NOT_SUPPORTED;
- }
- if (src->visrect.left > 0 || src->visrect.right < bmp->bitmap.bmWidth ||
- dst->visrect.left > 0 || dst->visrect.right < bmp->bitmap.bmWidth)
- {
- FIXME( "setting partial rows not supported\n" );
- GDI_ReleaseObj( hbitmap );
- return ERROR_NOT_SUPPORTED;
- }
- if (clip)
- {
- FIXME( "clip region not supported\n" );
- GDI_ReleaseObj( hbitmap );
- return ERROR_NOT_SUPPORTED;
- }
-
- if (!bmp->bitmap.bmBits &&
- !(bmp->bitmap.bmBits = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
- bmp->bitmap.bmHeight * width_bytes )))
+ if (!(bmp = GDI_GetObjPtr( hbitmap, OBJ_BITMAP ))) return ERROR_INVALID_HANDLE;
+ if (!bmp->bitmap.bmBits)
{
- GDI_ReleaseObj( hbitmap );
- return ERROR_OUTOFMEMORY;
- }
- dst_bits = (unsigned char *)bmp->bitmap.bmBits + dst->visrect.top * width_bytes;
- src_bits = bits->ptr;
- if (info->bmiHeader.biHeight > 0)
- {
- src_bits += (info->bmiHeader.biHeight - 1 - src->visrect.top) * width_bytes;
- width_bytes = -width_bytes;
- }
- else
- src_bits += src->visrect.top * width_bytes;
-
- if (width_bytes != bmp->bitmap.bmWidthBytes)
- {
- for (i = 0; i < dst->visrect.bottom - dst->visrect.top; i++)
+ int width_bytes = get_dib_stride( bmp->bitmap.bmWidth, bmp->bitmap.bmBitsPixel );
+ if (!(bmp->bitmap.bmBits = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY,
+ bmp->bitmap.bmHeight * width_bytes )))
{
- memcpy( dst_bits, src_bits, bmp->bitmap.bmWidthBytes );
- src_bits += width_bytes;
- dst_bits += abs(width_bytes);
+ GDI_ReleaseObj( hbitmap );
+ return ERROR_OUTOFMEMORY;
}
}
- else memcpy( dst_bits, src_bits, width_bytes * (dst->visrect.bottom - dst->visrect.top) );
+ GDI_ReleaseObj( hbitmap );
}
- GDI_ReleaseObj( hbitmap );
- return ERROR_SUCCESS;
-
-update_format:
- info->bmiHeader.biPlanes = 1;
- info->bmiHeader.biBitCount = bmp->bitmap.bmBitsPixel;
- if (info->bmiHeader.biHeight > 0) info->bmiHeader.biHeight = -info->bmiHeader.biHeight;
- GDI_ReleaseObj( hbitmap );
- return ERROR_BAD_FORMAT;
+ return dib_driver.pPutImage( NULL, hbitmap, clip, info, bits, src, dst, rop );
}
diff --git a/dlls/gdi32/mfdrv/objects.c b/dlls/gdi32/mfdrv/objects.c
index 674e7e1..7a5039d 100644
--- a/dlls/gdi32/mfdrv/objects.c
+++ b/dlls/gdi32/mfdrv/objects.c
@@ -202,6 +202,7 @@ INT16 MFDRV_CreateBrushIndirect(PHYSDEV dev, HBRUSH hBrush )
mr->rdParm[1] = DIB_RGB_COLORS;
dst_info = (BITMAPINFO *)(mr->rdParm + 2);
dst_info->bmiHeader = src_info->bmiHeader;
+ dst_info->bmiHeader.biClrUsed = 0;
cref = GetTextColor( dev->hdc );
dst_info->bmiColors[0].rgbRed = GetRValue(cref);
dst_info->bmiColors[0].rgbGreen = GetGValue(cref);
More information about the wine-cvs
mailing list