This is FireworksView.m in view mode; [Download] [Up]
#import "FireworksView.h" #import "FireworksWraps.h" #import <math.h> #import <libc.h> #import <dpsclient/wraps.h> #import <appkit/color.h> #import <appkit/Button.h> #import <appkit/Application.h> #import <appkit/NXColorWell.h> @implementation FireworksView - newOne { oldy = 0; newy = 0; oldx = RND(1000) * 2.0; newx = oldx; xvel = (RND(2000) - oldx) / 50.0; yvel = (RND(15) + 23) * 1.2; i = 0; if (numWorks++ > MAXWORKS) { PSsetgray(0.0); numWorks = 0; NXRectFill(&bounds); // black screen } return self; } - initFrame:(NXRect *)frameRect { [super initFrame:frameRect]; srandom(getpid()); grav = 0.8; // set gravity [self newOne]; [NXApp loadNibSection:"FireworksPrefs.nib" owner:self]; winNum=[[self window] windowNum]; return self; } - sizeTo:(NXCoord)width :(NXCoord)height { [super sizeTo:width :height]; mywidth = width; myheight = height; return self; } - oneStep { if (i++ < 50) { drawWork(oldx, oldy, newx, newy); oldx = newx; oldy = newy; newx = oldx + xvel; newy = oldy + yvel; yvel = yvel - grav; } else { blowUp(oldx, oldy, newx, newy); [self newOne]; } PScurrentmouse(winNum, &curX, &curY); /* Test the cursor */ if (mywidth - curX + myheight - curY <= 10.0) [self show]; // get Pref panel if in upper rt. corner return self; } - drawSelf:(const NXRect *)rects :(int)rectCount { if (!rects || !rectCount) return self; PSsetgray(0.0); NXRectFill(rects); // black screen PScurrentmouse(winNum, &curX, &curY); /* Test the cursor */ if (mywidth - curX + myheight - curY <= 10.0) [self show]; // get Pref panel if in upper rt. corner return self; } - (BOOL)isBoringScreenSaver { // I hope I set this right... return NO; } - (BOOL) useBufferedWindow { // unbuffered, so a call to update will always call drawself // to fill the window with black... return NO; } - show { [myPrefWindow orderFront:nil]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.