home *** CD-ROM | disk | FTP | other *** search
/ Nebula / nebula.bin / SourceCode / MiniExamples / PerformanceTuning / VisibleView-01 / SubViewFramer.m < prev    next >
Text File  |  1991-10-18  |  2KB  |  67 lines

  1. //
  2. //    A View that Frames its Subview
  3. //    Randy Nelson—Copyright NeXT 1990
  4. //    Not for release or reuse
  5. //
  6.  
  7. #import "SubViewFramer.h"
  8. #import <dpsclient/wraps.h>
  9. #import <appkit/graphics.h>
  10. #import "VisibleOne.h"
  11.  
  12. @implementation SubViewFramer
  13.  
  14. //factory method—sets clipping off
  15. + newFrame:(NXRect *)r
  16. {
  17.     self = [super newFrame:r];
  18.     [self setClipping:NO];
  19.     return self;
  20. }
  21.  
  22. //called by the visible view to frame it—transparently if requested
  23. - frameMe:sender
  24. {
  25.     NXRect aRect;
  26.     float subViewsFrameAngle;
  27.     
  28.     [self lockFocus];
  29.     PSsetgray(0.5);
  30.     
  31.     //gets the subview's frame and rotation
  32.     [sender getFrame:&aRect];
  33.     subViewsFrameAngle = [sender frameAngle];
  34.     
  35.     //necessary to rotate around the same point the subview used if rotated
  36.     if(subViewsFrameAngle != 0){
  37.         PStranslate(aRect.origin.x, aRect.origin.y);
  38.         PSrotate(subViewsFrameAngle);
  39.         PStranslate(-aRect.origin.x, -aRect.origin.y);
  40.     }
  41.     
  42.     //sets the alpha if sender wants a transparent superview
  43.     if ([sender wantsTransparency]){
  44.         PSsetalpha(NX_DKGRAY);
  45.     }
  46.     
  47.     //a very ugly hack to frame the subview—anybody remember Trig?
  48.     //left side
  49.     PScompositerect(-1000.0, -1000.0, (1000.0 + aRect.origin.x), 2000.0, NX_SOVER);
  50.     //top middle
  51.     PScompositerect(aRect.origin.x, (aRect.origin.y + aRect.size.height), aRect.size.width, (2000.0 - (aRect.origin.y + aRect.size.height)), NX_SOVER);
  52.     //right side
  53.     PScompositerect((aRect.origin.x + aRect.size.width), -1000.0, (2000.0 - (aRect.origin.x + aRect.size.width)), 2000.0, NX_SOVER);
  54.     //bottom middle
  55.     PScompositerect(aRect.origin.x, -1000.0, aRect.size.width, (1000.0 + aRect.origin.y), NX_SOVER);
  56.     
  57.     //enclose the subview's frame
  58.     PSsetgray(NX_BLACK);
  59.     PSsetalpha(1.0);
  60.     NXFrameRect(&aRect);    
  61.  
  62.     [self unlockFocus];
  63.     return self;
  64. }
  65.  
  66. @end
  67.