Huw Davies : gdi32/tests: Add some tests to show the 1 pixel dst sizes are a special case.
Alexandre Julliard
julliard at winehq.org
Thu Sep 22 13:39:48 CDT 2011
Module: wine
Branch: master
Commit: 4156460d49cd87f93322630ec2ca34f8bb143a77
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4156460d49cd87f93322630ec2ca34f8bb143a77
Author: Huw Davies <huw at codeweavers.com>
Date: Thu Sep 22 13:56:29 2011 +0100
gdi32/tests: Add some tests to show the 1 pixel dst sizes are a special case.
---
dlls/gdi32/tests/bitmap.c | 54 +++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 54 insertions(+), 0 deletions(-)
diff --git a/dlls/gdi32/tests/bitmap.c b/dlls/gdi32/tests/bitmap.c
index 16dfcb2..89d2c9c 100644
--- a/dlls/gdi32/tests/bitmap.c
+++ b/dlls/gdi32/tests/bitmap.c
@@ -2826,6 +2826,7 @@ static void test_StretchBlt(void)
check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
0, 0, 2, 2, 0, 0, 1, 1, expected, __LINE__);
+ /* This is an example of the dst width (height) == 1 exception, explored below */
expected[0] = 0xCAFED00D, expected[1] = 0x00000000;
expected[16] = 0x00000000, expected[17] = 0x00000000;
check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
@@ -2853,10 +2854,63 @@ static void test_StretchBlt(void)
check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
1, 1, 2, 2, 0, 0, 2, 2, expected, __LINE__);
+ /* when dst width is 1 merge src width - 1 pixels */
+ memset( srcBuffer, 0, get_dib_image_size( &biSrc ) );
+ srcBuffer[0] = 0x0000ff00, srcBuffer[1] = 0x0000f0f0, srcBuffer[2] = 0x0000cccc, srcBuffer[3] = 0x0000aaaa;
+ srcBuffer[16] = 0xFEDCBA98, srcBuffer[17] = 0x76543210;
+
+ memset( expected, 0, get_dib_image_size( &biDst ) );
+ expected[0] = srcBuffer[0];
+ check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
+ 0, 0, 1, 1, 0, 0, 2, 1, expected, __LINE__);
+
+ expected[0] = srcBuffer[0] & srcBuffer[1];
+todo_wine
+ check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
+ 0, 0, 1, 1, 0, 0, 3, 1, expected, __LINE__);
+
+ expected[0] = srcBuffer[0] & srcBuffer[1] & srcBuffer[2];
+todo_wine
+ check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
+ 0, 0, 1, 1, 0, 0, 4, 1, expected, __LINE__);
+
+ /* this doesn't happen if the src width is -ve */
+ expected[0] = srcBuffer[1] & srcBuffer[2];
+todo_wine
+ check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
+ 0, 0, 1, 1, 2, 0, -2, 1, expected, __LINE__);
+
+ /* when dst width > 1 behaviour reverts to what one would expect */
+ expected[0] = srcBuffer[0] & srcBuffer[1], expected[1] = srcBuffer[2] & srcBuffer[3];
+todo_wine
+ check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
+ 0, 0, 2, 1, 0, 0, 4, 1, expected, __LINE__);
+
+ /* similarly in the vertical direction */
+ memset( expected, 0, get_dib_image_size( &biDst ) );
+ expected[0] = srcBuffer[0];
+ check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
+ 0, 0, 1, 1, 0, 0, 1, 2, expected, __LINE__);
+
+ /* check that it's the dst size in device units that needs to be 1 */
+ SetMapMode( hdcDst, MM_ISOTROPIC );
+ SetWindowExtEx( hdcDst, 200, 200, NULL );
+ SetViewportExtEx( hdcDst, 100, 100, NULL );
+
+ expected[0] = srcBuffer[0] & srcBuffer[1] & srcBuffer[2];
+todo_wine
+ check_StretchBlt_stretch(hdcDst, hdcSrc, &biDst, dstBuffer, srcBuffer,
+ 0, 0, 2, 2, 0, 0, 4, 1, expected, __LINE__);
+ SetMapMode( hdcDst, MM_TEXT );
+
SelectObject(hdcDst, oldDst);
DeleteObject(bmpDst);
/* Top-down to bottom-up tests */
+ memset( srcBuffer, 0, get_dib_image_size( &biSrc ) );
+ srcBuffer[0] = 0xCAFED00D, srcBuffer[1] = 0xFEEDFACE;
+ srcBuffer[16] = 0xFEDCBA98, srcBuffer[17] = 0x76543210;
+
biDst.bmiHeader.biHeight = 16;
bmpDst = CreateDIBSection(hdcScreen, &biDst, DIB_RGB_COLORS, (void**)&dstBuffer,
NULL, 0);
More information about the wine-cvs
mailing list