mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 12:54:13 +00:00
gdi32: Respect DIB_PAL_COLORS in every case.
This commit is contained in:
parent
b73b2eca47
commit
5333923253
2 changed files with 59 additions and 16 deletions
|
@ -701,7 +701,11 @@ INT WINAPI GetDIBits(
|
|||
}
|
||||
}
|
||||
else {
|
||||
if(bpp >= bmp->bitmap.bmBitsPixel) {
|
||||
if (coloruse == DIB_PAL_COLORS) {
|
||||
for (i = 0; i < (1 << bpp); i++)
|
||||
((WORD *)colorPtr)[i] = (WORD)i;
|
||||
}
|
||||
else if(bpp >= bmp->bitmap.bmBitsPixel) {
|
||||
/* Generate the color map from the selected palette */
|
||||
PALETTEENTRY palEntry[256];
|
||||
|
||||
|
@ -713,22 +717,19 @@ INT WINAPI GetDIBits(
|
|||
return 0;
|
||||
}
|
||||
for (i = 0; i < (1 << bmp->bitmap.bmBitsPixel); i++) {
|
||||
if (coloruse == DIB_RGB_COLORS) {
|
||||
if (core_header)
|
||||
{
|
||||
rgbTriples[i].rgbtRed = palEntry[i].peRed;
|
||||
rgbTriples[i].rgbtGreen = palEntry[i].peGreen;
|
||||
rgbTriples[i].rgbtBlue = palEntry[i].peBlue;
|
||||
}
|
||||
else
|
||||
{
|
||||
rgbQuads[i].rgbRed = palEntry[i].peRed;
|
||||
rgbQuads[i].rgbGreen = palEntry[i].peGreen;
|
||||
rgbQuads[i].rgbBlue = palEntry[i].peBlue;
|
||||
rgbQuads[i].rgbReserved = 0;
|
||||
}
|
||||
if (core_header)
|
||||
{
|
||||
rgbTriples[i].rgbtRed = palEntry[i].peRed;
|
||||
rgbTriples[i].rgbtGreen = palEntry[i].peGreen;
|
||||
rgbTriples[i].rgbtBlue = palEntry[i].peBlue;
|
||||
}
|
||||
else
|
||||
{
|
||||
rgbQuads[i].rgbRed = palEntry[i].peRed;
|
||||
rgbQuads[i].rgbGreen = palEntry[i].peGreen;
|
||||
rgbQuads[i].rgbBlue = palEntry[i].peBlue;
|
||||
rgbQuads[i].rgbReserved = 0;
|
||||
}
|
||||
else ((WORD *)colorPtr)[i] = (WORD)i;
|
||||
}
|
||||
} else {
|
||||
switch (bpp) {
|
||||
|
|
|
@ -1315,6 +1315,28 @@ static void test_GetDIBits_selected_DDB(BOOL monochrome)
|
|||
}
|
||||
ok(equalContents, "GetDIBits with DDB selected in DC: Got different DIB bits\n");
|
||||
|
||||
/* Test the palette */
|
||||
equalContents = TRUE;
|
||||
if (info2->bmiHeader.biBitCount <= 8)
|
||||
{
|
||||
WORD *colors = (WORD*)info2->bmiColors;
|
||||
|
||||
/* Get the palette indices */
|
||||
res = GetDIBits(dc, ddb, 0, 0, NULL, info2, DIB_PAL_COLORS);
|
||||
ok(res, "GetDIBits failed\n");
|
||||
|
||||
for (i=0;i < 1 << info->bmiHeader.biSizeImage; i++)
|
||||
{
|
||||
if (colors[i] != i)
|
||||
{
|
||||
equalContents = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ok(equalContents, "GetDIBits with DDB selected in DC: non 1:1 palette indices\n");
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, bits2);
|
||||
HeapFree(GetProcessHeap(), 0, bits);
|
||||
DeleteDC(dc);
|
||||
|
@ -1496,6 +1518,16 @@ todo_wine
|
|||
todo_wine
|
||||
ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
|
||||
|
||||
/* Test the palette indices */
|
||||
memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256);
|
||||
SetLastError(0xdeadbeef);
|
||||
lines = GetDIBits(hdc, hbmp, 0, 0, NULL, bi, DIB_PAL_COLORS);
|
||||
|
||||
ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
|
||||
ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
|
||||
for (i = 2; i < 256; i++)
|
||||
ok(((WORD*)bi->bmiColors)[i] == 0xAAAA, "Color %d is %d\n", i, ((WORD*)bi->bmiColors)[1]);
|
||||
|
||||
/* retrieve 24-bit DIB data */
|
||||
memset(bi, 0, sizeof(*bi));
|
||||
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
|
@ -1596,6 +1628,16 @@ todo_wine
|
|||
todo_wine
|
||||
ok(!memcmp(buf, dib_bits_1, sizeof(dib_bits_1)), "DIB bits don't match\n");
|
||||
|
||||
/* Test the palette indices */
|
||||
memset(bi->bmiColors, 0xAA, sizeof(RGBQUAD) * 256);
|
||||
SetLastError(0xdeadbeef);
|
||||
lines = GetDIBits(hdc, hbmp, 0, 0, NULL, bi, DIB_PAL_COLORS);
|
||||
|
||||
ok(((WORD*)bi->bmiColors)[0] == 0, "Color 0 is %d\n", ((WORD*)bi->bmiColors)[0]);
|
||||
ok(((WORD*)bi->bmiColors)[1] == 1, "Color 1 is %d\n", ((WORD*)bi->bmiColors)[1]);
|
||||
for (i = 2; i < 256; i++)
|
||||
ok(((WORD*)bi->bmiColors)[i] == 0xAAAA, "Color %d is %d\n", i, ((WORD*)bi->bmiColors)[i]);
|
||||
|
||||
/* retrieve 24-bit DIB data */
|
||||
memset(bi, 0, sizeof(*bi));
|
||||
bi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
|
|
Loading…
Reference in a new issue