[2/2] gdiplus: Implement GdipImageGetFrameCount and GdipImageSelectActiveFrame.

Dmitry Timoshkov dmitry at baikal.ru
Wed May 16 04:29:25 CDT 2012


---
 dlls/gdiplus/image.c |   26 +++++++++++++-------------
 1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index c6a72b4..a5fabb6 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -2456,23 +2456,22 @@ static struct image_format_dimension image_format_dimensions[] =
     {NULL}
 };
 
-/* FIXME: Need to handle multi-framed images */
 GpStatus WINGDIPAPI GdipImageGetFrameCount(GpImage *image,
     GDIPCONST GUID* dimensionID, UINT* count)
 {
-    static int calls;
-
     TRACE("(%p,%s,%p)\n", image, debugstr_guid(dimensionID), count);
 
     if(!image || !count)
         return InvalidParameter;
 
-    if(!(calls++))
-        FIXME("returning frame count of 1\n");
-
-    *count = 1;
+    if (IsEqualGUID(dimensionID, &image->format) ||
+        IsEqualGUID(dimensionID, &FrameDimensionPage))
+    {
+        *count = image->frame_count;
+        return Ok;
+    }
 
-    return Ok;
+    return InvalidParameter;
 }
 
 GpStatus WINGDIPAPI GdipImageGetFrameDimensionsCount(GpImage *image,
@@ -2521,17 +2520,18 @@ GpStatus WINGDIPAPI GdipImageGetFrameDimensionsList(GpImage* image,
 GpStatus WINGDIPAPI GdipImageSelectActiveFrame(GpImage *image,
     GDIPCONST GUID* dimensionID, UINT frameidx)
 {
-    static int calls;
-
     TRACE("(%p, %s, %u)\n", image, debugstr_guid(dimensionID), frameidx);
 
     if(!image || !dimensionID)
         return InvalidParameter;
 
-    if(!(calls++))
-        FIXME("not implemented\n");
+    if (frameidx < image->frame_count)
+    {
+        image->current_frame = frameidx;
+        return Ok;
+    }
 
-    return Ok;
+    return InvalidParameter;
 }
 
 GpStatus WINGDIPAPI GdipLoadImageFromFile(GDIPCONST WCHAR* filename,
-- 
1.7.10.1




More information about the wine-patches mailing list