Huw Davies : gdi32/tests: Add tests for 32 bpp DIB pattern brush fills.

Alexandre Julliard julliard at winehq.org
Thu May 12 13:57:51 CDT 2011


Module: wine
Branch: master
Commit: 8a43f3535c7d7325e0436846c2f854c4523ed84d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8a43f3535c7d7325e0436846c2f854c4523ed84d

Author: Huw Davies <huw at codeweavers.com>
Date:   Thu May 12 13:01:26 2011 +0100

gdi32/tests: Add tests for 32 bpp DIB pattern brush fills.

---

 dlls/gdi32/tests/dib.c |   68 +++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 67 insertions(+), 1 deletions(-)

diff --git a/dlls/gdi32/tests/dib.c b/dlls/gdi32/tests/dib.c
index 196cbc5..4a9c692 100644
--- a/dlls/gdi32/tests/dib.c
+++ b/dlls/gdi32/tests/dib.c
@@ -90,6 +90,8 @@ static const char *sha1_graphics_a8r8g8b8[] =
     "6c530622a025d872a642e8f950867884d7b136cb",
     "7c07d91b8f68fb31821701b3dcb96de018bf0c66",
     "b2261353decda2712b83538ab434a49ce21f3172",
+    "a8b59f25984b066fc6b91cae6bf983a78028ba7f",
+    "3d95adb85b9673a932ac847a4b5451fa59885f74",
     NULL
 };
 
@@ -240,19 +242,25 @@ static const RECT patblt_clips[] =
     {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)
 {
     DWORD dib_size = get_dib_size(bmi);
     HPEN solid_pen, dashed_pen, orig_pen;
-    HBRUSH solid_brush, orig_brush;
+    HBRUSH solid_brush, dib_brush, orig_brush;
     INT i, y;
     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);
     compare_hash(bmi, bits, sha1, "empty");
 
     solid_pen = CreatePen(PS_SOLID, 1, RGB(0, 0, 0xff));
     orig_pen = SelectObject(hdc, solid_pen);
+    SetBrushOrgEx(hdc, 0, 0, NULL);
 
     /* horizontal and vertical lines */
     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);
 
+    /* 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_pen);
+    DeleteObject(dib_brush);
     DeleteObject(dashed_pen);
     DeleteObject(solid_brush);
     DeleteObject(solid_pen);




More information about the wine-cvs mailing list