This is PhotoWinProcs.m in view mode; [Download] [Up]
/* This creates the window that displays an individual Photo image. It is also the delegate for that window. */ #import "PhotoWinProcs.h" #import "ImageView.h" @implementation PhotoWinProcs - (enum _NXWindowDepth)getDepthOfNewWindows { return depthOfNewWindows; } - setDepthOfNewWindows:(enum _NXWindowDepth)windowDepth { depthOfNewWindows = windowDepth; return self; } - displayImage:(id)theImage withName:(char *)imName atResolution:(int)imRes { Window *win; int pixHigh, pixWide; NXRect imRect = {{10.0, 10.0}, {0.0, 0.0}}; pixHigh = [theImage pixelsHigh]; pixWide = [theImage pixelsWide]; [theImage getSize:&imRect.size]; // for reference purposes if ( imRes >= 72 ) { /* turn image into the requested resolution */ imRect.size.width = ( pixWide * 72.0) / (float)imRes; imRect.size.height = ( pixHigh * 72.0) / (float)imRes; [theImage setSize:&imRect.size]; } win = [[Window alloc] initContent:&imRect style:NX_TITLEDSTYLE backing:NX_BUFFERED buttonMask:NX_CLOSEBUTTONMASK|NX_MINIATURIZEBUTTONMASK defer: YES]; [win setDelegate:self]; [win setTitleAsFilename:imName]; /* we have to set the depth here, or cut & paste operations may not keep all the desired information (particularly if running this on a greyscale station). */ [win setDepthLimit:depthOfNewWindows]; [win setContentView:[[ImageView alloc] initForImage:theImage :&imRect]]; [win makeKeyAndOrderFront:self]; return self; } - windowWillClose:sender { id imageID; // NXBitmapImageRep *imageBitmap; u_char *rgb[5]; /* have to free up the image that the window is displaying, and due to the way we got the bitmap for that image, the RGB data planes have to be found and freed too */ imageID = [[sender contentView] image]; /* the following should be done via a call to freeDataPlanes in photoCD_Rdr, but at the moment it isn't... */ if ( [imageID isPlanar] ) { /* a rather sleezy way to distinguish between images that were read in and images which were cut/pasted in... */ [imageID getDataPlanes:rgb]; if ( rgb[0] ) free( rgb[0] ); if ( rgb[1] ) free( rgb[1] ); if ( rgb[2] ) free( rgb[2] ); } [imageID free]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.