From dd2c17aa3bed655ede710ae2b728022c735a58e0 Mon Sep 17 00:00:00 2001 From: FredKiefer Date: Tue, 26 Feb 2002 14:37:55 +0000 Subject: [PATCH] [setSize:] recache representations if size changes. [recache] throw old caches away as size may have changed. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@12778 72102866-910b-0410-8b05-ffd578937521 --- Source/NSImage.m | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Source/NSImage.m b/Source/NSImage.m index baf6debd9..96eecce61 100644 --- a/Source/NSImage.m +++ b/Source/NSImage.m @@ -488,9 +488,14 @@ repd_for_rep(NSArray *_reps, NSImageRep *rep) - (void) setSize: (NSSize)aSize { + // Optimized as this is called very often from NSImageCell + if (NSEqualSizes(_size, aSize)) + return; + _size = aSize; _flags.sizeWasExplicitlySet = YES; - // TODO: This invalidates any cached data + + [self recache]; } - (NSSize) size @@ -603,17 +608,15 @@ repd_for_rep(NSArray *_reps, NSImageRep *rep) { unsigned i, count; - // FIXME: Not sure if this is correct - count = [_reps count]; - for (i = 0; i < count; i++) + i = [_reps count]; + while(i--) { GSRepData *repd; repd = (GSRepData*)[_reps objectAtIndex: i]; - if (repd->bg != nil) + if (repd->original != nil) { - DESTROY(repd->bg); - [repd->rep setOpaque: YES]; + [_reps removeObjectAtIndex: i]; } } } @@ -675,6 +678,8 @@ repd_for_rep(NSArray *_reps, NSImageRep *rep) if ([[ctxt focusView] isFlipped]) y -= rect.size.height; + NSDebugLLog(@"NSImage", @"composite rect %@ in %@", + NSStringFromRect(rect), NSStringFromRect(aRect)); // Move the drawing rectangle to the origin of the image rep // and intersect the two rects. aRect.origin.x += rect.origin.x;