Vincent Povirk : gdiplus: Implement GdipImageGetFrameDimensionsList.
Alexandre Julliard
julliard at winehq.org
Mon Dec 28 09:16:04 CST 2009
Module: wine
Branch: master
Commit: d87b1d4980f0016093f6d0bd2212aae66ed56cbf
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d87b1d4980f0016093f6d0bd2212aae66ed56cbf
Author: Vincent Povirk <vincent at 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);
More information about the wine-cvs
mailing list