gdiplus: Implement GdipImageGetFrameDimensionsList.

This commit is contained in:
Vincent Povirk 2009-12-24 16:04:32 -05:00 committed by Alexandre Julliard
parent 7d62e1f776
commit d87b1d4980
2 changed files with 40 additions and 7 deletions

View File

@ -1708,6 +1708,19 @@ GpStatus WINGDIPAPI GdipGetPropertySize(GpImage *image, UINT* size, UINT* num)
return InvalidParameter;
}
struct image_format_dimension
{
const GUID *format;
const GUID *dimension;
};
struct image_format_dimension image_format_dimensions[] =
{
{&ImageFormatGIF, &FrameDimensionTime},
{&ImageFormatIcon, &FrameDimensionResolution},
{NULL}
};
GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage *image,
GDIPCONST GUID* dimensionID, UINT* count)
{
@ -1738,13 +1751,27 @@ GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage *image,
GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage* image,
GUID* dimensionIDs, UINT count)
{
static int calls;
int i;
const GUID *result=NULL;
if(!image || !dimensionIDs)
TRACE("(%p,%p,%u)\n", image, dimensionIDs, count);
if(!image || !dimensionIDs || count != 1)
return InvalidParameter;
if(!(calls++))
FIXME("not implemented\n");
for (i=0; image_format_dimensions[i].format; i++)
{
if (IsEqualGUID(&image->format, image_format_dimensions[i].format))
{
result = image_format_dimensions[i].dimension;
break;
}
}
if (!result)
result = &FrameDimensionPage;
memcpy(dimensionIDs, result, sizeof(GUID));
return Ok;
}

View File

@ -206,7 +206,13 @@ static void test_GdipImageGetFrameDimensionsCount(void)
stat = GdipImageGetFrameDimensionsList((GpImage*)bm, &dimension, 1);
expect(Ok, stat);
expect_guid(&FrameDimensionPage, &dimension, __LINE__, TRUE);
expect_guid(&FrameDimensionPage, &dimension, __LINE__, FALSE);
stat = GdipImageGetFrameDimensionsList((GpImage*)bm, &dimension, 2);
expect(InvalidParameter, stat);
stat = GdipImageGetFrameDimensionsList((GpImage*)bm, &dimension, 0);
expect(InvalidParameter, stat);
count = 12345;
stat = GdipImageGetFrameCount((GpImage*)bm, &dimension, &count);
@ -1246,7 +1252,7 @@ static void test_multiframegif(void)
stat = GdipImageGetFrameDimensionsList((GpImage*)bmp, &dimension, 1);
expect(Ok, stat);
expect_guid(&FrameDimensionTime, &dimension, __LINE__, TRUE);
expect_guid(&FrameDimensionTime, &dimension, __LINE__, FALSE);
count = 12345;
stat = GdipImageGetFrameCount((GpImage*)bmp, &dimension, &count);
@ -1320,7 +1326,7 @@ static void test_multiframegif(void)
stat = GdipImageGetFrameDimensionsList((GpImage*)bmp, &dimension, 1);
expect(Ok, stat);
expect_guid(&FrameDimensionTime, &dimension, __LINE__, TRUE);
expect_guid(&FrameDimensionTime, &dimension, __LINE__, FALSE);
count = 12345;
stat = GdipImageGetFrameCount((GpImage*)bmp, &dimension, &count);