[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

rjw rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 06:16:45 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 15300d5e0995a7aee8968a8d31ed1e7ca86e67bd
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jun 4 18:55:37 2002 +0000

        Changes to support progressive image loading.  Currently disabled
        until 2945218 is fixed.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@1268 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2002-12-03 b/WebCore/ChangeLog-2002-12-03
index 46e6cfe..0131f47 100644
--- a/WebCore/ChangeLog-2002-12-03
+++ b/WebCore/ChangeLog-2002-12-03
@@ -1,3 +1,16 @@
+2002-06-04  Richard Williamson  <rjw at apple.com>
+
+    Changes to support progressive image loading.  Currently disabled
+    until 2945218 is fixed.
+    
+	* khtml/misc/loader.cpp:
+	* kwq/KWQKloader.mm:
+	* kwq/KWQPixmap.mm:
+	* kwq/WebCoreImageRenderer.h:
+	* kwq/WebCoreImageRendererFactory.h:
+	* kwq/WebCoreImageRendererFactory.m:
+	* kwq/qt/qpixmap.h:
+
 2002-06-04  Darin Adler  <darin at apple.com>
 
 	- fixed 2943897 -- Initial uncached load of amazon.com renders partial page.
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 46e6cfe..0131f47 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,16 @@
+2002-06-04  Richard Williamson  <rjw at apple.com>
+
+    Changes to support progressive image loading.  Currently disabled
+    until 2945218 is fixed.
+    
+	* khtml/misc/loader.cpp:
+	* kwq/KWQKloader.mm:
+	* kwq/KWQPixmap.mm:
+	* kwq/WebCoreImageRenderer.h:
+	* kwq/WebCoreImageRendererFactory.h:
+	* kwq/WebCoreImageRendererFactory.m:
+	* kwq/qt/qpixmap.h:
+
 2002-06-04  Darin Adler  <darin at apple.com>
 
 	- fixed 2943897 -- Initial uncached load of amazon.com renders partial page.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 46e6cfe..0131f47 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,16 @@
+2002-06-04  Richard Williamson  <rjw at apple.com>
+
+    Changes to support progressive image loading.  Currently disabled
+    until 2945218 is fixed.
+    
+	* khtml/misc/loader.cpp:
+	* kwq/KWQKloader.mm:
+	* kwq/KWQPixmap.mm:
+	* kwq/WebCoreImageRenderer.h:
+	* kwq/WebCoreImageRendererFactory.h:
+	* kwq/WebCoreImageRendererFactory.m:
+	* kwq/qt/qpixmap.h:
+
 2002-06-04  Darin Adler  <darin at apple.com>
 
 	- fixed 2943897 -- Initial uncached load of amazon.com renders partial page.
diff --git a/WebCore/khtml/misc/loader.cpp b/WebCore/khtml/misc/loader.cpp
index 4786639..9fb3b73 100644
--- a/WebCore/khtml/misc/loader.cpp
+++ b/WebCore/khtml/misc/loader.cpp
@@ -452,7 +452,9 @@ CachedImage::CachedImage(DocLoader* dl, const DOMString &url, bool reload, int _
     pixPart = 0;
     bg = 0;
     bgColor = qRgba( 0, 0, 0, 0xFF );
+#ifndef APPLE_CHANGES
     typeChecked = false;
+#endif
     isFullyTransparent = false;
     errorOccured = false;
     monochrome = false;
@@ -786,7 +788,9 @@ void CachedImage::clear()
 
     formatType = 0;
 
+#ifndef APPLE_CHANGES
     typeChecked = false;
+#endif
     m_size = 0;
 
     // No need to delete imageSource - QMovie does it for us
@@ -794,18 +798,18 @@ void CachedImage::clear()
 }
 
 void CachedImage::data ( QBuffer &_buffer, bool eof )
-{
+{    
 #ifdef CACHE_DEBUG
     kdDebug( 6060 ) << this << "in CachedImage::data(buffersize " << _buffer.buffer().size() <<", eof=" << eof << endl;
 #endif
+
+#ifndef APPLE_CHANGES
     if ( !typeChecked )
     {
-#ifndef APPLE_CHANGES
         formatType = QImageDecoder::formatName( (const uchar*)_buffer.buffer().data(), _buffer.size());
-#endif
+
         typeChecked = true;
 
-#ifndef APPLE_CHANGES
         if ( formatType )  // movie format exists
         {
             imgSource = new ImageSource( _buffer.buffer());
@@ -814,16 +818,13 @@ void CachedImage::data ( QBuffer &_buffer, bool eof )
             m->connectStatus( this, SLOT( movieStatus(int)));
             m->connectResize( this, SLOT( movieResize( const QSize& ) ) );
         }
-#endif
     }
 
-#ifndef APPLE_CHANGES
     if ( imgSource )
     {
         imgSource->setEOF(eof);
         imgSource->maybeReady();
     }
-#endif
 
     if(eof)
     {
@@ -852,6 +853,48 @@ void CachedImage::data ( QBuffer &_buffer, bool eof )
         QSize s = pixmap_size();
         m_size = s.width() * s.height() * 2;
     }
+#endif // !APPLE_CHANGES
+
+#ifdef APPLE_CHANGES
+
+    bool canDraw = false;
+#ifdef APPLE_PROGRESSIVE_LOADING_WORKS
+    if (!eof) {
+        // If we didn't get all the data for the image we will always
+        // attempt to load the image incrementally.  If the AppKit is
+        // unable to decode incrementally this pixmap will not be
+        // renderable until all the data has been received.
+        if (!p)
+            p = new QPixmap();
+    }
+
+    if (p)
+        canDraw = p->receivedData (_buffer.buffer(), eof);
+        
+#endif
+
+    // If we're at eof and don't have a pixmap yet, the data
+    // must have arrived in one chunk.  This avoids the attempt
+    // to perform incremental decoding.
+    if (eof && !p){
+        p = new QPixmap( _buffer.buffer() );
+        canDraw = true;
+    }
+
+    if (canDraw || eof){
+        if(p->isNull())
+        {
+            errorOccured = true;
+            do_notify(pixmap(), QRect(0, 0, 16, 16)); // load "broken image" icon
+        }
+        else {
+            // May schedule a redraw.
+            do_notify(*p, p->rect());
+        }
+        QSize s = pixmap_size();
+        m_size = s.width() * s.height() * 2;
+    }
+#endif // APPLE_CHANGES
 }
 
 void CachedImage::error( int /*err*/, const char */*text*/ )
@@ -861,7 +904,9 @@ void CachedImage::error( int /*err*/, const char */*text*/ )
 #endif
 
     clear();
+#ifndef APPLE_CHANGES
     typeChecked = true;
+#endif
     errorOccured = true;
     do_notify(pixmap(), QRect(0, 0, 16, 16));
 }
diff --git a/WebCore/kwq/KWQKloader.mm b/WebCore/kwq/KWQKloader.mm
index c583164..f317341 100644
--- a/WebCore/kwq/KWQKloader.mm
+++ b/WebCore/kwq/KWQKloader.mm
@@ -151,7 +151,7 @@ void WCSetIFLoadProgressMakeFunc(WCIFLoadProgressMakeFunc func)
     
     KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
     
-    KWQDEBUGLEVEL (KWQ_LOG_LOADING, "dataSource = %p for URL %s data at %p, length %d\n", m_dataSource, DEBUG_OBJECT(job->url()), data, [data length]);
+    KWQDEBUGLEVEL (KWQ_LOG_LOADING, "dataSource = %p for URL %s data at %p, length %d, contentLength %d, contentLengthReceived %d\n", m_dataSource, DEBUG_OBJECT(job->url()), data, [data length], contentLength, contentLengthReceived);
 
     m_loader->slotData(job, (const char *)[data bytes], [data length]);    
 
diff --git a/WebCore/kwq/KWQLoader.mm b/WebCore/kwq/KWQLoader.mm
index c583164..f317341 100644
--- a/WebCore/kwq/KWQLoader.mm
+++ b/WebCore/kwq/KWQLoader.mm
@@ -151,7 +151,7 @@ void WCSetIFLoadProgressMakeFunc(WCIFLoadProgressMakeFunc func)
     
     KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
     
-    KWQDEBUGLEVEL (KWQ_LOG_LOADING, "dataSource = %p for URL %s data at %p, length %d\n", m_dataSource, DEBUG_OBJECT(job->url()), data, [data length]);
+    KWQDEBUGLEVEL (KWQ_LOG_LOADING, "dataSource = %p for URL %s data at %p, length %d, contentLength %d, contentLengthReceived %d\n", m_dataSource, DEBUG_OBJECT(job->url()), data, [data length], contentLength, contentLengthReceived);
 
     m_loader->slotData(job, (const char *)[data bytes], [data length]);    
 
diff --git a/WebCore/kwq/KWQLoaderImpl.mm b/WebCore/kwq/KWQLoaderImpl.mm
index c583164..f317341 100644
--- a/WebCore/kwq/KWQLoaderImpl.mm
+++ b/WebCore/kwq/KWQLoaderImpl.mm
@@ -151,7 +151,7 @@ void WCSetIFLoadProgressMakeFunc(WCIFLoadProgressMakeFunc func)
     
     KIO::TransferJob *job = static_cast<KIO::TransferJob *>(userData);
     
-    KWQDEBUGLEVEL (KWQ_LOG_LOADING, "dataSource = %p for URL %s data at %p, length %d\n", m_dataSource, DEBUG_OBJECT(job->url()), data, [data length]);
+    KWQDEBUGLEVEL (KWQ_LOG_LOADING, "dataSource = %p for URL %s data at %p, length %d, contentLength %d, contentLengthReceived %d\n", m_dataSource, DEBUG_OBJECT(job->url()), data, [data length], contentLength, contentLengthReceived);
 
     m_loader->slotData(job, (const char *)[data bytes], [data length]);    
 
diff --git a/WebCore/kwq/KWQPixmap.h b/WebCore/kwq/KWQPixmap.h
index 9d0853c..9b91cde 100644
--- a/WebCore/kwq/KWQPixmap.h
+++ b/WebCore/kwq/KWQPixmap.h
@@ -71,6 +71,7 @@ public:
     QPixmap &operator=(const QPixmap &);
 
     WebCoreImageRendererPtr getImageRenderer() const { return imageRenderer; }
+    bool receivedData(const QByteArray &bytes, bool isComplete);
 
 private:
     WebCoreImageRendererPtr imageRenderer;
diff --git a/WebCore/kwq/KWQPixmap.mm b/WebCore/kwq/KWQPixmap.mm
index d0239e1..fec54fa 100644
--- a/WebCore/kwq/KWQPixmap.mm
+++ b/WebCore/kwq/KWQPixmap.mm
@@ -32,7 +32,7 @@
 
 QPixmap::QPixmap()
 {
-    imageRenderer = nil;
+    imageRenderer = [[[WebCoreImageRendererFactory sharedFactory] imageRenderer] retain];
     needCopyOnWrite = false;
 }
 
@@ -67,6 +67,11 @@ QPixmap::~QPixmap()
     [imageRenderer release];
 }
 
