ChangeSet ID: 21530 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/29 05:06:17
Modified files: dlls/gdi : bitmap.c
Log message: Added support for doing SetBitmapBits on a DIB section.
Patch: http://cvs.winehq.org/patch.py?id=21530
Old revision New revision Changes Path 1.8 1.9 +25 -0 wine/dlls/gdi/bitmap.c
Index: wine/dlls/gdi/bitmap.c diff -u -p wine/dlls/gdi/bitmap.c:1.8 wine/dlls/gdi/bitmap.c:1.9 --- wine/dlls/gdi/bitmap.c:1.8 29 Nov 2005 11: 6:17 -0000 +++ wine/dlls/gdi/bitmap.c 29 Nov 2005 11: 6:17 -0000 @@ -381,6 +381,31 @@ LONG WINAPI SetBitmapBits( count = -count; }
+ if (bmp->dib) /* simply copy the bits into the DIB */ + { + DIBSECTION *dib = bmp->dib; + char *dest = dib->dsBm.bmBits; + DWORD max = dib->dsBm.bmWidthBytes * dib->dsBm.bmHeight; + if (count > max) count = max; + ret = count; + + if (bmp->dib->dsBmih.biHeight >= 0) /* not top-down, need to flip contents vertically */ + { + dest += dib->dsBm.bmWidthBytes * dib->dsBm.bmHeight; + while (count > 0) + { + dest -= dib->dsBm.bmWidthBytes; + memcpy( dest, bits, min( count, dib->dsBm.bmWidthBytes ) ); + bits = (char *)bits + dib->dsBm.bmWidthBytes; + count -= dib->dsBm.bmWidthBytes; + } + } + else memcpy( dest, bits, count ); + + GDI_ReleaseObj( hbitmap ); + return ret; + } + /* Only get entire lines */ height = count / bmp->bitmap.bmWidthBytes; if (height > bmp->bitmap.bmHeight) height = bmp->bitmap.bmHeight;