winex11: BitBlt returns TRUE when drawing outside of the clipping or visible region.

This commit is contained in:
Sergey Khodych 2008-11-04 19:59:34 +02:00 committed by Alexandre Julliard
parent e21cbfe7e8
commit 11d17fafc4
2 changed files with 49 additions and 0 deletions

View File

@ -2189,6 +2189,51 @@ void test_GdiAlphaBlend()
} }
static void test_clipping(void)
{
HBITMAP bmpDst;
HBITMAP oldDst;
HBITMAP bmpSrc;
HBITMAP oldSrc;
HRGN hRgn;
LPVOID bits;
BOOL result;
HDC hdcDst = CreateCompatibleDC( NULL );
HDC hdcSrc = CreateCompatibleDC( NULL );
BITMAPINFO bmpinfo={{0}};
bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpinfo.bmiHeader.biWidth = 100;
bmpinfo.bmiHeader.biHeight = 100;
bmpinfo.bmiHeader.biPlanes = 1;
bmpinfo.bmiHeader.biBitCount = GetDeviceCaps( hdcDst, BITSPIXEL );
bmpinfo.bmiHeader.biCompression = BI_RGB;
bmpDst = CreateDIBSection( hdcDst, &bmpinfo, DIB_RGB_COLORS, &bits, NULL, 0 );
ok(bmpDst != NULL, "Couldn't create destination bitmap\n");
oldDst = (HBITMAP)SelectObject( hdcDst, bmpDst );
bmpSrc = CreateDIBSection( hdcSrc, &bmpinfo, DIB_RGB_COLORS, &bits, NULL, 0 );
ok(bmpSrc != NULL, "Couldn't create source bitmap\n");
oldSrc = (HBITMAP)SelectObject( hdcSrc, bmpSrc );
result = BitBlt( hdcDst, 0, 0, 100, 100, hdcSrc, 100, 100, SRCCOPY );
ok(result, "BitBlt failed\n");
hRgn = CreateRectRgn( 0,0,0,0 );
SelectClipRgn( hdcDst, hRgn );
result = BitBlt( hdcDst, 0, 0, 100, 100, hdcSrc, 0, 0, SRCCOPY );
ok(result, "BitBlt failed\n");
DeleteObject( bmpDst );
DeleteObject( bmpSrc );
DeleteObject( hRgn );
DeleteDC( hdcDst );
DeleteDC( hdcSrc );
}
START_TEST(bitmap) START_TEST(bitmap)
{ {
HMODULE hdll; HMODULE hdll;
@ -2214,4 +2259,5 @@ START_TEST(bitmap)
test_GdiAlphaBlend(); test_GdiAlphaBlend();
test_bitmapinfoheadersize(); test_bitmapinfoheadersize();
test_get16dibits(); test_get16dibits();
test_clipping();
} }

View File

@ -1686,7 +1686,10 @@ BOOL X11DRV_BitBlt( X11DRV_PDEVICE *physDevDst, INT xDst, INT yDst,
if (!BITBLT_GetVisRectangles( physDevDst, xDst, yDst, width, height, if (!BITBLT_GetVisRectangles( physDevDst, xDst, yDst, width, height,
physDevSrc, xSrc, ySrc, width, height, physDevSrc, xSrc, ySrc, width, height,
&visRectSrc, &visRectDst )) &visRectSrc, &visRectDst ))
{
result = TRUE;
goto END; goto END;
}
xSrc = visRectSrc.left; xSrc = visRectSrc.left;
ySrc = visRectSrc.top; ySrc = visRectSrc.top;