[gdiplus_winetest]

sync gdiplus_winetest with wine 1.1.35

svn path=/trunk/; revision=44906
This commit is contained in:
Christoph von Wittich 2010-01-03 10:54:40 +00:00
parent 65abaf1120
commit d8530b148b
8 changed files with 1796 additions and 76 deletions

View file

@ -310,9 +310,9 @@ static void test_gradientgetrect(void)
memset(&rectf, 0, sizeof(GpRectF));
status = GdipGetLineRect(brush, &rectf);
expect(Ok, status);
todo_wine expectf(-5.0, rectf.X);
expectf(-5.0, rectf.X);
expectf(0.0, rectf.Y);
todo_wine expectf(10.0, rectf.Width);
expectf(10.0, rectf.Width);
expectf(10.0, rectf.Height);
status = GdipDeleteBrush((GpBrush*)brush);
/* horizontal gradient */
@ -324,9 +324,9 @@ static void test_gradientgetrect(void)
status = GdipGetLineRect(brush, &rectf);
expect(Ok, status);
expectf(0.0, rectf.X);
todo_wine expectf(-5.0, rectf.Y);
expectf(-5.0, rectf.Y);
expectf(10.0, rectf.Width);
todo_wine expectf(10.0, rectf.Height);
expectf(10.0, rectf.Height);
status = GdipDeleteBrush((GpBrush*)brush);
/* slope = -1 */
pt1.X = pt1.Y = 0.0;
@ -395,8 +395,11 @@ static void test_lineblend(void)
int i;
const REAL factors[5] = {0.0f, 0.1f, 0.5f, 0.9f, 1.0f};
const REAL positions[5] = {0.0f, 0.2f, 0.5f, 0.8f, 1.0f};
const REAL two_positions[2] = {0.0f, 1.0f};
const ARGB colors[5] = {0xff0000ff, 0xff00ff00, 0xff00ffff, 0xffff0000, 0xffffffff};
REAL res_factors[6] = {0.3f, 0.0f, 0.0f, 0.0f, 0.0f};
REAL res_positions[6] = {0.3f, 0.0f, 0.0f, 0.0f, 0.0f};
ARGB res_colors[6] = {0xdeadbeef, 0, 0, 0, 0};
pt1.X = pt1.Y = 1.0;
pt2.X = pt2.Y = 100.0;
@ -489,6 +492,156 @@ static void test_lineblend(void)
status = GdipGetLineBlend(brush, res_factors, res_positions, 1);
expect(Ok, status);
status = GdipGetLinePresetBlendCount(NULL, &count);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlendCount(brush, NULL);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlendCount(brush, &count);
expect(Ok, status);
expect(0, count);
status = GdipGetLinePresetBlend(NULL, res_colors, res_positions, 1);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlend(brush, NULL, res_positions, 1);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlend(brush, res_colors, NULL, 1);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlend(brush, res_colors, res_positions, 0);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlend(brush, res_colors, res_positions, -1);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlend(brush, res_colors, res_positions, 1);
expect(InvalidParameter, status);
status = GdipGetLinePresetBlend(brush, res_colors, res_positions, 2);
expect(GenericError, status);
status = GdipSetLinePresetBlend(NULL, colors, positions, 5);
expect(InvalidParameter, status);
status = GdipSetLinePresetBlend(brush, NULL, positions, 5);
expect(InvalidParameter, status);
status = GdipSetLinePresetBlend(brush, colors, NULL, 5);
expect(InvalidParameter, status);
status = GdipSetLinePresetBlend(brush, colors, positions, 0);
expect(InvalidParameter, status);
status = GdipSetLinePresetBlend(brush, colors, positions, -1);
expect(InvalidParameter, status);
status = GdipSetLinePresetBlend(brush, colors, positions, 1);
expect(InvalidParameter, status);
/* leave off the 0.0 position */
status = GdipSetLinePresetBlend(brush, &colors[1], &positions[1], 4);
expect(InvalidParameter, status);
/* leave off the 1.0 position */
status = GdipSetLinePresetBlend(brush, colors, positions, 4);
expect(InvalidParameter, status);
status = GdipSetLinePresetBlend(brush, colors, positions, 5);
expect(Ok, status);
status = GdipGetLinePresetBlendCount(brush, &count);
expect(Ok, status);
expect(5, count);
status = GdipGetLinePresetBlend(brush, res_colors, res_positions, 4);
expect(InsufficientBuffer, status);
status = GdipGetLinePresetBlend(brush, res_colors, res_positions, 5);
expect(Ok, status);
for (i=0; i<5; i++)
{
expect(colors[i], res_colors[i]);
expectf(positions[i], res_positions[i]);
}
status = GdipGetLinePresetBlend(brush, res_colors, res_positions, 6);
expect(Ok, status);
status = GdipSetLinePresetBlend(brush, colors, two_positions, 2);
expect(Ok, status);
status = GdipDeleteBrush((GpBrush*)brush);
expect(Ok, status);
}
static void test_linelinearblend(void)
{
GpLineGradient *brush;
GpStatus status;
GpPointF pt1, pt2;
INT count=10;
REAL res_factors[3] = {0.3f};
REAL res_positions[3] = {0.3f};
status = GdipSetLineLinearBlend(NULL, 0.6, 0.8);
expect(InvalidParameter, status);
pt1.X = pt1.Y = 1.0;
pt2.X = pt2.Y = 100.0;
status = GdipCreateLineBrush(&pt1, &pt2, 0, 0, WrapModeTile, &brush);
expect(Ok, status);
status = GdipSetLineLinearBlend(brush, 0.6, 0.8);
expect(Ok, status);
status = GdipGetLineBlendCount(brush, &count);
expect(Ok, status);
expect(3, count);
status = GdipGetLineBlend(brush, res_factors, res_positions, 3);
expect(Ok, status);
expectf(0.0, res_factors[0]);
expectf(0.0, res_positions[0]);
expectf(0.8, res_factors[1]);
expectf(0.6, res_positions[1]);
expectf(0.0, res_factors[2]);
expectf(1.0, res_positions[2]);
status = GdipSetLineLinearBlend(brush, 0.0, 0.8);
expect(Ok, status);
status = GdipGetLineBlendCount(brush, &count);
expect(Ok, status);
expect(2, count);
status = GdipGetLineBlend(brush, res_factors, res_positions, 3);
expect(Ok, status);
expectf(0.8, res_factors[0]);
expectf(0.0, res_positions[0]);
expectf(0.0, res_factors[1]);
expectf(1.0, res_positions[1]);
status = GdipSetLineLinearBlend(brush, 1.0, 0.8);
expect(Ok, status);
status = GdipGetLineBlendCount(brush, &count);
expect(Ok, status);
expect(2, count);
status = GdipGetLineBlend(brush, res_factors, res_positions, 3);
expect(Ok, status);
expectf(0.0, res_factors[0]);
expectf(0.0, res_positions[0]);
expectf(0.8, res_factors[1]);
expectf(1.0, res_positions[1]);
status = GdipDeleteBrush((GpBrush*)brush);
expect(Ok, status);
}
@ -515,6 +668,7 @@ START_TEST(brush)
test_texturewrap();
test_gradientgetrect();
test_lineblend();
test_linelinearblend();
GdiplusShutdown(gdiplusToken);
}

