Module: wine Branch: master Commit: d87b1d4980f0016093f6d0bd2212aae66ed56cbf URL: http://source.winehq.org/git/wine.git/?a=commit;h=d87b1d4980f0016093f6d0bd22...
Author: Vincent Povirk vincent@codeweavers.com Date: Thu Dec 24 16:04:32 2009 -0500
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);