Module: wine Branch: master Commit: 4156460d49cd87f93322630ec2ca34f8bb143a77 URL: http://source.winehq.org/git/wine.git/?a=commit;h=4156460d49cd87f93322630ec2...
Author: Huw Davies huw@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);