This is DragView.m in view mode; [Download] [Up]
/************************************************** * SynthBuilder * Copyright 1993 Nick Porcaro All Rights Reserved **************************************************/ #import <stdlib.h> #import <appkit/Matrix.h> #import <appkit/Panel.h> #import <dpsclient/psops.h> #import <dpsclient/wraps.h> #import "ViewController.h" #import "DragView.h" #import "FakeSynthPatch.h" @implementation DragView +initialize { return self; } - init { [super init]; theImage = nil; return self; } - setPatch:aPatch { thePatch = aPatch; return self; } - getPatch { return thePatch; } - setViewController:aVC { theViewController = aVC; return self; } - showImage:anImage { NXRect *rect; NXPoint *thePoint; rect = (NXRect *) NXZoneMalloc([self zone], sizeof (*rect)); if (anImage) { theImage = anImage; } else { return self; } if (! [theViewController getFocusLock]) { return self; } [self lockFocus]; rect->origin.x = frame.origin.x; rect->origin.y = frame.origin.y; rect->size.width = frame.size.width; rect->size.height = frame.size.height; [self convertRectFromSuperview:rect]; PSsetgray(NX_LTGRAY); NXRectFill(rect); thePoint = (NXPoint *) NXZoneMalloc([self zone], sizeof (*thePoint)); thePoint->x = thePoint->y = 0.0; [theImage composite:NX_SOVER toPoint:thePoint]; NXPing(); [self unlockFocus]; return self; } - blank { NXRect rect[1]; if (! [theViewController getFocusLock]) { return self; } [self lockFocus]; rect->origin.x = frame.origin.x; rect->origin.y = frame.origin.y; rect->size.width = frame.size.width; rect->size.height = frame.size.height; [self convertRectFromSuperview:rect]; PSsetgray(NX_LTGRAY); NXRectFill(rect); NXPing(); [self unlockFocus]; return self; } - drawSelf:(const NXRect *)rects :(int)rectCount { return self; } - mouseDown:(NXEvent *)theEvent { if (theImage) { [window addToEventMask:NX_LMOUSEDRAGGEDMASK]; whereGrabbed = theEvent->location; [self convertPoint:&whereGrabbed fromView:nil]; } return self; } - mouseDragged:(NXEvent *)theEvent { NXPoint thePoint; if (!theImage) { return self; } [superview lockFocus]; PSnewinstance(); PSsetinstance(YES); thePoint.x = theEvent->location.x-whereGrabbed.x; thePoint.y = theEvent->location.y-whereGrabbed.y; [theImage composite:NX_SOVER toPoint:&thePoint]; PSsetinstance(NO); [superview unlockFocus]; return self; } - mouseUp:(NXEvent *)theEvent { NXPoint thePoint; /* Disallow adding new elements when the * sound is on */ if (!theImage) { return self; } if ([thePatch hitTest:&theEvent->location]) { thePoint.x = theEvent->location.x; thePoint.y = theEvent->location.y; thePoint.x = thePoint.x-whereGrabbed.x+1; thePoint.y = thePoint.y-whereGrabbed.y+1; [thePatch deallocatePatch:self]; [thePatch convertPoint:&thePoint fromView:nil]; [window removeFromEventMask:NX_LMOUSEDRAGGEDMASK]; [thePatch addFakeUG:[theViewController currentObject] at:thePoint]; } PSnewinstance(); return self; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.