[tcobrowser-cvs] SF.net SVN: tcobrowser:[1418] trunk/bibdesk
Status: Beta
Brought to you by:
amaxwell
From: <ama...@us...> - 2009-05-26 19:17:54
|
Revision: 1418 http://tcobrowser.svn.sourceforge.net/tcobrowser/?rev=1418&view=rev Author: amaxwell Date: 2009-05-26 19:16:21 +0000 (Tue, 26 May 2009) Log Message: ----------- Use NSBitmapImageRep directly for creating transition images, instead of TIFF conversion from NSImage. Modified Paths: -------------- trunk/bibdesk/BDSKImageFadeAnimation.h trunk/bibdesk/BDSKImageFadeAnimation.m trunk/bibdesk/BDSKMainTableView.m Modified: trunk/bibdesk/BDSKImageFadeAnimation.h =================================================================== --- trunk/bibdesk/BDSKImageFadeAnimation.h 2009-05-21 19:38:35 UTC (rev 1417) +++ trunk/bibdesk/BDSKImageFadeAnimation.h 2009-05-26 19:16:21 UTC (rev 1418) @@ -50,6 +50,10 @@ // use to set the starting point for the animation - (void)setStartingImage:(NSImage *)anImage; +// more efficient bitmap rep versions of setTargetImage/setStartingImage +- (void)setStartingBitmapImageRep:(NSBitmapImageRep *)imageRep; +- (void)setTargetBitmapImageRep:(NSBitmapImageRep *)imageRep; + // returns the image at the final time value - (NSImage *)finalImage; // returns the image at the current time value Modified: trunk/bibdesk/BDSKImageFadeAnimation.m =================================================================== --- trunk/bibdesk/BDSKImageFadeAnimation.m 2009-05-21 19:38:35 UTC (rev 1417) +++ trunk/bibdesk/BDSKImageFadeAnimation.m 2009-05-26 19:16:21 UTC (rev 1418) @@ -69,41 +69,57 @@ [super setCurrentProgress:progress]; // -currentValue ranges 0--1.0 and accounts for the animation curve - [filter setValue:[NSNumber numberWithFloat:[self currentValue]] forKey:@"inputTime"]; + [filter setValue:[NSNumber numberWithFloat:[self currentValue]] forKey:kCIInputTimeKey]; [[self delegate] imageAnimationDidUpdate:self]; } - (void)setStartingImage:(NSImage *)anImage; { - [filter setValue:[CIImage imageWithData:[anImage TIFFRepresentation]] forKey:@"inputImage"]; + [filter setValue:[CIImage imageWithData:[anImage TIFFRepresentation]] forKey:kCIInputImageKey]; } - (void)setTargetImage:(NSImage *)anImage; { - [filter setValue:[CIImage imageWithData:[anImage TIFFRepresentation]] forKey:@"inputTargetImage"]; + [filter setValue:[CIImage imageWithData:[anImage TIFFRepresentation]] forKey:kCIInputTargetImageKey]; } +- (void)setStartingBitmapImageRep:(NSBitmapImageRep *)imageRep; +{ + NSParameterAssert([imageRep isKindOfClass:[NSBitmapImageRep class]]); + CIImage *img = [[CIImage alloc] initWithBitmapImageRep:imageRep]; + [filter setValue:img forKey:kCIInputImageKey]; + [img release]; +} + +- (void)setTargetBitmapImageRep:(NSBitmapImageRep *)imageRep; +{ + NSParameterAssert([imageRep isKindOfClass:[NSBitmapImageRep class]]); + CIImage *img = [[CIImage alloc] initWithBitmapImageRep:imageRep]; + [filter setValue:img forKey:kCIInputTargetImageKey]; + [img release]; +} + - (NSImage *)finalImage; { - NSNumber *inputTime = [[[filter valueForKey:@"inputTime"] retain] autorelease]; + NSNumber *inputTime = [[[filter valueForKey:kCIInputTimeKey] retain] autorelease]; - [filter setValue:[NSNumber numberWithInt:1] forKey:@"inputTime"]; + [filter setValue:[NSNumber numberWithInt:1] forKey:kCIInputTimeKey]; NSImage *currentImage = [self currentImage]; // restore the input time, since calling -finalImage shouldn't interrupt the animation - [filter setValue:inputTime forKey:@"inputTime"]; + [filter setValue:inputTime forKey:kCIInputTimeKey]; return currentImage; } - (CIImage *)currentCIImage; { - return [filter valueForKey:@"outputImage"]; + return [filter valueForKey:kCIOutputImageKey]; } - (NSImage *)currentImage; { NSImage *nsImage = nil; - CIImage *image = [filter valueForKey:@"outputImage"]; + CIImage *image = [filter valueForKey:kCIOutputImageKey]; if (nil != image) { CGRect rect = [image extent]; Modified: trunk/bibdesk/BDSKMainTableView.m =================================================================== --- trunk/bibdesk/BDSKMainTableView.m 2009-05-21 19:38:35 UTC (rev 1417) +++ trunk/bibdesk/BDSKMainTableView.m 2009-05-26 19:16:21 UTC (rev 1418) @@ -404,33 +404,26 @@ forKey:BDSKShownColsNamesKey]; if (BDSKDefaultAnimationTimeInterval > 0.0) { + + // block until this is done, so we can handle drawing manually + BDSKImageFadeAnimation *animation = [[BDSKImageFadeAnimation alloc] initWithDuration:BDSKDefaultAnimationTimeInterval animationCurve:NSAnimationEaseInOut]; + [animation setDelegate:self]; + [animation setAnimationBlockingMode:NSAnimationBlocking]; + NSView *cacheView = [self enclosingScrollView]; - NSImage *initialImage = [[NSImage alloc] initWithSize:[cacheView frame].size]; NSBitmapImageRep *imageRep = [cacheView bitmapImageRepForCachingDisplayInRect:[cacheView frame]]; [cacheView cacheDisplayInRect:[cacheView frame] toBitmapImageRep:imageRep]; - [initialImage addRepresentation:imageRep]; + [animation setStartingBitmapImageRep:imageRep]; // set the view up with the new columns; don't force a redraw, though [self setupTableColumnsWithIdentifiers:identifiers]; // the added table column's content is not correct during the transition; -reloadData doesn't help - NSImage *finalImage = [[NSImage alloc] initWithSize:[cacheView frame].size]; imageRep = [cacheView bitmapImageRepForCachingDisplayInRect:[cacheView frame]]; [cacheView cacheDisplayInRect:[cacheView frame] toBitmapImageRep:imageRep]; - [finalImage addRepresentation:imageRep]; + [animation setTargetBitmapImageRep:imageRep]; - // block until this is done, so we can handle drawing manually - BDSKImageFadeAnimation *animation = [[BDSKImageFadeAnimation alloc] initWithDuration:BDSKDefaultAnimationTimeInterval animationCurve:NSAnimationEaseInOut]; - [animation setDelegate:self]; - [animation setAnimationBlockingMode:NSAnimationBlocking]; - - [animation setTargetImage:finalImage]; - [animation setStartingImage:initialImage]; [animation startAnimation]; - - [finalImage release]; - [initialImage release]; - [animation autorelease]; } else { // set the view up with the new columns This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |