home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1994 June / NEBULA_SE.ISO / SourceCode / OOP_Course / Examples / DrawTests / DPSUserPath / DPSUPView.m < prev    next >
Encoding:
Text File  |  1993-01-19  |  2.2 KB  |  103 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "DPSUPView.h"
  5.  
  6. @implementation DPSUPView
  7.  
  8. - initFrame:(const NXRect *)theFrame
  9. {
  10.     [super initFrame:theFrame];
  11.     sqSide=100.;                              // and length of a side
  12.     NXSetRect(&sqRect,bounds.size.width/2.0,bounds.size.height/2.0,3*sqSide,sqSide);
  13.     backgroundGray=NX_WHITE;                // init the background gray level
  14.  
  15.     return self;
  16. }
  17.  
  18. - (float)backgroundGray
  19. {
  20.     return backgroundGray;
  21. }
  22.  
  23. - takeBackgroundGrayFrom:sender
  24. {
  25.     backgroundGray = [sender floatValue];    // read the background gray slider
  26.     [self display];
  27.     return self;
  28. }
  29.  
  30. - drawSelf:(const NXRect *)r :(int)c
  31. {
  32.     int    i, length = sqSide/8;
  33.     float    *cArray;
  34.     char    *oArray;
  35.     float    bbox[4];
  36.     int    oi=0,ci=0;
  37.  
  38.  /* Draw background */
  39.     PSsetgray(backgroundGray);
  40.     NXRectFill(&bounds);
  41.  /* Start Drawing */
  42.     PSsetgray(NX_BLACK);
  43.     PSsetlinewidth(5.0);
  44.  
  45.     /* fill cArray and oArray */    
  46.     NX_ZONEMALLOC([self zone],cArray,float,98);
  47.     NX_ZONEMALLOC([self zone],oArray,char,51);
  48.     oArray[oi++] = dps_ucache;
  49.     oArray[oi++] = dps_setbbox;
  50.     
  51.     cArray[ci++] = sqRect.origin.x;
  52.     cArray[ci++] = sqRect.origin.y;
  53.     oArray[oi++] = dps_moveto;
  54.  
  55.         for(i = 0; i<12; i++){
  56.             cArray[ci++] = length;
  57.             cArray[ci++] = 0.0;
  58.             oArray[oi++] = dps_rlineto;
  59.             cArray[ci++] = 0.0;
  60.             cArray[ci++] = 8*length;
  61.             oArray[oi++] = dps_rlineto;
  62.             cArray[ci++] = length;
  63.             cArray[ci++] = 0.0;
  64.             oArray[oi++] = dps_rlineto;
  65.             cArray[ci++] = 0.0;
  66.             cArray[ci++] = -8*length;
  67.             oArray[oi++] = dps_rlineto;
  68.         }
  69.     
  70.     /* fill bbox */
  71.     bbox[0] = -1.0e6;
  72.     bbox[1] = -1.0e6;
  73.     bbox[2] = 1.0e6;
  74.     bbox[3] = 1.0e6;
  75.     
  76.     PSsetgray(NX_BLACK);
  77.  
  78.     DPSDoUserPath(cArray,ci,dps_float,oArray,oi,bbox, dps_ustroke);
  79.  
  80.     NX_FREE(cArray);
  81.     NX_FREE(oArray);
  82.  
  83.     return self;
  84. }
  85.  
  86. - mouseDownAction:(NXPoint *)currentLocation
  87. {    
  88.     [self mouseDraggedAction:currentLocation];  //now do same as when dragging
  89.     return self;
  90. }
  91.  
  92. - mouseDraggedAction:(NXPoint *)currentLocation
  93. {
  94.     xOffset = sqRect.size.width/2;    // set the offsets for movement wrt the center
  95.     yOffset = sqRect.size.height/2;
  96.     sqRect.origin.x  = currentLocation->x - xOffset; // new x and y locations are center
  97.     sqRect.origin.y  = currentLocation->y - yOffset; // of drawing
  98.     [self display];
  99.     return self;
  100. }
  101.  
  102. @end
  103.