This is BackView.m in view mode; [Download] [Up]
// BackView.m // // a View that provides some functionality that some screen savers might // find useful; you can subclass this class if you like. // // You may freely copy, distribute, and reuse the code in this example. // NeXT disclaims any warranty of any kind, expressed or implied, as to its // fitness for any particular use. #import "BackView.h" #import "Thinker.h" #import <appkit/NXImage.h> #import <dpsclient/wraps.h> #import <libc.h> @implementation BackView - (BOOL) timePassed: (BStimeval) delay { BStimeval now, msec; BOOL result; now = currentTimeInMs(); if (BVthen == 0) // added by shou-h@nexus.or.jp BVthen = now; // added by shou-h@nexus.or.jp msec = now - BVthen; //so as not to suck too many cycles, if I'm waiting for some // time more than a tenth of a second in the future, I sleep // a while. This interval is short enough that the app shouldn't // seem unresponsive to user actions. // ok, so you'd never pull this trick if the user had to type. // A better solution would be to coordinate the timed entry better, // but I get slightly better performance from spinning in my // timed entry (a bad idea for most apps...) if ((msec + 120) < delay) { usleep(110000); return NO; } result = (msec > delay); if (result) BVthen = now; return result; } - initFrame:(const NXRect *)frameRect { [super initFrame:frameRect]; [self allocateGState]; // For faster lock/unlockFocus srandom(time(0)); [self setImageConstraints]; return self; } - sizeTo:(NXCoord)width :(NXCoord)height { [super sizeTo:width :height]; [self setImageConstraints]; return self; } - drawSelf:(const NXRect *)rects :(int)rectCount { if (!rects || !rectCount) return self; PSsetgray(0); NXRectFill(rects); return self; } - setImageConstraints { maxCoord.x = bounds.size.width - imageRect.size.width; maxCoord.y = bounds.size.height - imageRect.size.height; if (maxCoord.x < 0) maxCoord.x = 0; if (maxCoord.y < 0) maxCoord.y = 0; return self; } - setImage: newImage { image = newImage; [image getSize: &imageRect.size]; [self setImageConstraints]; [self display]; return self; } - (BOOL) useBufferedWindow { return YES; // by default; can be overridden in subclasses } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.