Reviewed by Maciej.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 8 Mar 2006 09:55:30 +0000 (09:55 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 8 Mar 2006 09:55:30 +0000 (09:55 +0000)
        - fix another instance of the bug I just fixed in the Macintosh-specific code path

        * platform/image-decoders/gif/GIFImageReader.h: Remove not-so-useful 100ms constant.
        * platform/image-decoders/gif/GIFImageReader.cpp: (GIFImageReader::read):
        Use the correct rule for minimum frame durations.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@13210 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/image-decoders/gif/GIFImageReader.cpp
WebCore/platform/image-decoders/gif/GIFImageReader.h

index 88eece393b09918f8b69adb6d624a62b134fc178..aac80507c499edf8bd2041dc9daa2369778ee95e 100644 (file)
@@ -1,3 +1,13 @@
+2006-03-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix another instance of the bug I just fixed in the Macintosh-specific code path
+
+        * platform/image-decoders/gif/GIFImageReader.h: Remove not-so-useful 100ms constant.
+        * platform/image-decoders/gif/GIFImageReader.cpp: (GIFImageReader::read):
+        Use the correct rule for minimum frame durations.
+
 2006-03-08  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Darin.
index e0b0faf751dfaa4b3c04914936c2840e6ee8dcca..da2dcfa3167889bda80d47d3a9c7a448d0dfe571 100644 (file)
@@ -647,9 +647,11 @@ bool GIFImageReader::read(const unsigned char *buf, unsigned len,
         // Let's choose 3 (the more popular)
         if (frame_reader->disposal_method == 4)
           frame_reader->disposal_method = (gdispose)3;
-        frame_reader->delay_time = GETINT16(q + 1) * 10;
-        if (frame_reader->delay_time < MINIMUM_DELAY_TIME)
-          frame_reader->delay_time = MINIMUM_DELAY_TIME;
+        unsigned short n = GETINT16(q + 1);
+        // Many annoying ads specify a 0 duration to make an image flash as quickly as possible.
+        // We follow Firefox's behavior and use a duration of 100 ms for any frames that specify
+        // a duration of <= 10 ms. See gfxImageFrame::GetTimeout in Gecko or Radar 4051389 for more.
+        frame_reader->delay_time = n <= 1 ? 100 : n * 10;
       }
       GETN(1, gif_consume_block);
     }
@@ -898,11 +900,6 @@ bool GIFImageReader::read(const unsigned char *buf, unsigned len,
         if (frame_reader) {
             frame_reader->is_local_colormap_defined = false;
             frame_reader->is_transparent = false;
-        
-          /* An image can specify a delay time before which to display
-             subsequent images. */
-          if (frame_reader->delay_time < MINIMUM_DELAY_TIME)
-            frame_reader->delay_time = MINIMUM_DELAY_TIME;
         }
 
         GETN(1, gif_image_start);
index b0bb4056da084d72608d0fadc484ca26defc4694..606d3d68344f654544107a6285f5cad0598b4d78 100644 (file)
@@ -39,7 +39,6 @@
 
 #define MAX_LZW_BITS          12
 #define MAX_BITS            4097 /* 2^MAX_LZW_BITS+1 */
-#define MINIMUM_DELAY_TIME   100
 #define MAX_COLORS           256
 #define MAX_HOLD_SIZE        256