mirror of
https://github.com/reactos/reactos.git
synced 2025-07-24 13:43:42 +00:00
[gdiplus_winetest]
sync gdiplus_winetest with wine 1.1.35 svn path=/trunk/; revision=44906
This commit is contained in:
parent
65abaf1120
commit
d8530b148b
8 changed files with 1796 additions and 76 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
@ -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[] = {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue