From cf49d59916513a330b0938bf561985aa4a0140ae Mon Sep 17 00:00:00 2001 From: Vincent Povirk Date: Thu, 24 Dec 2009 16:04:32 -0500 Subject: [PATCH 3/5] gdiplus: Implement GdipImageGetFrameDimensionsList. --- dlls/gdiplus/image.c | 35 +++++++++++++++++++++++++++++++---- dlls/gdiplus/tests/image.c | 12 +++++++++--- 2 files changed, 40 insertions(+), 7 deletions(-) diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c index 2716a34..e37d028 100644 --- a/dlls/gdiplus/image.c +++ b/dlls/gdiplus/image.c @@ -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; + + TRACE("(%p,%p,%u)\n", image, dimensionIDs, count); - if(!image || !dimensionIDs) + 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; } diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 60d8027..9f70191 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -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); -- 1.6.3.3