This is WallPaperView.m in view mode; [Download] [Up]
#import <c.h> #import <appkit/appkit.h> #import "Thinker.h" #import "WallPaperView.h" #import "WallPaperWrap.h" #define MODULE "WallPaper" #define registerDefaults(d) (void) NXRegisterDefaults([NXApp appName], d) #define getStringDefault(s) NXGetDefaultValue([NXApp appName], s) #define writeStringDefault(s, v) NXWriteDefault([NXApp appName], s, v) #define getFloatDefault(s) atof(getStringDefault(s)) #define STEPDEFAULTNAME "WallPaperStep" #define STEP getFloatDefault(STEPDEFAULTNAME) #define COUNTDEFAULTNAME "WallPaperCount" #define COUNT getFloatDefault(COUNTDEFAULTNAME) #define WILDDEFAULTNAME "WallPaperWildness" #define WILD getFloatDefault(WILDDEFAULTNAME) #define BRIGHTDEFAULTNAME "WallPaperBrightness" #define BRIGHT getFloatDefault(BRIGHTDEFAULTNAME) static NXDefaultsVector WallPaperDefaults = { { STEPDEFAULTNAME, "0.1" }, { COUNTDEFAULTNAME, "4.0" }, { WILDDEFAULTNAME, "0.5" }, { BRIGHTDEFAULTNAME, "0.5" }, { NULL, NULL } }; @implementation WallPaperView - initFrame:(NXRect *) frameRect { [super initFrame:frameRect]; registerDefaults(WallPaperDefaults); [NXApp getScreenSize:&size]; size.height = (size.width /= COUNT); [(image = [[NXImage alloc] initSize:&size]) getSize:&size]; inspector = nil; step = -1.0; loadwallpaper(); return [self allocateGState]; } - drawSelf:(const NXRect *) rects :(int) rectCount { if (rects == NULL || rectCount == 0) return self; PSsetgray(NX_BLACK); NXRectFill(rects); step = -1.0; return self; } - free { [image free]; return [super free]; } - tessellate { float x, y, limit; int gState = [self gState]; limit = bounds.size.width + bounds.origin.x; for(x = bounds.origin.x + size.width; x < limit; x += size.width) PScomposite(0.0, 0.0, size.width, size.height, gState, x, 0.0, NX_COPY); limit = bounds.size.height + bounds.origin.y; for(y = bounds.origin.y + size.height; y < limit; y += size.height) PScomposite(0.0, 0.0, bounds.size.width, size.height, gState, 0.0, y, NX_COPY); return self; } - oneStep { float increment = STEP; static NXPoint point = { 0.0, 0.0 }; if(step < increment) { [image lockFocus]; { wallpaper(WILD, size.width, BRIGHT); } [image unlockFocus]; if(step < 0.0) { [image composite:NX_COPY toPoint:&point]; step = 0.0; } else step = increment; } else { [image dissolve:(step * step) toPoint:&point]; if((step += increment) > 1.0) step = 0.0; } return [self tessellate]; } - inspector:sender { char buffer[MAXPATHLEN]; if (inspector == nil) { (void) sprintf(buffer,"%s/%s.nib", [sender moduleDirectory:MODULE], MODULE); [NXApp loadNibFile:buffer owner:self withNames:NO]; } return inspector; } - (BOOL) useBufferedWindow { return YES; } - (const char *) windowTitle { return MODULE; } - setDefault:sender { [sender setTag:YES]; if([wildness tag]) { float wild = rint([wildness floatValue] * 2.0) / 2.0; /* coerce to 0.5 resolution */ [wildness setFloatValue:wild]; (void) writeStringDefault(WILDDEFAULTNAME, [wildness stringValue]); } if([brightness tag]) (void) writeStringDefault(BRIGHTDEFAULTNAME, [brightness stringValue]); [sender setTag:NO]; return self; } - setWildness:anObject { [(wildness = anObject) setFloatValue:WILD]; return self; } - setBrightness:anObject { [(brightness = anObject) setFloatValue:BRIGHT]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.