This is GraphicsView.m in view mode; [Download] [Up]
#import "GraphicsView.h"
#import <appkit/NXImage.h>
#import <appkit/Application.h>
#import <defaults/defaults.h>
#import <dpsclient/psops.h>
#import <sys/param.h>
@implementation GraphicsView
- (BOOL) acceptsFirstResponder ;
{ return YES ;
}
- clear ;
{ [image lockFocus] ;
NXEraseRect(&bounds) ;
[image unlockFocus] ;
[self display] ;
return self ;
}
- drawSelf: (NXRect *) aRect :(int) count ;
{ // draw my cached image to the screen
[image composite: NX_SOVER
fromRect: aRect
toPoint: &aRect->origin ] ;
return self ;
}
- image ;
{ return image ;
}
- setUp ;
{ // set up...allocating the initial NXImage object is done as a side effect
// of calling superviewSizeChanged
NXSize aSize ;
const char *defaultSize ;
defaultSize = NXGetDefaultValue([NXApp appName],"GraphicsViewSize") ;
sscanf(defaultSize,"%f %f", &aSize.width, &aSize.height) ;
[self sizeTo: aSize.width :aSize.height] ; // make myself same size as default image
[self superviewSizeChanged: NULL] ; // go see if I need to grow
[self clear] ;
return self ;
}
- superviewSizeChanged: (const NXSize *)oldSize
{ NXRect superBounds, currentBounds ;
[self getBounds: ¤tBounds] ;
[superview getBounds: &superBounds] ;
if(!image || (superBounds.size.width > currentBounds.size.width) ||
(superBounds.size.height > currentBounds.size.height))
{ NXRect newBounds = {{0.0,0.0},{0.0,0.0}} ;
id newImage ;
newBounds.size.width = MAX(superBounds.size.width,currentBounds.size.width) ;
newBounds.size.height = MAX(superBounds.size.height,currentBounds.size.height) ;
[self sizeTo: newBounds.size.width :newBounds.size.height] ;
newImage = [[NXImage alloc] initSize: &newBounds.size] ;
if(image)
{ [newImage lockFocus] ;
[image composite: NX_COPY toPoint: &newBounds.origin] ;
[newImage unlockFocus] ;
[image free] ;
}
image = newImage ;
[self display] ;
}
return self ;
}
@end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.