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