This is ShapeView.m in view mode; [Download] [Up]
/* Generated by Project Builder */ #import <appkit/appkit.h> #import "ShapeView.h" @implementation ShapeView - initFrame:(NXRect *)frameRect { [super initFrame:frameRect]; angle = 360; xScale = 1; yScale = 1; x = 50; y = 50; return self; } - translate:sender { // sender is a matrix: thus, obtain // cell by asking the matrix // for the selected cell id cell = [sender selectedCell]; int tag = [cell tag]; switch(tag) { case 0: x = [cell floatValue]; break; case 1: y = [cell floatValue]; break; } // display view with updated values [self display]; return self; } - scale:sender { // sender is a matrix: thus, obtain // cell by asking the matrix // for the selected cell id cell = [sender selectedCell]; int tag = [cell tag]; switch(tag) { case 0: xScale = [cell floatValue]; break; case 1: yScale = [cell floatValue]; break; } // display view with updated values [self display]; return self; } - rotate:sender { angle = [sender floatValue]; [self display]; return self; } - erase { // &bounds contains the view's location // and size expressed in its own coordinate // system: by drawing in bounds, the view // avoids unnecessary drawing PSsetgray(NX_DKGRAY); NXRectFill(&bounds); return self; } - mouseDown:(NXEvent *)theEvent { char buffer[30]; // round co-ordinates to 1 digit // after decimal point // print co-ordinates in window co-ordinates sprintf(buffer, "%.1f", theEvent->location.x); [[downWindowMatrix cellAt:0 :0] setStringValue:buffer]; sprintf(buffer, "%.1f", theEvent->location.y); [[downWindowMatrix cellAt:1 :0] setStringValue:buffer]; // convert from window co-ordinates to // view co-ordinates [self convertPoint:&theEvent->location fromView:nil]; // lock focus so graphics commands // are applied to this view [self lockFocus]; // erase old instance drawing PSnewinstance(); // start new instance drawing to draw directly // to the window PSsetinstance(YES); // select font otherwise output // will be upside down PSselectfont("Times-Roman", 16.0); // print co-ordinates on view PSmoveto(theEvent->location.x, theEvent->location.y); sprintf(buffer, "%.1f, %.1f", theEvent->location.x, theEvent->location.y); // set color to light gray PSsetgray(NX_LTGRAY); // show the string PSshow(buffer); PSsetinstance(NO); // balance lockFocus with unlockFocus [self unlockFocus]; return self; } - mouseUp:(NXEvent *)theEvent { char buffer[40]; sprintf(buffer, "%.1f", theEvent->location.x); [[upWindowMatrix cellAt:0 :0] setStringValue:buffer]; sprintf(buffer, "%.1f", theEvent->location.y); [[upWindowMatrix cellAt:1 :0] setStringValue:buffer]; // convert from window co-ordinates to // view co-ordinates [self lockFocus]; [self convertPoint:&theEvent->location fromView:nil]; // don't use PSnewinstance(), since we don't // want to erase the drawing from mouseDown: // start new instance drawing to draw directly // to the window PSsetinstance(YES); // select font otherwise output // will be upside down PSselectfont("Times-Roman", 16.0); // print co-ordinates on view PSmoveto(theEvent->location.x, theEvent->location.y); sprintf(buffer, "%.1f, %.1f", theEvent->location.x, theEvent->location.y); // set color to black PSsetgray(NX_BLACK); // show the string PSshow(buffer); PSsetinstance(NO); // balance lockFocus with unlockFocus [self unlockFocus]; return self; } -(BOOL)acceptsFirstMouse { // allows the view to use the first // mouse click that activates the window return YES; } @end
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.