This is DetectApp.m in view mode; [Download] [Up]
/* * (a) (C) 1990 by Adobe Systems Incorporated. All rights reserved. * * (b) If this Sample Code is distributed as part of the Display PostScript * System Software Development Kit from Adobe Systems Incorporated, * then this copy is designated as Development Software and its use is * subject to the terms of the License Agreement attached to such Kit. * * (c) If this Sample Code is distributed independently, then the following * terms apply: * * (d) This file may be freely copied and redistributed as long as: * 1) Parts (a), (d), (e) and (f) continue to be included in the file, * 2) If the file has been modified in any way, a notice of such * modification is conspicuously indicated. * * (e) PostScript, Display PostScript, and Adobe are registered trademarks of * Adobe Systems Incorporated. * * (f) THE INFORMATION BELOW IS FURNISHED AS IS, IS SUBJECT TO * CHANGE WITHOUT NOTICE, AND SHOULD NOT BE CONSTRUED * AS A COMMITMENT BY ADOBE SYSTEMS INCORPORATED. * ADOBE SYSTEMS INCORPORATED ASSUMES NO RESPONSIBILITY * OR LIABILITY FOR ANY ERRORS OR INACCURACIES, MAKES NO * WARRANTY OF ANY KIND (EXPRESS, IMPLIED OR STATUTORY) * WITH RESPECT TO THIS INFORMATION, AND EXPRESSLY * DISCLAIMS ANY AND ALL WARRANTIES OF MERCHANTABILITY, * FITNESS FOR PARTICULAR PURPOSES AND NONINFRINGEMENT * OF THIRD PARTY RIGHTS. */ /* * DetectApp.m * * This subclass of the application class performs the global * setup needed for the HitDetection application. The drawing * window is created as well as the window buffers for redrawing * and moving. * * Version: 2.0 * Author: Ken Fromm * History: * 03-07-91 Added this comment. */ #import "DetectApp.h" #import "DrawingView.h" #import "DrawingViewWraps.h" #import "DocView.h" #import "ScrollingView.h" #import <appkit/Matrix.h> #import <appkit/ScrollView.h> #import <appkit/ClipView.h> #import <appkit/Window.h> #import "HitPointView.h" #import <appkit/nextstd.h> static NXRect drawingRect = {0, 0, 612, 792}; static NXRect windowRect = {315, 270, 450, 500}; /* * Create a plain window the size of the rectangle passed in and * then insert a view into the window as a subview. A clip view * is swapped for the content view if addclipview is YES. The * ClipView is used for the alpha buffer, which holds the primary * drawing. The beta buffer does not need to scroll so a ClipView * is unnecessary. */ static id createBuffer(const NXRect *winRect, BOOL addclipview) { id buffer, clipview, window; NXRect contRect; contRect.origin.x = contRect.origin.y = 0; contRect.size = winRect->size; window = [[Window alloc] initContent:&contRect style:NX_PLAINSTYLE backing:NX_RETAINED buttonMask:0 defer:NO] ; buffer = [[[[View alloc] initFrame:&contRect] allocateGState] setClipping:NO]; if (addclipview) { clipview = [[[ClipView alloc] init] setFlipped:NO]; [clipview setDisplayOnScroll:NO]; [[window setContentView:clipview ] free]; [clipview setDocView:buffer]; } else [[window contentView] addSubview:buffer]; [window display]; return buffer; } /* Resize the buffers and their windows. Called when the window resizes. */ static void resizeBuffer(id buffer, const NXSize*newSize) { NXRect oldSize; [[buffer superview] getFrame:&oldSize]; if (newSize->width > oldSize.size.width || newSize->height > oldSize.size.height) { [[buffer window] sizeWindow:newSize->width :newSize->height]; [buffer sizeTo:newSize->width :newSize->height]; } } @implementation DetectApp + new { self = [super new]; hitsetting = 4.0; return self; } /* * Create the drawing window and place a scrollview as the content view. * A DocView instance is placed as the document view of the ClipView and then * a DrawingView instance is placed as a subview of DocView. The DocView * places the drawing view in the center of the window and draws the border * and the drop shadow when the drawing view is reduced and made smaller * than the size of the clip view. (The application is made the delegate of * the window in order to intercept the windowDidResize message and * resize the buffers.) */ - createWindow:(NXRect *) winRect { id scrollView, docView; NXRect tempRect; windowId = [[Window alloc] initContent:winRect style:NX_TITLEDSTYLE backing:NX_BUFFERED buttonMask:NX_RESIZEBUTTONMASK defer:NO]; [windowId setTitle:"Hit Detection"]; [Window getContentRect:&tempRect forFrameRect:winRect style:NX_TITLEDSTYLE]; scrollView = [[ScrollingView alloc] initFrame:&tempRect]; [scrollView setBorderType:SCROLLVIEW_BORDER]; drawingviewId = [[DrawingView alloc] initFrame:&drawingRect]; docView = [[[[DocView alloc] init] setClipping:NO] setScale:1.0]; [scrollView setDocView:docView]; [[docView superview] setFlipped:NO]; [docView addDrawView:drawingviewId]; [docView placeView:drawingviewId]; [drawingviewId createObject]; [[windowId setContentView:scrollView] free]; [windowId addToEventMask:WINDOW_MASK]; [windowId makeFirstResponder:drawingviewId]; [windowId setDelegate:self]; return self; } /* The window will free the its subviews. */ - free { [[bufferalphaId window] free]; [[bufferbetaId window] free]; [windowId free]; return [super free]; } - getBufferAlpha { return bufferalphaId; } - getBufferBeta { return bufferbetaId; } - getDrawingView { return drawingviewId; } /* * Places the buffers onscreen when the menu item is selected. * Strictly for instructional purposes only. */ - showBuffers:sender { if (!showbuffers) { [[bufferalphaId window] orderWindow:NX_ABOVE relativeTo:[windowId windowNum]]; [[bufferalphaId window] moveTo:10 :10]; [[bufferbetaId window] orderWindow:NX_ABOVE relativeTo:[windowId windowNum]]; [[sender selectedCell] setTitle:"Hide Buffers"]; [[bufferbetaId window] moveTo:560 :10]; } else { [[bufferalphaId window] orderOut:self]; [[bufferbetaId window] orderOut:self]; [[sender selectedCell] setTitle:"Show Buffers"]; } showbuffers = !showbuffers; return self; } - showWindow:sender { return [windowId makeKeyAndOrderFront:self]; } /* Sets the hit setting to the value. */ - setHitSetting:(float) value { hitsetting = value; return self; } /* * Returns an unscaled the hit setting. */ - (float) hitSetting { return hitsetting; } /* * Resizes the doc view and repositions the drawing view inside the doc view. */ - windowDidResize:sender { NXSize contSize; [[windowId contentView] getContentSize:&contSize]; resizeBuffer(bufferalphaId, &contSize); resizeBuffer(bufferbetaId, &contSize); [[drawingviewId superview] placeView:drawingviewId]; return self; } - appDidInit:sender { bufferalphaId = createBuffer(&windowRect, YES); bufferbetaId = createBuffer(&windowRect, NO); [self createWindow:&windowRect]; [windowId display]; [windowId makeKeyAndOrderFront:self]; return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.