This is InfoView.m in view mode; [Download] [Up]
#import "InfoView.h" void runOneStep(DPSTimedEntry timedEntry, double timeNow, void *data) { [(id)data drawFace:timeNow]; } @implementation InfoView - initFrame:(const NXRect *)rect; { [super initFrame:rect]; [self allocateGState]; teflag=0; background=[[NXImage allocFromZone:[self zone]] initFromSection:"Jolly.tiff"]; [background setScalable:YES]; ball=[[NXImage allocFromZone:[self zone]] initFromSection:"Jolly.tiff"]; [ball setScalable:YES]; [self sizeTo:bounds.size.width :bounds.size.height]; //te=DPSAddTimedEntry((float).7/(float)67,&runOneStep,self,NX_BASETHRESHOLD); return self; } - drawFace:(double)time { NXRect brect; if(teflag) { DPSRemoveTimedEntry(te); teflag=0; } if(newpos.x >bounds.size.width-ballSize.width || newpos.x<bounds.origin.x ) speed.x=floor(-speed.x); if(newpos.y >bounds.size.height-ballSize.height || newpos.y<bounds.origin.y ) speed.y=floor(-speed.y); newpos.x=floor(oldpos.x+speed.x); newpos.y=floor(oldpos.y+speed.y); [self lockFocus]; if(speed.x>0) { brect.size.width =speed.x; brect.origin.x =oldpos.x; } else { brect.size.width =-speed.x; brect.origin.x =oldpos.x+speed.x+ballSize.width; } brect.size.height =ballSize.height; brect.origin.y =oldpos.y; [background composite:NX_COPY fromRect:&brect toPoint:&brect.origin]; if(speed.y>0) { brect.size.height =speed.y; brect.origin.y =oldpos.y; } else { brect.size.height =-speed.y; brect.origin.y =oldpos.y+speed.y+ballSize.height; } brect.size.width =ballSize.width; brect.origin.x =oldpos.x; [background composite:NX_COPY fromRect:&brect toPoint:&brect.origin]; oldpos.x=newpos.x; oldpos.y=newpos.y; [ball composite:NX_COPY toPoint:&newpos]; //[[self window] flushWindow]; //NXPing(); [self unlockFocus]; NXPing(); if(!teflag) { te=DPSAddTimedEntry((float)1/(float)67,&runOneStep,self,NX_BASETHRESHOLD); teflag=1; } return self; } - loadFromFile:sender { return self; } - sizeTo:(NXCoord)width :(NXCoord)height { [super sizeTo:width :height]; [background setSize:&bounds.size]; ballSize.width = floor(bounds.size.width/3); ballSize.height = floor(bounds.size.height/3); [ball setSize:&ballSize]; oldpos.x=floor(bounds.size.width/2.0); //bounds.size.width/2+bounds.origin.x; oldpos.y=floor(bounds.size.height/2.0); //bounds.size.height/2+bounds.origin.y; speed.x=2;//floor(bounds.size.width/100.0); //bounds.size.width/20; speed.y=2;//floor(bounds.size.height/100.0); //bounds.size.height/20; return self; } - drawSelf:(NXRect *)rect :(int)count { // printf("Frame w:%f h:%f\n",frame.size.width,frame.size.height); // printf("Bounds w:%f h:%f\n",bounds.size.width,bounds.size.height); // printf("Rect w:%f h:%f\n",rect->size.width,rect->size.height); //[background setSize:&frame.size]; [background composite:NX_COPY fromRect:rect toPoint:&bounds.origin]; return self; } /***********delegated methods should prevent wasting cpu */ - windowDidMiniaturize:sender { if(teflag) { DPSRemoveTimedEntry(te); teflag=0; } return self; } - windowDidBecomeKey:sender { char str[100]; sprintf(str,"Version :\n%s",VERSION); [version setStringValue:str]; sprintf(str,"Created :\n%s ",DATE); [date setStringValue:str]; [[super window] useOptimizedDrawing:YES]; if(!teflag) { te=DPSAddTimedEntry((float)1/(float)67,&runOneStep,self,NX_BASETHRESHOLD); teflag=1; } return self; } - windowDidResignKey:sender { if(teflag) { DPSRemoveTimedEntry(te); teflag=0; } return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.