Annotation of Examples/AppKit/Graph/RotatorCamera.m, revision 1.1.1.1

1.1       root        1: 
                      2: /*
                      3:     RotatorCamera.m
                      4: 
                      5:     RotatorCamera is an N3DCamera that tracks the mouse to rotate the
                      6:     contents of the camera using a N3DRotator.
                      7: 
                      8:     You may freely copy, distribute, and reuse the code in this example.
                      9:     NeXT disclaims any warranty of any kind, expressed or implied, as to its
                     10:     fitness for any particular use.
                     11: */
                     12: 
                     13: #import "Graph.h"
                     14: 
                     15: #define MOUSE_MASK (NX_LMOUSEDOWNMASK|NX_LMOUSEDRAGGEDMASK|NX_LMOUSEUPMASK)
                     16: 
                     17: @implementation RotatorCamera
                     18: 
                     19: /*
                     20:  * As we track the mouse, we use a N3DRotator object to calculate the new
                     21:  * viewing transforms, and then apply those to the camera's world shape.
                     22:  * If our window's delegate is interested, we notify it that we've changed
                     23:  * the document.
                     24:  */
                     25: - mouseDown:(NXEvent *)event {
                     26:     N3DRotator *rotator = [[N3DRotator allocFromZone:[self zone]] initWithCamera:self];
                     27:     RtMatrix rotationXForm;
                     28:     RtMatrix inverseRotationXForm;
                     29:     NXEvent newEvent;
                     30:     NXPoint oldLocation, newLocation;
                     31: 
                     32:     oldLocation = event->location;
                     33:     [self convertPoint:&oldLocation fromView:nil];
                     34:     [window addToEventMask:NX_LMOUSEDRAGGEDMASK];
                     35:     do {
                     36:        newEvent = *[NXApp getNextEvent:MOUSE_MASK];
                     37:        newLocation = newEvent.location;
                     38:        [self convertPoint:&newLocation fromView:nil];
                     39:        if (oldLocation.x != newLocation.x || oldLocation.y != newLocation.y) {
                     40:            [rotator trackMouseFrom:&oldLocation to:&newLocation
                     41:                rotationMatrix:rotationXForm andInverse:inverseRotationXForm];
                     42:            [worldShape concatTransformMatrix:rotationXForm premultiply:NO];
                     43:            [self display];
                     44:            if ([[window delegate] respondsTo:@selector(docChanged)])
                     45:                [[window delegate] docChanged];
                     46:        }
                     47:        oldLocation = newLocation;
                     48:     } while (newEvent.type != NX_LMOUSEDOWN && newEvent.type != NX_LMOUSEUP);
                     49:     [rotator free];
                     50:     return self;
                     51: }
                     52: 
                     53: @end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.