View file

@ -59,8 +59,11 @@ static void test_constructor_destructor(void)
stat = GdipDeleteCustomLineCap(custom);
expect(Ok, stat);
/* it's strange but native returns NotImplemented on stroke == NULL */
custom = NULL;
stat = GdipCreateCustomLineCap(path, NULL, LineCapFlat, 10.0, &custom);
todo_wine expect(NotImplemented, stat);
todo_wine ok(custom == NULL, "Expected a failure on creation\n");
if(stat == Ok) GdipDeleteCustomLineCap(custom);
GdipDeletePath(path2);
GdipDeletePath(path);

View file

@ -31,14 +31,6 @@ static const WCHAR MicrosoftSansSerif[] = {'M','i','c','r','o','s','o','f','t','
static const WCHAR TimesNewRoman[] = {'T','i','m','e','s',' ','N','e','w',' ','R','o','m','a','n','\0'};
static const WCHAR CourierNew[] = {'C','o','u','r','i','e','r',' ','N','e','w','\0'};
static const char *debugstr_w(LPCWSTR str)
{
static char buf[1024];
WideCharToMultiByte(CP_ACP, 0, str, -1, buf, sizeof(buf), NULL, NULL);
return buf;
}
static void test_createfont(void)
{
GpFontFamily* fontfamily = NULL, *fontfamily2;
@ -71,7 +63,7 @@ static void test_createfont(void)
stat = GdipGetFamilyName(fontfamily2, familyname, 0);
expect(Ok, stat);
ok (lstrcmpiW(arial, familyname) == 0, "Expected arial, got %s\n",
debugstr_w(familyname));
wine_dbgstr_w(familyname));
stat = GdipDeleteFontFamily(fontfamily2);
expect(Ok, stat);
@ -201,6 +193,7 @@ todo_wine
{
stat = GdipCreateFontFamilyFromName (MSSansSerif, NULL, &family);
expect (FontFamilyNotFound, stat);
if(stat == Ok) GdipDeleteFontFamily(family);
}
stat = GdipCreateFontFamilyFromName (arial, NULL, &family);
@ -302,10 +295,9 @@ static void test_getgenerics (void)
expect (Ok, stat);
stat = GdipGetFamilyName (family, familyName, LANG_NEUTRAL);
expect (Ok, stat);
ok ((lstrcmpiW(familyName, MicrosoftSansSerif) == 0) ||
(lstrcmpiW(familyName,MSSansSerif) == 0),
"Expected Microsoft Sans Serif or MS Sans Serif, got %s\n",
debugstr_w(familyName));
todo_wine ok ((lstrcmpiW(familyName, MicrosoftSansSerif) == 0),
"Expected Microsoft Sans Serif, got %s\n",
wine_dbgstr_w(familyName));
stat = GdipDeleteFontFamily (family);
expect (Ok, stat);
@ -320,7 +312,7 @@ serif:
stat = GdipGetFamilyName (family, familyName, LANG_NEUTRAL);
expect (Ok, stat);
ok (lstrcmpiW(familyName, TimesNewRoman) == 0,
"Expected Times New Roman, got %s\n", debugstr_w(familyName));
"Expected Times New Roman, got %s\n", wine_dbgstr_w(familyName));
stat = GdipDeleteFontFamily (family);
expect (Ok, stat);
@ -335,7 +327,7 @@ monospace:
stat = GdipGetFamilyName (family, familyName, LANG_NEUTRAL);
expect (Ok, stat);
ok (lstrcmpiW(familyName, CourierNew) == 0,
"Expected Courier New, got %s\n", debugstr_w(familyName));
"Expected Courier New, got %s\n", wine_dbgstr_w(familyName));
stat = GdipDeleteFontFamily (family);
expect (Ok, stat);
}

