This is IVOSlidingImageView.m in view mode; [Download] [Up]
// // SlidingImageView.m // // Implements a sliding image screen saver view. // // Lennart Lovstrand, August 1991. // small modifications by sam 910904 // // 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 "IVOSlidingImageView.h" #import "Thinker.h" #import <appkit/NXImage.h> #import <appkit/Panel.h> // for NXRunAlertPanel() #import <dpsclient/wraps.h> #import <libc.h> #import <math.h> @implementation IVOSlidingImageView - drawSelf:(const NXRect *)rects :(int)rectCount { NXPoint p; if (!rects || !rectCount) return self; [super drawSelf:rects :rectCount]; p.x = floor(imageRect.origin.x); p.y = floor(imageRect.origin.y); [image composite: NX_SOVER toPoint: &p]; return self; } - oneStep { NXPoint p; PSsetgray(0); NXRectFill(&imageRect); usleep((1*1000000)/68); //sleep a few vblanks imageRect.origin.x += delta.x; imageRect.origin.y += delta.y; if (imageRect.origin.x < 0) { imageRect.origin.x = 0; delta.x = randBetween(.8,1.3); } else if (imageRect.origin.x > maxCoord.x) { imageRect.origin.x = maxCoord.x; delta.x = -randBetween(.8,1.3); } if (imageRect.origin.y < 0) { imageRect.origin.y = 0; delta.y = randBetween(.8,1.3); } else if (imageRect.origin.y > maxCoord.y) { imageRect.origin.y = maxCoord.y; delta.y = -randBetween(.8,1.3); } p.x = floor(imageRect.origin.x); p.y = floor(imageRect.origin.y); [image composite: NX_SOVER toPoint: &p]; return self; } - setImageConstraints { [super setImageConstraints]; if (imageRect.origin.x > maxCoord.x || imageRect.origin.y > maxCoord.y) { imageRect.origin.x = randBetween(0, maxCoord.x); imageRect.origin.y = randBetween(0, maxCoord.y); } delta.x = randBetween(-1,1); delta.y = randBetween(-1,1); return self; } - inspector:sender { return [sender commonImageInspector]; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.