This is GigerInfoView.m in view mode; [Download] [Up]
#import "GigerInfoView.h" #import <math.h> @implementation GigerInfoView - initWithFrame:(NSRect)frameRect; { [super initWithFrame:frameRect]; oldImage = frontImage = [NSImage imageNamed:@"QueenFront"]; image = [NSImage imageNamed:@"QueenBack"]; imageSize = [image size]; buffer = [[NSImage alloc] initWithSize:imageSize]; [self compositeWithDissolve:NO andDelta:0.0]; animateTimer = nil; frontPage = YES; return self; } - (void)dealloc; { [self removeTimer]; [image release]; [oldImage release]; [buffer release]; return [super dealloc]; } - (void)compositeWithDissolve:(BOOL)aBool andDelta:(float)aDelta { NSPoint pt = {0.0,0.0}; [buffer lockFocus]; [oldImage compositeToPoint:pt operation:NSCompositeCopy]; if(aBool) [image dissolveToPoint:pt fraction:aDelta]; [buffer unlockFocus]; } - (void)drawRect:(NSRect)rect; { NSPoint p = {0.0, 0.0}; PSsetgray(NSLightGray); NSRectFill([self bounds]); [buffer compositeToPoint:p operation:NSCompositeCopy]; } - (void)mouseDown:(NSEvent *)thisEvent { if(animateTimer) return; delta = 0.0; [self compositeWithDissolve:NO andDelta:delta]; [self display]; animationStep = 0; animateTimer = [[NSTimer scheduledTimerWithTimeInterval:.03 target:self selector:@selector(animationClick:) userInfo:self repeats:YES] retain]; } - (void)animationClick:(NSTimer *)timer { [self animateDissolve]; PSWait(); } - (void)animateDissolve { id dummy; delta = delta + 0.05; [self compositeWithDissolve:YES andDelta:delta]; [self display]; if(delta < 1.0) return; dummy = oldImage; oldImage = image; image = dummy; frontPage = !frontPage; if(!frontPage) delta = 0; else [self removeTimer]; } - (void)removeTimer { if(animateTimer){ [animateTimer invalidate]; [animateTimer release]; animateTimer = nil; } } - (BOOL)windowShouldClose:(id)sender { if(animateTimer) return NO; return YES; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.