#ifndef lint static char *RCSid = "$Id: EpsViewer.m,v 3.24 1992/02/29 16:27:40 woo Exp woo $"; #endif /* * $Log: EpsViewer.m,v $ # Revision 3.24 1992/02/29 16:27:40 woo # gnuplot3.2, beta 4 # */ #import "EpsViewer.h" #import "EPSView.h" #import <appkit/nextstd.h> #import <appkit/OpenPanel.h> @implementation EpsViewer - windowCreate:(NXCoord) width Height:(NXCoord) height { NXRect rect = {{0.0,0.0},{width,height}}; /* create the new window, in a good place */ theNewWin = [Window newContent:[self nextRectForWidth:width Height:height] style:NX_TITLEDSTYLE backing:NX_RETAINED buttonMask:(NX_CLOSEBUTTONMASK | NX_MINIATURIZEBUTTONMASK) defer:NO]; /* we need to receive windowDidBecomeMain: and windowDidResignMain: */ [theNewWin setDelegate:self]; /* * create a new EPSView, make it the contentView of our new window, * and destroy the window's old contentView */ [[theNewWin setContentView:[EPSView new]] free]; /* display the window, and bring it forth */ [theNewWin display]; [theNewWin makeKeyAndOrderFront:self]; /* [theNewWin orderBack:self]; */ /* show the frame */ return self; } /***************************************************************************/ /* nextRectForWidth:Height: - return the next good content rectangle */ /* from Carl F. Sutter's wonderful ViewGif2 'Controller' method... */ /***************************************************************************/ /* nextTopLeft - return the next good top left window position */ /***************************************************************************/ - (NXRect *)nextRectForWidth:(NXCoord)width Height:(NXCoord)height { #define OFFSET 10.0 #define MAX_STEPS 20 #define INITIAL_X 356.0 #define INITIAL_Y 241.0 NXPoint nxpTopLeft; NXRect nxrTemp; /* used to find window height */ NXRect nxrWinHeight; /* bounds of enclosing window */ NXSize nxsScreen; /* size of screen */ static NXRect nxrResult; /* the Answer! */ static int nCurStep = 0; /* find a good top-left coord */ nxpTopLeft.x = INITIAL_X + nCurStep * OFFSET; nxpTopLeft.y = INITIAL_Y + nCurStep * OFFSET; if (++nCurStep > MAX_STEPS) nCurStep = 0; /* find window height using nxrTemp */ nxrTemp.size.width = width; nxrTemp.size.height = height; nxrTemp.origin.x = nxrTemp.origin.y = 0; [Window getFrameRect:&nxrWinHeight forContentRect:&nxrTemp style:NX_TITLEDSTYLE]; [NXApp getScreenSize:&nxsScreen]; /* find the lower-left coord */ nxrResult.origin.x = nxpTopLeft.x; nxrResult.origin.y = nxsScreen.height - nxrWinHeight.size.height - nxpTopLeft.y; nxrResult.size.width = width; nxrResult.size.height = height; return (&nxrResult); } @end