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