[PATCH v2 3/5] gdiplus/tests: Test hatch brush anti-aliasing with opaque colors.

Jeff Smith whydoubt at gmail.com
Fri Jun 12 15:42:50 CDT 2020


Signed-off-by: Jeff Smith <whydoubt at gmail.com>
---
 dlls/gdiplus/tests/brush.c | 94 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 94 insertions(+)

diff --git a/dlls/gdiplus/tests/brush.c b/dlls/gdiplus/tests/brush.c
index 445b0cd126..8e50318268 100644
--- a/dlls/gdiplus/tests/brush.c
+++ b/dlls/gdiplus/tests/brush.c
@@ -1758,6 +1758,99 @@ static void test_hatchBrushStyles(void)
     ReleaseDC(hwnd, hdc);
 }
 
+static void test_hatchBrushColors(void)
+{
+    /* Foreground color, background color,
+     *   resulting 4 colors */
+    static const ARGB colors[][6] = {
+        { 0xff000000, 0xffffffff,
+            0xffffffff, 0xffbfbfbf, 0xff151515, 0xff000000 },
+        { 0xffffffff, 0xff000000,
+            0xff000000, 0xff3f3f3f, 0xffe9e9e9, 0xffffffff },
+        { 0xffd2d2d2, 0xff000000,
+            0xff000000, 0xff343434, 0xffbfbfbf, 0xffd2d2d2 },
+    };
+    static const int width = 16, height = 8;
+    static const int pixel_coord[][2] = {
+        {12, 1}, {1, 0}, {0, 0}, {8, 0}
+    };
+    HDC hdc;
+    GpStatus status;
+    GpGraphics *graphics_hdc;
+    GpGraphics *graphics_image;
+    GpGraphics *graphics_image_a;
+    GpBitmap *bitmap;
+    GpBitmap *bitmap_a;
+    GpHatch *brush_diag_cross;
+    GpHatch *brush_cross;
+    int i, j;
+
+    hdc = GetDC(hwnd);
+    status = GdipCreateFromHDC(hdc, &graphics_hdc);
+    expect(Ok, status);
+
+    status = GdipCreateBitmapFromScan0(width, height, 0, PixelFormat32bppRGB, NULL, &bitmap);
+    expect(Ok, status);
+    status = GdipGetImageGraphicsContext((GpImage *)bitmap, &graphics_image);
+    expect(Ok, status);
+
+    status = GdipCreateBitmapFromScan0(width, height, 0, PixelFormat32bppARGB, NULL, &bitmap_a);
+    expect(Ok, status);
+    status = GdipGetImageGraphicsContext((GpImage *)bitmap_a, &graphics_image_a);
+    expect(Ok, status);
+
+    for (i = 0; i < ARRAY_SIZE(colors); i++)
+    {
+        status = GdipCreateHatchBrush(HatchStyleDiagonalCross, colors[i][0], colors[i][1],
+                &brush_diag_cross);
+        expect(Ok, status);
+        status = GdipCreateHatchBrush(HatchStyleCross, colors[i][0], colors[i][1],
+                &brush_cross);
+        expect(Ok, status);
+
+        GdipFillRectangleI(graphics_hdc, (GpBrush *)brush_diag_cross, 0, 0, width/2, height);
+        GdipFillRectangleI(graphics_image, (GpBrush *)brush_diag_cross, 0, 0, width/2, height);
+        GdipFillRectangleI(graphics_image_a, (GpBrush *)brush_diag_cross, 0, 0, width/2, height);
+        GdipFillRectangleI(graphics_hdc, (GpBrush *)brush_cross, width/2, 0, width/2, height);
+        GdipFillRectangleI(graphics_image, (GpBrush *)brush_cross, width/2, 0, width/2, height);
+        GdipFillRectangleI(graphics_image_a, (GpBrush *)brush_cross, width/2, 0, width/2, height);
+
+        GdipDeleteBrush((GpBrush *)brush_diag_cross);
+        GdipDeleteBrush((GpBrush *)brush_cross);
+
+        for (j = 0; j < 4; j++)
+        {
+            ARGB color;
+            const ARGB exp_color = colors[i][j+2];
+            const int x = pixel_coord[j][0];
+            const int y = pixel_coord[j][1];
+
+            todo_wine_if(j == 1 || j == 2)
+            {
+            color = get_pixel_as_argb(hdc, x, y);
+            ok(color == exp_color, "For hwnd (%d, %d) colorset %d expected %08x, got %08x.\n",
+                    x, y, i, exp_color, color);
+
+            GdipBitmapGetPixel(bitmap, x, y, &color);
+            ok(color == exp_color, "For rgb image (%d, %d) colorset %d expected %08x, got %08x.\n",
+                    x, y, i, exp_color, color);
+
+            GdipBitmapGetPixel(bitmap_a, x, y, &color);
+            ok(color == exp_color, "For argb image (%d, %d) colorset %d expected %08x, got %08x.\n",
+                    x, y, i, exp_color, color);
+            }
+        }
+    }
+
+    GdipDeleteGraphics(graphics_hdc);
+    GdipDeleteGraphics(graphics_image);
+    GdipDeleteGraphics(graphics_image_a);
+
+    GdipDisposeImage((GpImage*)bitmap);
+    GdipDisposeImage((GpImage*)bitmap_a);
+    ReleaseDC(hwnd, hdc);
+}
+
 START_TEST(brush)
 {
     struct GdiplusStartupInput gdiplusStartupInput;
@@ -1811,6 +1904,7 @@ START_TEST(brush)
     test_pathgradientblend();
     test_getHatchStyle();
     test_hatchBrushStyles();
+    test_hatchBrushColors();
 
     GdiplusShutdown(gdiplusToken);
     DestroyWindow(hwnd);
-- 
2.23.0




More information about the wine-devel mailing list