File diff suppressed because it is too large Load diff

View file

@ -410,11 +410,14 @@ static void test_worldbounds(void)
status = GdipGetPathWorldBounds(path, &bounds, matrix, NULL);
expect(Ok, status);
GdipDeletePath(path);
GdipDeleteMatrix(matrix);
expectf(-209.6, bounds.X);
expectf(-1274.8, bounds.Y);
expectf(705.0, bounds.Width);
expectf(945.0, bounds.Height);
GdipDeletePen(pen);
}
static path_test_t pathpath_path[] = {

View file

@ -27,28 +27,34 @@
#include "gdiplus.h"
#include "wine/test.h"
#define expect(expected, got) ok(((UINT)got) == ((UINT)expected), "Expected %.8x, got %.8x\n", (UINT)expected, (UINT)got)
#define expect(expected, got) ok((UINT)(got) == (UINT)(expected), "Expected %.8x, got %.8x\n", (UINT)(expected), (UINT)(got))
#define expectf(expected, got) ok(fabs(expected - got) < 0.0001, "Expected %.2f, got %.2f\n", expected, got)
static void expect_guid(REFGUID expected, REFGUID got, int line, BOOL todo)
{
WCHAR bufferW[39];
char buffer[39];
char buffer2[39];
StringFromGUID2(got, bufferW, sizeof(bufferW)/sizeof(bufferW[0]));
WideCharToMultiByte(CP_ACP, 0, bufferW, sizeof(bufferW)/sizeof(bufferW[0]), buffer, sizeof(buffer), NULL, NULL);
StringFromGUID2(expected, bufferW, sizeof(bufferW)/sizeof(bufferW[0]));
WideCharToMultiByte(CP_ACP, 0, bufferW, sizeof(bufferW)/sizeof(bufferW[0]), buffer2, sizeof(buffer2), NULL, NULL);
if(todo)
todo_wine ok_(__FILE__, line)(IsEqualGUID(expected, got), "Expected %s, got %s\n", buffer2, buffer);
else
ok_(__FILE__, line)(IsEqualGUID(expected, got), "Expected %s, got %s\n", buffer2, buffer);
}
static void expect_rawformat(REFGUID expected, GpImage *img, int line, BOOL todo)
{
GUID raw;
WCHAR bufferW[39];
char buffer[39];
char buffer2[39];
GpStatus stat;
stat = GdipGetImageRawFormat(img, &raw);
ok_(__FILE__, line)(stat == Ok, "GdipGetImageRawFormat failed with %d\n", stat);
if(stat != Ok) return;
StringFromGUID2(&raw, bufferW, sizeof(bufferW)/sizeof(bufferW[0]));
WideCharToMultiByte(CP_ACP, 0, bufferW, sizeof(bufferW)/sizeof(bufferW[0]), buffer, sizeof(buffer), NULL, NULL);
StringFromGUID2(expected, bufferW, sizeof(bufferW)/sizeof(bufferW[0]));
WideCharToMultiByte(CP_ACP, 0, bufferW, sizeof(bufferW)/sizeof(bufferW[0]), buffer2, sizeof(buffer2), NULL, NULL);
if(todo)
todo_wine ok_(__FILE__, line)(IsEqualGUID(&raw, expected), "Expected format %s, got %s\n", buffer2, buffer);
else
ok_(__FILE__, line)(IsEqualGUID(&raw, expected), "Expected format %s, got %s\n", buffer2, buffer);
expect_guid(expected, &raw, line, todo);
}
static void test_bufferrawformat(void* buff, int size, REFGUID expected, int line, BOOL todo)
@ -177,6 +183,9 @@ static void test_GdipImageGetFrameDimensionsCount(void)
GpStatus stat;
const REAL WIDTH = 10.0, HEIGHT = 20.0;
UINT w;
GUID dimension = {0};
UINT count;
ARGB color;
bm = (GpBitmap*)0xdeadbeef;
stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB,NULL, &bm);
@ -194,6 +203,26 @@ static void test_GdipImageGetFrameDimensionsCount(void)
stat = GdipImageGetFrameDimensionsCount((GpImage*)bm,&w);
expect(Ok, stat);
expect(1, w);
stat = GdipImageGetFrameDimensionsList((GpImage*)bm, &dimension, 1);
expect(Ok, stat);
expect_guid(&FrameDimensionPage, &dimension, __LINE__, TRUE);
count = 12345;
stat = GdipImageGetFrameCount((GpImage*)bm, &dimension, &count);
todo_wine expect(Ok, stat);
todo_wine expect(1, count);
GdipBitmapSetPixel(bm, 0, 0, 0xffffffff);
stat = GdipImageSelectActiveFrame((GpImage*)bm, &dimension, 0);
expect(Ok, stat);
/* SelectActiveFrame has no effect on image data of memory bitmaps */
color = 0xdeadbeef;
GdipBitmapGetPixel(bm, 0, 0, &color);
expect(0xffffffff, color);
GdipDisposeImage((GpImage*)bm);
}
@ -465,6 +494,7 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
const REAL HEIGHT2 = 20;
HDC hdc;
BITMAPINFO bmi;
BYTE *bits;
stat = GdipCreateBitmapFromHBITMAP(NULL, NULL, NULL);
expect(InvalidParameter, stat);
@ -486,7 +516,7 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
expect(Ok, stat);
/* raw format */
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)gpbm, __LINE__, TRUE);
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)gpbm, __LINE__, FALSE);
expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height));
expectf(WIDTH2, width);
@ -504,20 +534,31 @@ static void test_GdipCreateBitmapFromHBITMAP(void)
bmi.bmiHeader.biPlanes = 1;
bmi.bmiHeader.biCompression = BI_RGB;
hbm = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, NULL, NULL, 0);
hbm = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, (void**)&bits, NULL, 0);
ok(hbm != NULL, "CreateDIBSection failed\n");
bits[0] = 0;
stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, &gpbm);
expect(Ok, stat);
expect(Ok, GdipGetImageDimension((GpImage*) gpbm, &width, &height));
expectf(WIDTH1, width);
expectf(HEIGHT1, height);
if (stat == Ok)
{
/* test whether writing to the bitmap affects the original */
stat = GdipBitmapSetPixel(gpbm, 0, 0, 0xffffffff);
expect(Ok, stat);
expect(0, bits[0]);
GdipDisposeImage((GpImage*)gpbm);
}
LogPal = GdipAlloc(sizeof(LOGPALETTE));
ok(LogPal != NULL, "unable to allocate LOGPALETTE\n");
LogPal->palVersion = 0x300;
LogPal->palNumEntries = 1;
hpal = CreatePalette(LogPal);
ok(hpal != NULL, "CreatePalette failed\n");
GdipFree(LogPal);
@ -564,12 +605,12 @@ static void test_GdipCloneImage(void)
/* Create an image, clone it, delete the original, make sure the copy works */
stat = GdipCreateBitmapFromScan0(WIDTH, HEIGHT, 0, PixelFormat24bppRGB, NULL, &bm);
expect(Ok, stat);
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bm, __LINE__, TRUE);
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bm, __LINE__, FALSE);
image_src = ((GpImage*)bm);
stat = GdipCloneImage(image_src, &image_dest);
expect(Ok, stat);
expect_rawformat(&ImageFormatMemoryBMP, image_dest, __LINE__, TRUE);
expect_rawformat(&ImageFormatMemoryBMP, image_dest, __LINE__, FALSE);
stat = GdipDisposeImage((GpImage*)bm);
expect(Ok, stat);
@ -646,7 +687,7 @@ static void test_fromhicon(void)
stat = GdipGetImagePixelFormat((GpImage*)bitmap, &format);
expect(PixelFormat32bppARGB, format);
/* raw format */
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bitmap, __LINE__, TRUE);
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bitmap, __LINE__, FALSE);
GdipDisposeImage((GpImage*)bitmap);
}
DestroyIcon(hIcon);
@ -682,7 +723,7 @@ static void test_fromhicon(void)
stat = GdipGetImagePixelFormat((GpImage*)bitmap, &format);
expect(PixelFormat32bppARGB, format);
/* raw format */
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bitmap, __LINE__, TRUE);
expect_rawformat(&ImageFormatMemoryBMP, (GpImage*)bitmap, __LINE__, FALSE);
GdipDisposeImage((GpImage*)bitmap);
}
DestroyIcon(hIcon);
@ -735,10 +776,320 @@ static const unsigned char jpgimage[285] = {
};
static void test_getrawformat(void)
{
test_bufferrawformat((void*)pngimage, sizeof(pngimage), &ImageFormatPNG, __LINE__, TRUE);
test_bufferrawformat((void*)gifimage, sizeof(gifimage), &ImageFormatGIF, __LINE__, TRUE);
test_bufferrawformat((void*)pngimage, sizeof(pngimage), &ImageFormatPNG, __LINE__, FALSE);
test_bufferrawformat((void*)gifimage, sizeof(gifimage), &ImageFormatGIF, __LINE__, FALSE);
test_bufferrawformat((void*)bmpimage, sizeof(bmpimage), &ImageFormatBMP, __LINE__, FALSE);
test_bufferrawformat((void*)jpgimage, sizeof(jpgimage), &ImageFormatJPEG, __LINE__, TRUE);
test_bufferrawformat((void*)jpgimage, sizeof(jpgimage), &ImageFormatJPEG, __LINE__, FALSE);
}
static void test_createhbitmap(void)
{
GpStatus stat;
GpBitmap *bitmap;
HBITMAP hbitmap, oldhbitmap;
BITMAP bm;
int ret;
HDC hdc;
COLORREF pixel;
BYTE bits[640];
memset(bits, 0x68, 640);
/* create Bitmap */
stat = GdipCreateBitmapFromScan0(10, 20, 32, PixelFormat24bppRGB, bits, &bitmap);
expect(Ok, stat);
/* test NULL values */
stat = GdipCreateHBITMAPFromBitmap(NULL, &hbitmap, 0);
expect(InvalidParameter, stat);
stat = GdipCreateHBITMAPFromBitmap(bitmap, NULL, 0);
expect(InvalidParameter, stat);
/* create HBITMAP */
stat = GdipCreateHBITMAPFromBitmap(bitmap, &hbitmap, 0);
expect(Ok, stat);
if (stat == Ok)
{
ret = GetObjectA(hbitmap, sizeof(BITMAP), &bm);
expect(sizeof(BITMAP), ret);
expect(0, bm.bmType);
expect(10, bm.bmWidth);
expect(20, bm.bmHeight);
expect(40, bm.bmWidthBytes);
expect(1, bm.bmPlanes);
expect(32, bm.bmBitsPixel);
ok(bm.bmBits != NULL, "got DDB, expected DIB\n");
hdc = CreateCompatibleDC(NULL);
oldhbitmap = SelectObject(hdc, hbitmap);
pixel = GetPixel(hdc, 5, 5);
SelectObject(hdc, oldhbitmap);
DeleteDC(hdc);
expect(0x686868, pixel);
DeleteObject(hbitmap);
}
stat = GdipDisposeImage((GpImage*)bitmap);
expect(Ok, stat);
}
static void test_getsetpixel(void)
{
GpStatus stat;
GpBitmap *bitmap;
ARGB color;
BYTE bits[16] = {0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0x00,
0xff,0x00,0x00,0x00, 0xff,0xff,0xff,0x00};
stat = GdipCreateBitmapFromScan0(2, 2, 8, PixelFormat32bppRGB, bits, &bitmap);
expect(Ok, stat);
/* null parameters */
stat = GdipBitmapGetPixel(NULL, 1, 1, &color);
expect(InvalidParameter, stat);
stat = GdipBitmapGetPixel(bitmap, 1, 1, NULL);
expect(InvalidParameter, stat);
stat = GdipBitmapSetPixel(NULL, 1, 1, 0);
expect(InvalidParameter, stat);
/* out of bounds */
stat = GdipBitmapGetPixel(bitmap, -1, 1, &color);
expect(InvalidParameter, stat);
stat = GdipBitmapSetPixel(bitmap, -1, 1, 0);
expect(InvalidParameter, stat);
stat = GdipBitmapGetPixel(bitmap, 1, -1, &color);
ok(stat == InvalidParameter ||
broken(stat == Ok), /* Older gdiplus */
"Expected InvalidParameter, got %.8x\n", stat);
stat = GdipBitmapSetPixel(bitmap, 1, -1, 0);
ok(stat == InvalidParameter ||
broken(stat == Ok), /* Older gdiplus */
"Expected InvalidParameter, got %.8x\n", stat);
stat = GdipBitmapGetPixel(bitmap, 2, 1, &color);
expect(InvalidParameter, stat);
stat = GdipBitmapSetPixel(bitmap, 2, 1, 0);
expect(InvalidParameter, stat);
stat = GdipBitmapGetPixel(bitmap, 1, 2, &color);
expect(InvalidParameter, stat);
stat = GdipBitmapSetPixel(bitmap, 1, 2, 0);
expect(InvalidParameter, stat);
/* valid use */
stat = GdipBitmapGetPixel(bitmap, 1, 1, &color);
expect(Ok, stat);
expect(0xffffffff, color);
stat = GdipBitmapGetPixel(bitmap, 0, 1, &color);
expect(Ok, stat);
expect(0xff0000ff, color);
stat = GdipBitmapSetPixel(bitmap, 1, 1, 0xff676869);
expect(Ok, stat);
stat = GdipBitmapSetPixel(bitmap, 0, 0, 0xff474849);
expect(Ok, stat);
stat = GdipBitmapGetPixel(bitmap, 1, 1, &color);
expect(Ok, stat);
expect(0xff676869, color);
stat = GdipBitmapGetPixel(bitmap, 0, 0, &color);
expect(Ok, stat);
expect(0xff474849, color);
stat = GdipDisposeImage((GpImage*)bitmap);
expect(Ok, stat);
}
static void check_halftone_palette(ColorPalette *palette)
{
static const BYTE halftone_values[6]={0x00,0x33,0x66,0x99,0xcc,0xff};
UINT i;
for (i=0; i<palette->Count; i++)
{
ARGB expected=0xff000000;
if (i<8)
{
if (i&1) expected |= 0x800000;
if (i&2) expected |= 0x8000;
if (i&4) expected |= 0x80;
}
else if (i == 8)
{
expected = 0xffc0c0c0;
}
else if (i < 16)
{
if (i&1) expected |= 0xff0000;
if (i&2) expected |= 0xff00;
if (i&4) expected |= 0xff;
}
else if (i < 40)
{
expected = 0x00000000;
}
else
{
expected |= halftone_values[(i-40)%6];
expected |= halftone_values[((i-40)/6)%6] << 8;
expected |= halftone_values[((i-40)/36)%6] << 16;
}
ok(expected == palette->Entries[i], "Expected %.8x, got %.8x, i=%u/%u\n",
expected, palette->Entries[i], i, palette->Count);
}
}
static void test_palette(void)
{
GpStatus stat;
GpBitmap *bitmap;
INT size;
BYTE buffer[1040];
ColorPalette *palette=(ColorPalette*)buffer;
/* test initial palette from non-indexed bitmap */
stat = GdipCreateBitmapFromScan0(2, 2, 8, PixelFormat32bppRGB, NULL, &bitmap);
expect(Ok, stat);
stat = GdipGetImagePaletteSize((GpImage*)bitmap, &size);
expect(Ok, stat);
expect(sizeof(UINT)*2+sizeof(ARGB), size);
stat = GdipGetImagePalette((GpImage*)bitmap, palette, size);
expect(Ok, stat);
expect(0, palette->Count);
/* test setting palette on not-indexed bitmap */
palette->Count = 3;
stat = GdipSetImagePalette((GpImage*)bitmap, palette);
expect(Ok, stat);
stat = GdipGetImagePaletteSize((GpImage*)bitmap, &size);
expect(Ok, stat);
expect(sizeof(UINT)*2+sizeof(ARGB)*3, size);
stat = GdipGetImagePalette((GpImage*)bitmap, palette, size);
expect(Ok, stat);
expect(3, palette->Count);
GdipDisposeImage((GpImage*)bitmap);
/* test initial palette on 1-bit bitmap */
stat = GdipCreateBitmapFromScan0(2, 2, 4, PixelFormat1bppIndexed, NULL, &bitmap);
expect(Ok, stat);
stat = GdipGetImagePaletteSize((GpImage*)bitmap, &size);
expect(Ok, stat);
expect(sizeof(UINT)*2+sizeof(ARGB)*2, size);
stat = GdipGetImagePalette((GpImage*)bitmap, palette, size);
expect(Ok, stat);
expect(PaletteFlagsGrayScale, palette->Flags);
expect(2, palette->Count);
expect(0xff000000, palette->Entries[0]);
expect(0xffffffff, palette->Entries[1]);
GdipDisposeImage((GpImage*)bitmap);
/* test initial palette on 4-bit bitmap */
stat = GdipCreateBitmapFromScan0(2, 2, 4, PixelFormat4bppIndexed, NULL, &bitmap);
expect(Ok, stat);
stat = GdipGetImagePaletteSize((GpImage*)bitmap, &size);
expect(Ok, stat);
expect(sizeof(UINT)*2+sizeof(ARGB)*16, size);
stat = GdipGetImagePalette((GpImage*)bitmap, palette, size);
expect(Ok, stat);
expect(0, palette->Flags);
expect(16, palette->Count);
check_halftone_palette(palette);
GdipDisposeImage((GpImage*)bitmap);
/* test initial palette on 8-bit bitmap */
stat = GdipCreateBitmapFromScan0(2, 2, 8, PixelFormat8bppIndexed, NULL, &bitmap);
expect(Ok, stat);
stat = GdipGetImagePaletteSize((GpImage*)bitmap, &size);
expect(Ok, stat);
expect(sizeof(UINT)*2+sizeof(ARGB)*256, size);
stat = GdipGetImagePalette((GpImage*)bitmap, palette, size);
expect(Ok, stat);
expect(PaletteFlagsHalftone, palette->Flags);
expect(256, palette->Count);
check_halftone_palette(palette);
/* test setting/getting a different palette */
palette->Entries[1] = 0xffcccccc;
stat = GdipSetImagePalette((GpImage*)bitmap, palette);
expect(Ok, stat);
palette->Entries[1] = 0;
stat = GdipGetImagePaletteSize((GpImage*)bitmap, &size);
expect(Ok, stat);
expect(sizeof(UINT)*2+sizeof(ARGB)*256, size);
stat = GdipGetImagePalette((GpImage*)bitmap, palette, size);
expect(Ok, stat);
expect(PaletteFlagsHalftone, palette->Flags);
expect(256, palette->Count);
expect(0xffcccccc, palette->Entries[1]);
/* test count < 256 */
palette->Flags = 12345;
palette->Count = 3;
stat = GdipSetImagePalette((GpImage*)bitmap, palette);
expect(Ok, stat);
palette->Entries[1] = 0;
palette->Entries[3] = 0xdeadbeef;
stat = GdipGetImagePaletteSize((GpImage*)bitmap, &size);
expect(Ok, stat);
expect(sizeof(UINT)*2+sizeof(ARGB)*3, size);
stat = GdipGetImagePalette((GpImage*)bitmap, palette, size);
expect(Ok, stat);
expect(12345, palette->Flags);
expect(3, palette->Count);
expect(0xffcccccc, palette->Entries[1]);
expect(0xdeadbeef, palette->Entries[3]);
/* test count > 256 */
palette->Count = 257;
stat = GdipSetImagePalette((GpImage*)bitmap, palette);
ok(stat == InvalidParameter ||
broken(stat == Ok), /* Old gdiplus behavior */
"Expected %.8x, got %.8x\n", InvalidParameter, stat);
GdipDisposeImage((GpImage*)bitmap);
}
START_TEST(image)
@ -766,6 +1117,9 @@ START_TEST(image)
test_testcontrol();
test_fromhicon();
test_getrawformat();
test_createhbitmap();
test_getsetpixel();
test_palette();
GdiplusShutdown(gdiplusToken);
}

