[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 07:46:36 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit a9cde2baa94262d20470c51d429aecbe4c421a08
Author: rjw <rjw at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Wed Jul 9 23:21:52 2003 +0000
WebKit:
Fixed 3141257. Animate multiple copies of the same
image on the same page.
Reviewed by hyatt.
* WebCoreSupport.subproj/WebImageRenderer.h:
* WebCoreSupport.subproj/WebImageRenderer.m:
(+[WebImageRenderer stopAnimationsInView:]):
(-[WebImageRenderer retainOrCopyIfNeeded]):
(-[WebImageRenderer copyWithZone:]):
(-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
(-[WebImageRenderer dealloc]):
(-[WebImageRenderer repetitionCount]):
(-[WebImageRenderer scheduleFrame]):
(-[WebImageRenderer beginAnimationInRect:fromRect:]):
* WebCoreSupport.subproj/WebImageRendererFactory.h:
* WebCoreSupport.subproj/WebImageRendererFactory.m:
(-[WebImageRendererFactory imageRendererWithMIMEType:]):
(-[WebImageRendererFactory imageRendererWithData:MIMEType:]):
(-[WebImageRendererFactory imageRendererWithBytes:length:MIMEType:]):
WebCore:
Fixed 3141257. Animate multiple copies of the same
image on the same page.
Reviewed by hyatt.
* khtml/rendering/render_replaced.cpp:
(RenderReplaced::paint):
* kwq/KWQPixmap.mm:
(QPixmap::operator=):
* kwq/WebCoreImageRenderer.h:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@4608 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 01564d5..be68d54 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,16 @@
+2003-07-09 Richard Williamson <rjw at apple.com>
+
+ Fixed 3141257. Animate multiple copies of the same
+ image on the same page.
+
+ Reviewed by hyatt.
+
+ * khtml/rendering/render_replaced.cpp:
+ (RenderReplaced::paint):
+ * kwq/KWQPixmap.mm:
+ (QPixmap::operator=):
+ * kwq/WebCoreImageRenderer.h:
+
2003-07-08 Darin Adler <darin at apple.com>
Reviewed by John.
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 01564d5..be68d54 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,16 @@
+2003-07-09 Richard Williamson <rjw at apple.com>
+
+ Fixed 3141257. Animate multiple copies of the same
+ image on the same page.
+
+ Reviewed by hyatt.
+
+ * khtml/rendering/render_replaced.cpp:
+ (RenderReplaced::paint):
+ * kwq/KWQPixmap.mm:
+ (QPixmap::operator=):
+ * kwq/WebCoreImageRenderer.h:
+
2003-07-08 Darin Adler <darin at apple.com>
Reviewed by John.
diff --git a/WebCore/khtml/rendering/render_replaced.cpp b/WebCore/khtml/rendering/render_replaced.cpp
index 7197864..f9b7d7a 100644
--- a/WebCore/khtml/rendering/render_replaced.cpp
+++ b/WebCore/khtml/rendering/render_replaced.cpp
@@ -65,9 +65,8 @@ void RenderReplaced::paint(QPainter *p, int _x, int _y, int _w, int _h,
_tx += m_x;
_ty += m_y;
- // These checks should probably be >= and <=, because we
- // can early exit if the element touches the edges.
- if((_ty > _y + _h) || (_ty + m_height < _y))
+ // Early exit if the element touches the edges.
+ if((_tx >= _x + _w) || (_tx + m_width <= _x))
return;
if((_tx >= _x + _w) || (_tx + m_width <= _x))
diff --git a/WebCore/kwq/KWQPixmap.mm b/WebCore/kwq/KWQPixmap.mm
index 78adbac..d8deb30 100644
--- a/WebCore/kwq/KWQPixmap.mm
+++ b/WebCore/kwq/KWQPixmap.mm
@@ -184,9 +184,9 @@ QPixmap QPixmap::xForm(const QWMatrix &xmatrix) const
QPixmap &QPixmap::operator=(const QPixmap &assignFrom)
{
- [assignFrom.imageRenderer retain];
- [imageRenderer release];
- imageRenderer = assignFrom.imageRenderer;
+ id <WebCoreImageRenderer> oldImageRenderer = imageRenderer;
+ imageRenderer = [assignFrom.imageRenderer retainOrCopyIfNeeded];
+ [oldImageRenderer release];
NSString *newMIMEType = [assignFrom.MIMEType copy];
[MIMEType release];
MIMEType = newMIMEType;
diff --git a/WebCore/kwq/WebCoreImageRenderer.h b/WebCore/kwq/WebCoreImageRenderer.h
index 34d15aa..feba214 100644
--- a/WebCore/kwq/WebCoreImageRenderer.h
+++ b/WebCore/kwq/WebCoreImageRenderer.h
@@ -35,5 +35,5 @@
- (void)stopAnimation;
- (void)tileInRect:(NSRect)r fromPoint:(NSPoint)p;
- (BOOL)isNull;
-
+- (id <WebCoreImageRenderer>)retainOrCopyIfNeeded;
@end
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index ac9d93a..84edce9 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,26 @@
+2003-07-09 Richard Williamson <rjw at apple.com>
+
+ Fixed 3141257. Animate multiple copies of the same
+ image on the same page.
+
+ Reviewed by hyatt.
+
+ * WebCoreSupport.subproj/WebImageRenderer.h:
+ * WebCoreSupport.subproj/WebImageRenderer.m:
+ (+[WebImageRenderer stopAnimationsInView:]):
+ (-[WebImageRenderer retainOrCopyIfNeeded]):
+ (-[WebImageRenderer copyWithZone:]):
+ (-[WebImageRenderer incrementalLoadWithBytes:length:complete:]):
+ (-[WebImageRenderer dealloc]):
+ (-[WebImageRenderer repetitionCount]):
+ (-[WebImageRenderer scheduleFrame]):
+ (-[WebImageRenderer beginAnimationInRect:fromRect:]):
+ * WebCoreSupport.subproj/WebImageRendererFactory.h:
+ * WebCoreSupport.subproj/WebImageRendererFactory.m:
+ (-[WebImageRendererFactory imageRendererWithMIMEType:]):
+ (-[WebImageRendererFactory imageRendererWithData:MIMEType:]):
+ (-[WebImageRendererFactory imageRendererWithBytes:length:MIMEType:]):
+
2003-07-09 Chris Blumenberg <cblu at apple.com>
Fixed: <rdar://problem/3229364>: user stylesheet path should be stored relative to home directory
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
index ac7e939..1372f43 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.h
@@ -21,17 +21,16 @@
int repetitionsComplete;
BOOL animationFinished;
- BOOL sawGIFExtensionSignature;
- char GIFExtensionBuffer[10];
- int GIFExtensionBufferLength;
-
NSString *MIMEType;
BOOL isNull;
+ at public
+ NSData *originalData;
}
- (id)initWithMIMEType:(NSString *)MIME;
- (id)initWithData:(NSData *)data MIMEType:(NSString *)MIME;
+ (void)stopAnimationsInView:(NSView *)aView;
+- (int)frameCount;
- (NSString *)MIMEType;
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
index 23df268..11f4029 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRenderer.m
@@ -3,7 +3,9 @@
Copyright (c) 2002, 2003, Apple, Inc. All rights reserved.
*/
+#import <WebKit/WebAssertions.h>
#import <WebKit/WebImageRenderer.h>
+#import <WebKit/WebImageRendererFactory.h>
#import <WebCore/WebCoreImageRenderer.h>
#import <WebKit/WebAssertions.h>
@@ -14,19 +16,27 @@ extern NSString *NSImageLoopCount;
@implementation WebImageRenderer
-static NSMutableArray *activeImageRenderers;
+static NSMutableSet *activeImageRenderers;
+ (void)stopAnimationsInView:(NSView *)aView
{
- int i, count;
+ NSEnumerator *objectEnumerator = [activeImageRenderers objectEnumerator];
+ WebImageRenderer *renderer;
+ NSMutableSet *renderersToStop = [[NSMutableSet alloc] init];
- count = [activeImageRenderers count];
- for (i = count-1; i >= 0; i--) {
- WebImageRenderer *renderer = [activeImageRenderers objectAtIndex:i];
+ while ((renderer = [objectEnumerator nextObject])) {
+ if (renderer->frameView == aView) {
+ [renderersToStop addObject: renderer];
+ }
+ }
+
+ objectEnumerator = [renderersToStop objectEnumerator];
+ while ((renderer = [objectEnumerator nextObject])) {
if (renderer->frameView == aView) {
[renderer stopAnimation];
}
}
+ [renderersToStop release];
}
- (id)initWithMIMEType:(NSString *)MIME
@@ -66,15 +76,31 @@ static NSMutableArray *activeImageRenderers;
return self;
}
+- (id <WebCoreImageRenderer>)retainOrCopyIfNeeded
+{
+ WebImageRenderer *copy;
+
+ if (originalData){
+ copy = [[[WebImageRendererFactory sharedFactory] imageRendererWithData:originalData MIMEType:MIMEType] retain];
+ }
+ else {
+ copy = [self retain];
+ }
+
+ return copy;
+}
+
- copyWithZone:(NSZone *)zone
{
- WebImageRenderer *copy = [super copyWithZone:zone];
-
// FIXME: If we copy while doing an incremental load, it won't work.
+ WebImageRenderer *copy;
+
+ copy = [super copyWithZone:zone];
+ copy->MIMEType = [MIMEType copy];
+ copy->originalData = [originalData retain];
copy->frameTimer = nil;
copy->frameView = nil;
copy->patternColor = nil;
- copy->MIMEType = [MIMEType copy];
return copy;
}
@@ -101,7 +127,14 @@ static NSMutableArray *activeImageRenderers;
NSData *data = [[NSData alloc] initWithBytes:bytes length:length];
loadStatus = [imageRep incrementalLoadFromData:data complete:isComplete];
- [data release];
+
+ // Hold onto the original data in case we need to copy this image. (Workaround for appkit NSImage
+ // copy flaw).
+ if (isComplete && [self frameCount] > 1)
+ originalData = data;
+ else
+ [data release];
+
switch (loadStatus) {
case NSImageRepLoadStatusUnknownType: // not enough data to determine image format. please feed me more data
//printf ("NSImageRepLoadStatusUnknownType size %d, isComplete %d\n", length, isComplete);
@@ -140,6 +173,7 @@ static NSMutableArray *activeImageRenderers;
ASSERT(frameView == nil);
[patternColor release];
[MIMEType release];
+ [originalData release];
[super dealloc];
}
@@ -199,16 +233,13 @@ static NSMutableArray *activeImageRenderers;
{
id property = [self firstRepProperty:NSImageLoopCount];
int count = property ? [property intValue] : 0;
- // This is a workaround for bug 3090341.
- // If we see no extension, then the loop count is 1, not 0.
- if (count == 0 && !sawGIFExtensionSignature) {
- count = 1;
- }
return count;
}
- (void)scheduleFrame
-{
+{
+ if (frameTimer && [frameTimer isValid])
+ return;
frameTimer = [[NSTimer scheduledTimerWithTimeInterval:[self frameDuration]
target:self
selector:@selector(nextFrame:)
@@ -294,20 +325,21 @@ static NSMutableArray *activeImageRenderers;
- (void)beginAnimationInRect:(NSRect)ir fromRect:(NSRect)fr
{
- // The previous, if any, frameView, is released in stopAnimation.
- [self stopAnimation];
-
[self drawClippedToValidInRect:ir fromRect:fr];
-
+
if ([self frameCount] > 1 && !animationFinished) {
imageRect = fr;
targetRect = ir;
- frameView = [[NSView focusView] retain];
+ NSView *newView = [NSView focusView];
+ if (newView != frameView){
+ [frameView release];
+ frameView = [newView retain];
+ }
[self scheduleFrame];
- if (!activeImageRenderers) {
- activeImageRenderers = [[NSMutableArray alloc] init];
- }
- [activeImageRenderers addObject:self];
+ if (!activeImageRenderers) {
+ activeImageRenderers = [[NSMutableSet alloc] init];
+ }
+ [activeImageRenderers addObject:self];
}
}
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h
index 0db938c..5ffd2b0 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h
+++ b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.h
@@ -15,5 +15,6 @@
+ (void)createSharedFactory;
+ (WebImageRendererFactory *)sharedFactory;
+- (id <WebCoreImageRenderer>)imageRendererWithData:(NSData*)data MIMEType:(NSString *)MIMEType;
@end
diff --git a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
index 720f455..f9b1aef 100644
--- a/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
+++ b/WebKit/WebCoreSupport.subproj/WebImageRendererFactory.m
@@ -50,7 +50,7 @@
NSBitmapImageRep *rep = [[NSBitmapImageRep alloc] initForIncrementalLoad];
[imageRenderer addRepresentation:rep];
- [rep release];
+ [rep autorelease];
[imageRenderer setFlipped:YES];
// Turn the default caching mode back on when the image has completed load.
@@ -69,30 +69,39 @@
return [self imageRendererWithMIMEType:nil];
}
-- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length MIMEType:(NSString *)MIMEType
+- (id <WebCoreImageRenderer>)imageRendererWithData:(NSData*)data MIMEType:(NSString *)MIMEType
{
- // 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];
WebImageRenderer *imageRenderer = [[WebImageRenderer alloc] initWithData:data MIMEType:MIMEType];
- [data release];
-
+
NSArray *reps = [imageRenderer representations];
if ([reps count] == 0){
[imageRenderer release];
+ NSLog (@"Unable to allocate image renderer");
return nil;
}
-
+
// Force the image to use the pixel size and ignore the dpi.
[imageRenderer setScalesWhenResized:NO];
- NSImageRep *rep = [reps objectAtIndex:0];
- [rep setSize:NSMakeSize([rep pixelsWide], [rep pixelsHigh])];
+ if ([reps count] > 0){
+ NSImageRep *rep = [reps objectAtIndex:0];
+ [rep setSize:NSMakeSize([rep pixelsWide], [rep pixelsHigh])];
+ if ([imageRenderer frameCount] > 1)
+ imageRenderer->originalData = [data retain];
+ }
[imageRenderer setFlipped:YES];
-
+
return [imageRenderer autorelease];
}
+- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length MIMEType:(NSString *)MIMEType
+{
+ NSData *data = [[NSData alloc] initWithBytes:(void *)bytes length:length];
+ WebImageRenderer *imageRenderer = [self imageRendererWithData:data MIMEType:MIMEType];
+ [data autorelease];
+ return imageRenderer;
+}
+
- (id <WebCoreImageRenderer>)imageRendererWithBytes:(const void *)bytes length:(unsigned)length
{
return [self imageRendererWithBytes:bytes length:length MIMEType:nil];
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list