This is PatchworkView.m in view mode; [Download] [Up]
// // PatchworkView.m // // Matt Pharr- pharr@cs.yale.edu // #import "PatchworkView.h" #import <appkit/appkit.h> #import <dpsclient/wraps.h> #import <defaults/defaults.h> #import <libc.h> #import <stdlib.h> @implementation PatchworkView - oneStep { float red, green, blue; /* Sure, some boxes will be partially or fully off-screen, but this way, */ /* the edges of the screen aren't missed most of the time.... */ theBox.origin.x= randBetween(bounds.origin.x - 50, bounds.size.width + 50); theBox.origin.y= randBetween(bounds.origin.y - 50, bounds.size.height + 50); theBox.size.width= randBetween(0.0, bounds.size.width - theBox.origin.x + 50); theBox.size.height= randBetween(0.0, bounds.size.height - theBox.origin.y + 50); if ([Window defaultDepthLimit] == NX_TwoBitGrayDepth) { /* Black And White Machines */ color= randBetween(0.0, 1.0); if ((int)(15 * color) == 1) { /* This way, solidly black squares */ color= 0.0; /* are more common, just to be totally */ } /* paranoid about avoiding burn-in */ PSsetgray(color); } else { /* thanks a bunch to */ red= randBetween(0.0, 1.0); /* rob@lighthouse.com for */ green= randBetween(0.0, 1.0); /* writing and sending me */ blue= randBetween(0.0, 1.0); /* the code to do it in */ if ((int)(15 * red) == 1) { /* color on color machines... */ red= green= blue= 0.0; } PSsetrgbcolor(red,green,blue); } PSrotate(randBetween(0.0, 90.0)); NXRectFill(&theBox); usleep((10-speed) * 6000); return self; } - initFrame:(const NXRect *)frameRect { [super initFrame:frameRect]; [self inspector:self]; if (NXGetDefaultValue([NXApp appName], "patchViewSpeed") == NULL) { NXWriteDefault([NXApp appName], "patchViewSpeed", "5.0"); speed= 5.0; } else speed= atof(NXGetDefaultValue([NXApp appName], "patchViewSpeed")); [theSlider setFloatValue:speed]; [theSlider update]; return self; } - drawSelf:(const NXRect *)rects :(int)rectCount { if (!rects || !rectCount) { return self; } PSsetgray(0.0); NXRectFill(rects); return self; } - (const char *)windowTitle { return "Patchwork"; } - inspector:sender { char buf[MAXPATHLEN]; if (!sharedInspectorPanel) { sprintf(buf,"%s/%s",[(BSThinker()) moduleDirectory:"Patchwork"],"Patchwork.nib"); [NXApp loadNibFile:buf owner:self withNames:NO]; } return sharedInspectorPanel; } -setSpeed:sender { char temp[20]; speed= [sender floatValue]; sprintf(temp, "%f", speed); NXWriteDefault([NXApp appName], "patchViewSpeed", temp); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.