]> git.saurik.com Git - wxWidgets.git/commitdiff
applied patch for seeking in GIF images
authorVáclav Slavík <vslavik@fastmail.fm>
Fri, 15 Mar 2002 23:59:09 +0000 (23:59 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Fri, 15 Mar 2002 23:59:09 +0000 (23:59 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14624 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/image.tex
src/common/imaggif.cpp

index aa5589fcaca57a9a745356c381036528e8cff95d..5cdd7d29c211c57cfda620477eea91e13d8c2844 100644 (file)
@@ -130,9 +130,9 @@ Loads an image from an input stream.
 \docparam{mimetype}{MIME type string (for example 'image/jpeg')}
 
 \docparam{index}{Index of the image to load in the case that the image file contains multiple images.
-This is only used by ICO and TIFF handlers. The default value (-1) means 
+This is only used by GIF, ICO and TIFF handlers. The default value (-1) means 
 "choose the default image" and is interpreted as the first image (index=0) by 
-the TIFF handler and as the largest and most colourful one by the ICO handler.}
+the GIF and TIFF handler and as the largest and most colourful one by the ICO handler.}
 
 \wxheading{Remarks}
 
@@ -570,9 +570,9 @@ Loads an image from an input stream.
 \docparam{mimetype}{MIME type string (for example 'image/jpeg')}
 
 \docparam{index}{Index of the image to load in the case that the image file contains multiple images.
-This is only used by ICO and TIFF handlers. The default value (-1) means 
+This is only used by GIF, ICO and TIFF handlers. The default value (-1) means 
 "choose the default image" and is interpreted as the first image (index=0) by 
-the TIFF handler and as the largest and most colourful one by the ICO handler.}
+the GIF and TIFF handler and as the largest and most colourful one by the ICO handler.}
 
 \wxheading{Remarks}
 
@@ -588,7 +588,8 @@ hotspot for loaded cursor file:
 
 \wxheading{Return value}
 
-TRUE if the operation succeeded, FALSE otherwise.
+TRUE if the operation succeeded, FALSE otherwise. If the optional index parameter is out of range,
+FALSE is returned and a call to wxLogError() takes place.
 
 \wxheading{See also}
 
index b8a5229e2343eac696fbafb7e895d1ff03451b2b..b2a1cdf79330f3333bdd42159c07d4c3999e6692 100644 (file)
@@ -38,11 +38,12 @@ IMPLEMENT_DYNAMIC_CLASS(wxGIFHandler,wxImageHandler)
 
 #if wxUSE_STREAMS
 
-bool wxGIFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose, int WXUNUSED(index) )
+bool wxGIFHandler::LoadFile(wxImage *image, wxInputStream& stream,
+                            bool verbose, int index)
 {
     wxGIFDecoder *decod;
     int error;
-    bool ok;
+    bool ok = TRUE;
 
 //    image->Destroy();
     decod = new wxGIFDecoder(&stream, TRUE);
@@ -75,7 +76,30 @@ bool wxGIFHandler::LoadFile( wxImage *image, wxInputStream& stream, bool verbose
         /* go on; image data is OK */
     }
 
-    ok = decod->ConvertToImage(image);
+    if (index != -1)
+    {
+        // We're already on index = 0 by default. So no need
+        // to call GoFrame(0) then. On top of that GoFrame doesn't
+        // accept an index of 0. (Instead GoFirstFrame() should be used)
+        // Also if the gif image has only one frame, calling GoFrame(0)
+        // fails because GoFrame() only works with gif animations.
+        // (It fails if IsAnimation() returns FALSE)
+        // All valid reasons to NOT call GoFrame when index equals 0.
+        if (index != 0)
+        {
+            ok = decod->GoFrame(index);
+        }
+    }
+
+    if (ok)
+    {
+        ok = decod->ConvertToImage(image);
+    }
+    else
+    {
+        wxLogError(_("GIF: Invalid gif index."));
+    }
+
     delete decod;
 
     return ok;