View file

@ -36,8 +36,11 @@ static void test_constructor_destructor(void)
/* NULL args */
stat = GdipCreatePathIter(NULL, NULL);
expect(InvalidParameter, stat);
iter = NULL;
stat = GdipCreatePathIter(&iter, NULL);
expect(Ok, stat);
ok(iter != NULL, "Expected iterator to be created\n");
GdipDeletePathIter(iter);
stat = GdipCreatePathIter(NULL, path);
expect(InvalidParameter, stat);
stat = GdipDeletePathIter(NULL);

View file

@ -33,21 +33,28 @@ static void test_startup(void)
Status status;
struct GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
int gpversion;
gdiplusStartupInput.GdiplusVersion = 1;
gdiplusStartupInput.DebugEventCallback = NULL;
gdiplusStartupInput.SuppressBackgroundThread = 0;
gdiplusStartupInput.SuppressExternalCodecs = 0;
status = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
expect(Ok, status);
GdiplusShutdown(gdiplusToken);
for (gpversion=1; gpversion<256; gpversion++)
{
gdiplusStartupInput.GdiplusVersion = gpversion;
status = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
ok(status == Ok || status == UnsupportedGdiplusVersion,
"GdiplusStartup returned %x\n", status);
GdiplusShutdown(gdiplusToken);
if (status != Ok)
{
gpversion--;
break;
}
}
gdiplusStartupInput.GdiplusVersion = 2;
status = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
expect(UnsupportedGdiplusVersion, status);
GdiplusShutdown(gdiplusToken);
ok(gpversion > 0 && gpversion <= 2, "unexpected gdiplus version %i\n", gpversion);
trace("gdiplus version is %i\n", gpversion);
status = GdipCreatePen1((ARGB)0xffff00ff, 10.0f, UnitPixel, &pen);
@ -219,7 +226,8 @@ static void test_dasharray(void)
/* Try to set with count = 0. */
GdipSetPenDashStyle(pen, DashStyleDot);
status = GdipSetPenDashArray(pen, dashes, 0);
expect(OutOfMemory, status);
ok(status == OutOfMemory || status == InvalidParameter,
"Expected OutOfMemory or InvalidParameter, got %.8x\n", status);
GdipGetPenDashStyle(pen, &style);
expect(DashStyleDot, style);