This is WebsterSpaceView.m in view mode; [Download] [Up]
#import "WebsterSpaceView.h" #import "Thinker.h" #import <appkit/appkit.h> #import <dpsclient/wraps.h> #import <libc.h> #import <math.h> //#import <appkit/Application.h> #define STEPTIME 50 /* time between fades (millisec) */ #define WAITTIME 6000 /* wait before fading (millisec) */ #define TIFFDIR "/NextLibrary/References/Webster-Dictionary/pictures/" //#define FADEDELTA 0.05 #define FADEDELTA 0.05 @implementation WebsterSpaceView - didLockFocus { [myImage getSize: &imageRect.size]; return self; } - drawSelf:(const NXRect *)rects :(int)rectCount { NXPoint p; //NXRect r; if (!rects || !rectCount) return self; [super drawSelf:rects :rectCount]; imageRect.origin.x = floor(randBetween(0, maxCoord.x)); imageRect.origin.y = floor(randBetween(72, maxCoord.y)); p.x = floor(imageRect.origin.x); p.y = floor(imageRect.origin.y); [theView moveTo:p.x :p.y-144]; [theText setText:buf]; [myImage dissolve: delta toPoint: &p]; return self; } - oneStep { int n; if (![self timePassed: steptime]) return self; switch (state) { case FV_FadeIn: delta += FADEDELTA; if (delta >= 1.0) { delta = 1.0; state = FV_FadeOut; steptime = WAITTIME; } PSsetgray(0.0); NXRectFill(&imageRect); [myImage dissolve: delta toPoint: &imageRect.origin]; break; case FV_FadeOut: delta -= FADEDELTA; if (delta <= 0.0) { delta = 0.0; state = FV_Move; } PSsetgray(0.0); NXRectFill(&imageRect); [myImage dissolve: delta toPoint: &imageRect.origin]; steptime = STEPTIME; break; case FV_Move: if(myImage) [myImage free]; //toggle = !toggle; toggle = YES; if(toggle) { strcpy(buf, TIFFDIR); n = (int)floor(randBetween(0,i)); strcat(buf, files[n]); } else { strcpy(buf, "/Users/rick/subst.tiff"); } if((myImage = [[NXImage allocFromZone:[self zone]] init]) == nil) { printf("Failed - allocating image\n"); exit(1); } if (![myImage useFromFile:buf]){ printf("Hey - this is it.\n"); exit(1); } strcpy(buf, files[n]); *rindex(buf, '.') = '\000'; [self setImage:myImage]; state = FV_FadeIn; steptime = STEPTIME; break; } return self; } - initFrame:(NXRect *)frameRect { NXRect theRect; steptime = STEPTIME; state = FV_Move; if((dp = opendir(TIFFDIR)) == NULL ) { fprintf(stderr, "yadayadayada\n"); exit(1); } i=0; while ((dir=readdir(dp)) != NULL) { if(dir ->d_ino == 0){ continue; } if ((strstr(dir->d_name, "tiff")) /*|| (strstr(dir->d_name, "eps"))*/ ) { files[i] = (char *)malloc(strlen(dir->d_name)); strcpy(files[i++], dir->d_name); } } closedir(dp); i--; NXSetRect(&theRect, 0,0,832,144); theView = [[View alloc] initFrame:&theRect]; [theView setFlipped:YES]; theText=[[Text alloc] initFrame:&theRect]; [theText setFont:[Font newFont:"Times-Roman" size:72]]; [theText setTextGray:NX_DKGRAY]; [theText setText:""]; [theView addSubview:theText]; [self addSubview:theView]; myImage = [[NXImage alloc] init]; return [super initFrame:frameRect]; } - free { int m; for(m=0; m <= i; m++) { free(files[m]); // free filename table } //[theText free]; [theView free]; [myImage free]; return [super free]; } - inspector:sender { char blah[256]; if (!websterInspector) { [NXBundle getPath:blah forResource:"webster" ofType:"nib" inDirectory:[sender moduleDirectory:"WebsterSpace"] withVersion:0]; [NXApp loadNibFile:blah owner:self withNames:NO]; } return websterInspector; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.