This is ScaledView.m in view mode; [Download] [Up]
#import "ScaledView.h" #import <appkit/NXImage.h> #import <appkit/Window.h> #import <appkit/Panel.h> // for NXRunAlertPanel() #import <dpsclient/wraps.h> #import <libc.h> #import <math.h> #define NUMLINES 305 @implementation ScaledView : FooFaraw - initFrame:(NXRect *)frameRect { register int jkl; // about the 3 -- don''t ask, it looks good. x1=(float *)malloc(sizeof(float) * (NUMLINES +3)); yc1=(float *)malloc(sizeof(float) * (NUMLINES +3)); t1=(float *)malloc(sizeof(float) * (NUMLINES +3)); t2=(float *)malloc(sizeof(float) * (NUMLINES +3)); t3=(float *)malloc(sizeof(float) * (NUMLINES +3)); [super initFrame:frameRect]; for(jkl=0;jkl<NUMLINES;jkl++){ x1[jkl]=midx; yc1[jkl]=midy; } // line per is the percentage back that erase steps lper=NUMLINES-5; return self; } - oneStep { float mx, my; pp=p; p=n; n=(n+1)%(NUMLINES-1); PScurrentmouse(winNum, &mx, &my); if (bigMode){ xi=((mx-midx)/urx)*50; yi=((my-midy)/ury)*50; } else { xis=((mx-midx)/urx)*3; yis=((my-midy)/ury)*3; } if(!count || ((count++>500) && (((mx != oldx) && (my != oldy)) || (count>30000)))){ count=1; PSsetgray(0.0); NXRectFill(&bounds); } oldx=mx; oldy=my; t1[n]=t1[p]+0.2*(xi+xis); if(t1[n]>(2*M_PI)) t1[n]-=(2*M_PI); t2[n]=t2[p]+0.2*(yi+yis); if(t2[n]>(2*M_PI)) t2[n]-=(2*M_PI); t3[n]=t3[p]+0.01; if(t3[n]>(2*M_PI)) t3[n]-=(2*M_PI); x1[n]=(cos(t1[n])*s1) + (cos(t2[n])*s3) + midx; yc1[n]=(sin(t1[n])*s2) + (sin(t2[n])*s4) + midy; PSsetrgbcolor((cos(t1[n])+1.0)/2.0, (cos(t2[n])+1.0)/2.0, (cos(t3[n])+1.0)/2.0); PSnewpath(); PSmoveto(x1[pp], yc1[pp]); PSlineto(x1[p], yc1[p]); PSlineto(x1[n], yc1[n]); PSclosepath(); PSfill(); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.