+bool QPixmap::receivedData(const QByteArray &bytes, bool isComplete)
+{
+    return [imageRenderer incrementalLoadWithBytes: bytes.data() length: bytes.size() complete: isComplete];
+}
+
 bool QPixmap::mask() const
 {
     return false;
diff --git a/WebCore/kwq/WebCoreImageRenderer.h b/WebCore/kwq/WebCoreImageRenderer.h
index e71a27a..b17e3d3 100644
--- a/WebCore/kwq/WebCoreImageRenderer.h
+++ b/WebCore/kwq/WebCoreImageRenderer.h
@@ -27,6 +27,8 @@
 
 @protocol WebCoreImageRenderer <NSObject, NSCopying>
 
+- (BOOL)incrementalLoadWithBytes: (const void *)bytes length:(unsigned)length complete:(BOOL)isComplete;
+
 - (NSSize)size;
 - (void)resize: (NSSize)s;
 - (void)beginAnimationInView:(NSView *)view inRect:(NSRect)ir fromRect:(NSRect)fr;
diff --git a/WebCore/kwq/WebCoreImageRendererFactory.h b/WebCore/kwq/WebCoreImageRendererFactory.h
index 8980801..1fa8377 100644
--- a/WebCore/kwq/WebCoreImageRendererFactory.h
+++ b/WebCore/kwq/WebCoreImageRendererFactory.h
@@ -33,6 +33,8 @@
 
 + (WebCoreImageRendererFactory *)sharedFactory;
 - init;
+
+- (id <WebCoreImageRenderer>)imageRenderer;
 - (id <WebCoreImageRenderer>)imageRendererWithBytes: (const void *)bytes length:(unsigned)length;
 - (id <WebCoreImageRenderer>)imageRendererWithSize: (NSSize)s;
 
diff --git a/WebCore/kwq/WebCoreImageRendererFactory.m b/WebCore/kwq/WebCoreImageRendererFactory.m
index 1afff2e..4764066 100644
--- a/WebCore/kwq/WebCoreImageRendererFactory.m
+++ b/WebCore/kwq/WebCoreImageRendererFactory.m
@@ -55,4 +55,9 @@ static WebCoreImageRendererFactory *sharedFactory;
     return nil;
 }
 
