This is PointsView.m in view mode; [Download] [Up]
// // PointsView // // Copyright (C) 1992 Contemporary Design Studios. // #import "PointsView.h" #import "Random.h" #import "ElkinsEngine.h" #import <appkit/Button.h> #import <dpsclient/wraps.h> /* for PSxxx functions */ @implementation PointsView // // init // - initFrame:(const NXRect *)frameRect { [super initFrame:frameRect]; randGen = [[Random alloc] initEngineInstance:[[ElkinsEngine alloc] init]]; initial = YES; plottingPoints = YES; return self; } // // start: // - start:sender { int i; [startButton setEnabled:NO]; [stopButton setEnabled:YES]; // // Set up modal session: // [NXApp beginModalSession:&mySession for:[self window]]; // // Run modal session: // while([NXApp runModalSession:&mySession] != NX_RUNSTOPPED) { if(plottingPoints) { for(i = 0; i < 25; i++) [self plotX:[randGen percent] y:[randGen percent]]; [self update]; } else { for(i = 0; i < 10; i++) [self plotLine:[randGen percent] :[randGen percent] :[randGen percent] :[randGen percent]]; [self update]; } } return self; } // // stop: // - stop:sender { [stopButton setEnabled:NO]; [startButton setEnabled:YES]; [NXApp stopModal]; return self; } // // clear: // - clear:sender { [self lockFocus]; PSsetgray(NX_WHITE); NXRectFill(&bounds); PSsetgray(NX_BLACK); NXFrameRect(&bounds); [self unlockFocus]; [self update]; return self; } // // plotPoints: // - plotPoints:sender { plottingPoints = YES; return self; } // // plotLines: // - plotLines:sender { plottingPoints = NO; return self; } // // plotX:y: // - plotX:(double)x y:(double)y { // NXRect myRect; // myRect.origin.x = bounds.origin.x + x * bounds.size.width; // myRect.origin.y = bounds.origin.y + y * bounds.size.height; // myRect.size.width = 1.0; // myRect.size.height = 1.0; [self lockFocus]; PSsetgray(NX_BLACK); PSsetlinewidth(0.5); PSmoveto(bounds.origin.x + x * bounds.size.width, bounds.origin.y + y * bounds.size.height); PSrlineto(0.0, 0.0); PSstroke(); [self unlockFocus]; return self; } // // plotLine:::: // - plotLine:(double)x1 :(double)y1 :(double)x2 :(double)y2 { [self lockFocus]; PSsetgray(NX_BLACK); PSsetlinewidth(1.0); PSmoveto(bounds.origin.x + x1 * bounds.size.width, bounds.origin.y + y1 * bounds.size.height); PSlineto(bounds.origin.x + x2 * bounds.size.width, bounds.origin.y + y2 * bounds.size.height); PSstroke(); [self unlockFocus]; return self; return self; } // // drawSelf:: // - drawSelf:(const NXRect *)rects :(int)rectCount { if(initial) { PSsetgray(NX_WHITE); NXRectFill(&bounds); initial = NO; } PSsetgray(NX_BLACK); NXFrameRect(&bounds); return self; } @end // // End of file. //
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.