gdi32/tests: Add tests for 32 bpp DIB pattern brush fills.
This commit is contained in:
parent
5b28336c26
commit
8a43f3535c
@ -90,6 +90,8 @@ static const char *sha1_graphics_a8r8g8b8[] =
|
|||||||
"6c530622a025d872a642e8f950867884d7b136cb",
|
"6c530622a025d872a642e8f950867884d7b136cb",
|
||||||
"7c07d91b8f68fb31821701b3dcb96de018bf0c66",
|
"7c07d91b8f68fb31821701b3dcb96de018bf0c66",
|
||||||
"b2261353decda2712b83538ab434a49ce21f3172",
|
"b2261353decda2712b83538ab434a49ce21f3172",
|
||||||
|
"a8b59f25984b066fc6b91cae6bf983a78028ba7f",
|
||||||
|
"3d95adb85b9673a932ac847a4b5451fa59885f74",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -240,19 +242,25 @@ static const RECT patblt_clips[] =
|
|||||||
{170, 200, 176, 210}, /* t edge on b edgecase clipped */
|
{170, 200, 176, 210}, /* t edge on b edgecase clipped */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const BITMAPINFOHEADER dib_brush_header_32 = {sizeof(BITMAPINFOHEADER), 16, -16, 1, 32, BI_RGB, 0, 0, 0, 0, 0};
|
||||||
|
|
||||||
static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sha1)
|
static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sha1)
|
||||||
{
|
{
|
||||||
DWORD dib_size = get_dib_size(bmi);
|
DWORD dib_size = get_dib_size(bmi);
|
||||||
HPEN solid_pen, dashed_pen, orig_pen;
|
HPEN solid_pen, dashed_pen, orig_pen;
|
||||||
HBRUSH solid_brush, orig_brush;
|
HBRUSH solid_brush, dib_brush, orig_brush;
|
||||||
INT i, y;
|
INT i, y;
|
||||||
HRGN hrgn, hrgn2;
|
HRGN hrgn, hrgn2;
|
||||||
|
BYTE dib_brush_buf[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD) + 16 * 16 * sizeof(DWORD)]; /* Enough for 16 x 16 at 32 bpp */
|
||||||
|
BITMAPINFO *brush_bi = (BITMAPINFO*)dib_brush_buf;
|
||||||
|
BYTE *brush_bits;
|
||||||
|
|
||||||
memset(bits, 0xcc, dib_size);
|
memset(bits, 0xcc, dib_size);
|
||||||
compare_hash(bmi, bits, sha1, "empty");
|
compare_hash(bmi, bits, sha1, "empty");
|
||||||
|
|
||||||
solid_pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0xff));
|
solid_pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0xff));
|
||||||
orig_pen = SelectObject(hdc, solid_pen);
|
orig_pen = SelectObject(hdc, solid_pen);
|
||||||
|
SetBrushOrgEx(hdc, 0, 0, NULL);
|
||||||
|
|
||||||
/* horizontal and vertical lines */
|
/* horizontal and vertical lines */
|
||||||
for(i = 1; i <= 16; i++)
|
for(i = 1; i <= 16; i++)
|
||||||
@ -415,8 +423,66 @@ static void draw_graphics(HDC hdc, BITMAPINFO *bmi, BYTE *bits, const char ***sh
|
|||||||
|
|
||||||
ExtSelectClipRgn(hdc, NULL, RGN_COPY);
|
ExtSelectClipRgn(hdc, NULL, RGN_COPY);
|
||||||
|
|
||||||
|
/* DIB pattern brush */
|
||||||
|
|
||||||
|
brush_bi->bmiHeader = dib_brush_header_32;
|
||||||
|
brush_bits = (BYTE*)brush_bi + sizeof(BITMAPINFOHEADER);
|
||||||
|
memset(brush_bits, 0, 16 * 16 * sizeof(DWORD));
|
||||||
|
brush_bits[2] = 0xff;
|
||||||
|
brush_bits[6] = 0xff;
|
||||||
|
brush_bits[65] = 0xff;
|
||||||
|
brush_bits[69] = 0xff;
|
||||||
|
|
||||||
|
dib_brush = CreateDIBPatternBrushPt(brush_bi, DIB_RGB_COLORS);
|
||||||
|
|
||||||
|
SelectObject(hdc, dib_brush);
|
||||||
|
SetBrushOrgEx(hdc, 1, 1, NULL);
|
||||||
|
|
||||||
|
for(i = 0, y = 10; i < 256; i++)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
|
if(!rop_uses_src(rop3[i]))
|
||||||
|
{
|
||||||
|
ret = PatBlt(hdc, 10 + i, y, 100, 20, rop3[i]);
|
||||||
|
ok(ret, "got FALSE for %x\n", rop3[i]);
|
||||||
|
y += 25;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compare_hash(bmi, bits, sha1, "top-down dib brush patblt");
|
||||||
|
memset(bits, 0xcc, dib_size);
|
||||||
|
|
||||||
|
SelectObject(hdc, orig_brush);
|
||||||
|
DeleteObject(dib_brush);
|
||||||
|
|
||||||
|
/* Bottom-up DIB pattern brush */
|
||||||
|
|
||||||
|
brush_bi->bmiHeader.biHeight = -brush_bi->bmiHeader.biHeight;
|
||||||
|
|
||||||
|
dib_brush = CreateDIBPatternBrushPt(brush_bi, DIB_RGB_COLORS);
|
||||||
|
|
||||||
|
SelectObject(hdc, dib_brush);
|
||||||
|
SetBrushOrgEx(hdc, 100, 100, NULL);
|
||||||
|
|
||||||
|
for(i = 0, y = 10; i < 256; i++)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
|
||||||
|
if(!rop_uses_src(rop3[i]))
|
||||||
|
{
|
||||||
|
ret = PatBlt(hdc, 10 + i, y, 100, 20, rop3[i]);
|
||||||
|
ok(ret, "got FALSE for %x\n", rop3[i]);
|
||||||
|
y += 25;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
compare_hash(bmi, bits, sha1, "bottom-up dib brush patblt");
|
||||||
|
memset(bits, 0xcc, dib_size);
|
||||||
|
|
||||||
|
SetBrushOrgEx(hdc, 0, 0, NULL);
|
||||||
|
|
||||||
SelectObject(hdc, orig_brush);
|
SelectObject(hdc, orig_brush);
|
||||||
SelectObject(hdc, orig_pen);
|
SelectObject(hdc, orig_pen);
|
||||||
|
DeleteObject(dib_brush);
|
||||||
DeleteObject(dashed_pen);
|
DeleteObject(dashed_pen);
|
||||||
DeleteObject(solid_brush);
|
DeleteObject(solid_brush);
|
||||||
DeleteObject(solid_pen);
|
DeleteObject(solid_pen);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user