[1/2] gdiplus: Save total and current frame in the image structure.

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


---
 dlls/gdiplus/gdiplus_private.h |    1 +
 dlls/gdiplus/image.c           |   12 +++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h
index df66903..753a162 100644
--- a/dlls/gdiplus/gdiplus_private.h
+++ b/dlls/gdiplus/gdiplus_private.h
@@ -266,6 +266,7 @@ struct GpImage{
     ImageType type;
     GUID format;
     UINT flags;
+    UINT frame_count, current_frame;
     UINT palette_flags;
     UINT palette_count;
     UINT palette_size;
diff --git a/dlls/gdiplus/image.c b/dlls/gdiplus/image.c
index ba8b979..c6a72b4 100644
--- a/dlls/gdiplus/image.c
+++ b/dlls/gdiplus/image.c
@@ -1767,6 +1767,8 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride,
     (*bitmap)->image.type = ImageTypeBitmap;
     memcpy(&(*bitmap)->image.format, &ImageFormatMemoryBMP, sizeof(GUID));
     (*bitmap)->image.flags = ImageFlagsNone;
+    (*bitmap)->image.frame_count = 1;
+    (*bitmap)->image.current_frame = 0;
     (*bitmap)->image.palette_flags = 0;
     (*bitmap)->image.palette_count = 0;
     (*bitmap)->image.palette_size = 0;
@@ -2591,7 +2593,7 @@ static GpStatus decode_image_wic(IStream* stream, REFCLSID clsid, GpImage **imag
     WICPixelFormatGUID wic_format;
     PixelFormat gdip_format=0;
     int i;
-    UINT width, height;
+    UINT width, height, frame_count;
     BitmapData lockeddata;
     WICRect wrc;
     HRESULT initresult;
@@ -2604,7 +2606,11 @@ static GpStatus decode_image_wic(IStream* stream, REFCLSID clsid, GpImage **imag
 
     hr = IWICBitmapDecoder_Initialize(decoder, (IStream*)stream, WICDecodeMetadataCacheOnLoad);
     if (SUCCEEDED(hr))
+    {
+        IWICBitmapDecoder_GetFrameCount(decoder, &frame_count);
+        /* FIXME: set current frame */
         hr = IWICBitmapDecoder_GetFrame(decoder, 0, &frame);
+    }
 
     if (SUCCEEDED(hr)) /* got frame */
     {
@@ -2696,6 +2702,8 @@ end:
     {
         /* Native GDI+ used to be smarter, but since Win7 it just sets these flags. */
         bitmap->image.flags |= ImageFlagsReadOnly|ImageFlagsHasRealPixelSize|ImageFlagsHasRealDPI|ImageFlagsColorSpaceRGB;
+        bitmap->image.frame_count = frame_count;
+        bitmap->image.current_frame = 0;
     }
 
     return status;
@@ -2765,6 +2773,8 @@ static GpStatus decode_image_olepicture_metafile(IStream* stream, REFCLSID clsid
     (*image)->type = ImageTypeMetafile;
     (*image)->picture = pic;
     (*image)->flags   = ImageFlagsNone;
+    (*image)->frame_count = 1;
+    (*image)->current_frame = 0;
     (*image)->palette_flags = 0;
     (*image)->palette_count = 0;
     (*image)->palette_size = 0;
-- 
1.7.10.1




More information about the wine-patches mailing list