+- (id <WebCoreImageRenderer>)imageRenderer
+{
+    return nil;
+}
+
 @end
diff --git a/WebCore/kwq/qt/qpixmap.h b/WebCore/kwq/qt/qpixmap.h
index 9d0853c..9b91cde 100644
--- a/WebCore/kwq/qt/qpixmap.h
+++ b/WebCore/kwq/qt/qpixmap.h
@@ -71,6 +71,7 @@ public:
     QPixmap &operator=(const QPixmap &);
 
     WebCoreImageRendererPtr getImageRenderer() const { return imageRenderer; }
+    bool receivedData(const QByteArray &bytes, bool isComplete);
 
 private:
     WebCoreImageRendererPtr imageRenderer;
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index 695e7c4..db053a2 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,12 @@
+2002-06-04  Richard Williamson  <rjw at apple.com>
+
+    Changes to support progressive image loading.  Currently disabled
+    until 2945218 is fixed.
+
+	* WebCoreSupport.subproj/IFImageRenderer.h:
+	* WebCoreSupport.subproj/IFImageRenderer.m:
+	* WebCoreSupport.subproj/IFImageRendererFactory.m:
+
 ut 2002-06-04  Darin Adler  <darin at apple.com>
 
 	- fixed 2932862 -- exception -[NSCFArray getObjects:range:]: index (137)
