Alexandre Julliard : gdi32/tests: Add some tests for palette-relative pattern brushes.

Alexandre Julliard julliard at winehq.org
Wed Nov 2 14:23:34 CDT 2011


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

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Nov  2 11:33:00 2011 +0100

gdi32/tests: Add some tests for palette-relative pattern brushes.

---

 dlls/gdi32/tests/brush.c |   77 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 77 insertions(+), 0 deletions(-)

diff --git a/dlls/gdi32/tests/brush.c b/dlls/gdi32/tests/brush.c
index a2767ff..3742608 100644
--- a/dlls/gdi32/tests/brush.c
+++ b/dlls/gdi32/tests/brush.c
@@ -213,8 +213,85 @@ static void test_pattern_brush(void)
     GlobalFree( mem );
 }
 
+static void test_palette_brush(void)
+{
+    char buffer[sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD) + 16 * 16];
+    BITMAPINFO *info = (BITMAPINFO *)buffer;
+    WORD *indices = (WORD *)info->bmiColors;
+    char pal_buffer[sizeof(LOGPALETTE) + 256 * sizeof(PALETTEENTRY)];
+    LOGPALETTE *pal = (LOGPALETTE *)pal_buffer;
+    HDC hdc = CreateCompatibleDC( 0 );
+    DWORD *dib_bits;
+    HBITMAP dib;
+    HBRUSH brush;
+    int i;
+    HPALETTE palette, palette2;
+
+    memset( info, 0, sizeof(*info) );
+    info->bmiHeader.biSize        = sizeof(info->bmiHeader);
+    info->bmiHeader.biWidth       = 16;
+    info->bmiHeader.biHeight      = 16;
+    info->bmiHeader.biPlanes      = 1;
+    info->bmiHeader.biBitCount    = 32;
+    info->bmiHeader.biCompression = BI_RGB;
+    dib = CreateDIBSection( NULL, info, DIB_RGB_COLORS, (void**)&dib_bits, NULL, 0 );
+    ok( dib != NULL, "CreateDIBSection failed\n" );
+
+    info->bmiHeader.biBitCount = 8;
+    for (i = 0; i < 256; i++) indices[i] = 255 - i;
+    for (i = 0; i < 256; i++) ((BYTE *)(indices + 256))[i] = i;
+    brush = CreateDIBPatternBrushPt( info, DIB_PAL_COLORS );
+    ok( brush != NULL, "CreateDIBPatternBrushPt failed\n" );
+
+    pal->palVersion = 0x300;
+    pal->palNumEntries = 256;
+    for (i = 0; i < 256; i++)
+    {
+        pal->palPalEntry[i].peRed = i * 2;
+        pal->palPalEntry[i].peGreen = i * 2;
+        pal->palPalEntry[i].peBlue = i * 2;
+        pal->palPalEntry[i].peFlags = 0;
+    }
+    palette = CreatePalette( pal );
+
+    ok( SelectObject( hdc, dib ) != NULL, "SelectObject failed\n" );
+    ok( SelectPalette( hdc, palette, 0 ) != NULL, "SelectPalette failed\n" );
+    ok( SelectObject( hdc, brush ) != NULL, "SelectObject failed\n" );
+    memset( dib_bits, 0xaa, 16 * 16 * 4 );
+    PatBlt( hdc, 0, 0, 16, 16, PATCOPY );
+    for (i = 0; i < 256; i++)
+    {
+        DWORD expect = (pal->palPalEntry[255 - i].peRed << 16 |
+                        pal->palPalEntry[255 - i].peGreen << 8 |
+                        pal->palPalEntry[255 - i].peBlue);
+        ok( dib_bits[i] == expect, "wrong bits %x/%x at %u,%u\n", dib_bits[i], expect, i % 16, i / 16 );
+    }
+
+    for (i = 0; i < 256; i++) pal->palPalEntry[i].peRed = i * 3;
+    palette2 = CreatePalette( pal );
+    ok( SelectPalette( hdc, palette2, 0 ) != NULL, "SelectPalette failed\n" );
+    memset( dib_bits, 0xaa, 16 * 16 * 4 );
+    PatBlt( hdc, 0, 0, 16, 16, PATCOPY );
+    for (i = 0; i < 256; i++)
+    {
+        DWORD expect = (pal->palPalEntry[255 - i].peRed << 16 |
+                        pal->palPalEntry[255 - i].peGreen << 8 |
+                        pal->palPalEntry[255 - i].peBlue);
+        if (expect)
+            todo_wine ok( dib_bits[i] == expect, "wrong bits %x/%x at %u,%u\n", dib_bits[i], expect, i % 16, i / 16 );
+        else
+            ok( dib_bits[i] == expect, "wrong bits %x/%x at %u,%u\n", dib_bits[i], expect, i % 16, i / 16 );
+    }
+    DeleteDC( hdc );
+    DeleteObject( dib );
+    DeleteObject( brush );
+    DeleteObject( palette );
+    DeleteObject( palette2 );
+}
+
 START_TEST(brush)
 {
     test_solidbrush();
     test_pattern_brush();
+    test_palette_brush();
 }




More information about the wine-cvs mailing list