diff --git a/WebKit/ChangeLog-2002-12-03 b/WebKit/ChangeLog-2002-12-03
index 695e7c4..db053a2 100644
--- a/WebKit/ChangeLog-2002-12-03
+++ b/WebKit/ChangeLog-2002-12-03
@@ -1,3 +1,12 @@
+2002-06-04  Richard Williamson  <rjw at apple.com>
+
+    Changes to support progressive image loading.  Currently disabled
+    until 2945218 is fixed.
+
+	* WebCoreSupport.subproj/IFImageRenderer.h:
+	* WebCoreSupport.subproj/IFImageRenderer.m:
+	* WebCoreSupport.subproj/IFImageRendererFactory.m:
+
 ut 2002-06-04  Darin Adler  <darin at apple.com>
 
 	- fixed 2932862 -- exception -[NSCFArray getObjects:range:]: index (137)
diff --git a/WebKit/WebCoreSupport.subproj/IFImageRenderer.h b/WebKit/WebCoreSupport.subproj/IFImageRenderer.h
index aedb361..c5c26b0 100644
--- a/WebKit/WebCoreSupport.subproj/IFImageRenderer.h
+++ b/WebKit/WebCoreSupport.subproj/IFImageRenderer.h
@@ -11,5 +11,8 @@
     NSView *frameView;
     NSRect imageRect;
     NSRect targetRect;
+    int lastStatus;
+    unsigned lastLength;
+    BOOL lastReturn;
 }
 @end
diff --git a/WebKit/WebCoreSupport.subproj/IFImageRenderer.m b/WebKit/WebCoreSupport.subproj/IFImageRenderer.m
index 16e163e..76b643b 100644
--- a/WebKit/WebCoreSupport.subproj/IFImageRenderer.m
+++ b/WebKit/WebCoreSupport.subproj/IFImageRenderer.m
@@ -3,11 +3,57 @@
 */
 
 #import <WebKit/IFImageRenderer.h>
-
+#import <WebKit/IFException.h>
 #import <WebKit/WebKitDebug.h>
 
 @implementation IFImageRenderer
 
+- init
+{
+    lastStatus = -9999;
+    lastLength = 0;
+    return [super init];
+}
+
+
+- (BOOL)incrementalLoadWithBytes: (const void *)bytes length:(unsigned)length complete:(BOOL)isComplete
+{
+    NSBitmapImageRep* imageRep = [[self representations] objectAtIndex:0];
+    //NSData *data = [[NSData alloc] initWithBytesNoCopy: (void *)bytes length: length freeWhenDone: NO];
+    NSData *data = [[NSData alloc] initWithBytes: (void *)bytes length: length];
+    int status;
+    
+    lastLength = length;
+    lastStatus = status = [imageRep incrementalLoadFromData:data complete:isComplete];
+    [data release];
+    switch (status){
+    case NSImageRepLoadStatusUnknownType:       // not enough data to determine image format. please feed me more data
+        printf ("NSImageRepLoadStatusUnknownType size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusReadingHeader:     // image format known, reading header. not yet valid. more data needed
+        printf ("NSImageRepLoadStatusReadingHeader size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusWillNeedAllData:   // can't read incrementally. will wait for complete data to become avail.
+        printf ("NSImageRepLoadStatusWillNeedAllData size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusInvalidData:       // image decompression encountered error.
+        printf ("NSImageRepLoadStatusInvalidData size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusUnexpectedEOF:     // ran out of data before full image was decompressed.
+        printf ("NSImageRepLoadStatusUnexpectedEOF size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusCompleted:         // all is well, the full pixelsHigh image is valid.
+        printf ("NSImageRepLoadStatusUnexpectedEOF size %d, isComplete %d\n", length, isComplete);
+        // Force the image to use the pixel size and ignore the dpi.
+        [imageRep setSize:NSMakeSize([imageRep pixelsWide], [imageRep pixelsHigh])];
+        return (lastReturn = YES);
+    default:
+        printf ("incrementalLoadFromData:complete: returned %d,  size %d, isComplete %d (wide %d, hight %d)\n", status, length, isComplete, [imageRep pixelsWide], [imageRep pixelsHigh]);
+        return (lastReturn = YES);
+    }
+    return (lastReturn = NO);
+}
+
 - (void)dealloc
 {
     [self stopAnimation];
@@ -80,6 +126,7 @@
 
 - (void)beginAnimationInView: (NSView *)view inRect: (NSRect)ir fromRect: (NSRect)fr
 {
+    // The previous, if any, frameView, is released in stopAnimations.
     [self stopAnimation];
     
     if ([self frameCount] > 1) {
diff --git a/WebKit/WebCoreSupport.subproj/IFImageRendererFactory.m b/WebKit/WebCoreSupport.subproj/IFImageRendererFactory.m
index 091fbb3..8573655 100644
--- a/WebKit/WebCoreSupport.subproj/IFImageRendererFactory.m
+++ b/WebKit/WebCoreSupport.subproj/IFImageRendererFactory.m
@@ -22,11 +22,10 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
+#import <Cocoa/Cocoa.h>
 
 #import <WebKit/IFImageRendererFactory.h>
-
 #import <WebKit/IFImageRenderer.h>
-
 #import <WebKit/WebKitDebug.h>
 
 @implementation IFImageRendererFactory
@@ -44,9 +43,21 @@
     return (IFImageRendererFactory *)[super sharedFactory];
 }
 
+- (id <WebCoreImageRenderer>)imageRenderer
+{
+    NSImage *imageRenderer = [[IFImageRenderer alloc] init];
+    NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initForIncrementalLoad];
+    [imageRenderer addRepresentation: rep];
+    [imageRenderer setFlipped: YES];
+    return [imageRenderer autorelease];
+}
+
+
 - (id <WebCoreImageRenderer>)imageRendererWithBytes: (const void *)bytes length:(unsigned)length
 {
-    NSData *data = [[NSData alloc] initWithBytes: bytes length: length];
+    // FIXME:  Why must we copy the data here?
+    //NSData *data = [[NSData alloc] initWithBytesNoCopy: (void *)bytes length: length freeWhenDone: NO];
+    NSData *data = [[NSData alloc] initWithBytes: (void *)bytes length: length];
     IFImageRenderer *imageRenderer = [[IFImageRenderer alloc] initWithData: data];
     NSArray *reps = [imageRenderer representations];
     NSImageRep *rep = [reps objectAtIndex: 0];
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
index aedb361..c5c26b0 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
@@ -11,5 +11,8 @@
     NSView *frameView;
     NSRect imageRect;
     NSRect targetRect;
+    int lastStatus;
+    unsigned lastLength;
+    BOOL lastReturn;
 }
 @end
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
index 16e163e..76b643b 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
@@ -3,11 +3,57 @@
 */
 
 #import <WebKit/IFImageRenderer.h>
-
+#import <WebKit/IFException.h>
 #import <WebKit/WebKitDebug.h>
 
 @implementation IFImageRenderer
 
+- init
+{
+    lastStatus = -9999;
+    lastLength = 0;
+    return [super init];
+}
+
+
+- (BOOL)incrementalLoadWithBytes: (const void *)bytes length:(unsigned)length complete:(BOOL)isComplete
+{
+    NSBitmapImageRep* imageRep = [[self representations] objectAtIndex:0];
+    //NSData *data = [[NSData alloc] initWithBytesNoCopy: (void *)bytes length: length freeWhenDone: NO];
+    NSData *data = [[NSData alloc] initWithBytes: (void *)bytes length: length];
+    int status;
+    
+    lastLength = length;
+    lastStatus = status = [imageRep incrementalLoadFromData:data complete:isComplete];
+    [data release];
+    switch (status){
+    case NSImageRepLoadStatusUnknownType:       // not enough data to determine image format. please feed me more data
+        printf ("NSImageRepLoadStatusUnknownType size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusReadingHeader:     // image format known, reading header. not yet valid. more data needed
+        printf ("NSImageRepLoadStatusReadingHeader size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusWillNeedAllData:   // can't read incrementally. will wait for complete data to become avail.
+        printf ("NSImageRepLoadStatusWillNeedAllData size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusInvalidData:       // image decompression encountered error.
+        printf ("NSImageRepLoadStatusInvalidData size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusUnexpectedEOF:     // ran out of data before full image was decompressed.
+        printf ("NSImageRepLoadStatusUnexpectedEOF size %d, isComplete %d\n", length, isComplete);
+        return (lastReturn = NO);
+    case NSImageRepLoadStatusCompleted:         // all is well, the full pixelsHigh image is valid.
+        printf ("NSImageRepLoadStatusUnexpectedEOF size %d, isComplete %d\n", length, isComplete);
+        // Force the image to use the pixel size and ignore the dpi.
+        [imageRep setSize:NSMakeSize([imageRep pixelsWide], [imageRep pixelsHigh])];
+        return (lastReturn = YES);
+    default:
+        printf ("incrementalLoadFromData:complete: returned %d,  size %d, isComplete %d (wide %d, hight %d)\n", status, length, isComplete, [imageRep pixelsWide], [imageRep pixelsHigh]);
+        return (lastReturn = YES);
+    }
+    return (lastReturn = NO);
+}
+
 - (void)dealloc
 {
     [self stopAnimation];
@@ -80,6 +126,7 @@
 
 - (void)beginAnimationInView: (NSView *)view inRect: (NSRect)ir fromRect: (NSRect)fr
 {
+    // The previous, if any, frameView, is released in stopAnimations.
     [self stopAnimation];
     
     if ([self frameCount] > 1) {
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
index 091fbb3..8573655 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
@@ -22,11 +22,10 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
+#import <Cocoa/Cocoa.h>
 
 #import <WebKit/IFImageRendererFactory.h>
-
 #import <WebKit/IFImageRenderer.h>
-
 #import <WebKit/WebKitDebug.h>
 
 @implementation IFImageRendererFactory
@@ -44,9 +43,21 @@
     return (IFImageRendererFactory *)[super sharedFactory];
 }
 
+- (id <WebCoreImageRenderer>)imageRenderer
+{
+    NSImage *imageRenderer = [[IFImageRenderer alloc] init];
+    NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initForIncrementalLoad];
+    [imageRenderer addRepresentation: rep];
+    [imageRenderer setFlipped: YES];
+    return [imageRenderer autorelease];
+}
+
+
 - (id <WebCoreImageRenderer>)imageRendererWithBytes: (const void *)bytes length:(unsigned)length
 {
-    NSData *data = [[NSData alloc] initWithBytes: bytes length: length];
+    // FIXME:  Why must we copy the data here?
+    //NSData *data = [[NSData alloc] initWithBytesNoCopy: (void *)bytes length: length freeWhenDone: NO];
+    NSData *data = [[NSData alloc] initWithBytes: (void *)bytes length: length];
     IFImageRenderer *imageRenderer = [[IFImageRenderer alloc] initWithData: data];
     NSArray *reps = [imageRenderer representations];
     NSImageRep *rep = [reps objectAtIndex: 0];

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list