Annotation of Examples/DistributedObjects/remoteSpot/SpotView.m, revision 1.1

1.1     ! root        1: 
        !             2: #import "SpotView.h"
        !             3: #import "Spot.h"
        !             4: #import "Thinker.h"
        !             5: 
        !             6: @implementation SpotView
        !             7: 
        !             8: - (BOOL) acceptsFirstMouse
        !             9: {      return YES;
        !            10: }
        !            11: 
        !            12: - initFrame:(const NXRect *)r
        !            13: {
        !            14:        [super initFrame:r];
        !            15:        [self allocateGState];          // For faster lock/unlockFocus
        !            16:        return self;
        !            17: }
        !            18: 
        !            19: - lateInit
        !            20: {
        !            21:        server = [myThinker server];
        !            22:        return self;
        !            23: }
        !            24: 
        !            25: - mouseDown:(NXEvent *)theEvent
        !            26: {
        !            27:     NXPoint mouseLocation, offset;
        !            28:        id spotToMove = nil;
        !            29:        int     looping = YES, oldMask;
        !            30: 
        !            31:        oldMask = [window addToEventMask:NX_MOUSEDRAGGEDMASK];
        !            32:        do {
        !            33:                mouseLocation = theEvent->location;
        !            34:                [self convertPoint:&mouseLocation fromView:nil];
        !            35:                
        !            36:                switch (theEvent->type)
        !            37:                {
        !            38:                        case NX_MOUSEDOWN:
        !            39:                                spotToMove = [server getSpotForPoint:mouseLocation
        !            40:                                                                spotLocation:&offset];
        !            41:                                if (!spotToMove)
        !            42:                                {
        !            43:                                        looping = NO;
        !            44:                                        break;
        !            45:                                }
        !            46:                                offset.x = mouseLocation.x - offset.x;
        !            47:                                offset.y = mouseLocation.y - offset.y;
        !            48:                                break;
        !            49: 
        !            50:                        case NX_MOUSEUP:
        !            51:                                looping = NO;
        !            52:                                // now fall into mousedragged implementation
        !            53: 
        !            54:                        case NX_MOUSEDRAGGED:
        !            55:                                mouseLocation.x -= offset.x;
        !            56:                                mouseLocation.y -= offset.y;
        !            57:                                if (![spotToMove setLocation:mouseLocation])
        !            58:                                {
        !            59:                                        looping = NO;
        !            60:                                        spotToMove = nil;
        !            61:                                }
        !            62:                                break;
        !            63:                }
        !            64:                
        !            65:        } while (looping && (theEvent = [NXApp getNextEvent:
        !            66:                        NX_MOUSEUPMASK|NX_MOUSEDRAGGEDMASK]));
        !            67: 
        !            68:        [window setEventMask:oldMask];
        !            69: 
        !            70:        [spotToMove unlock];
        !            71:        // if (![myThinker isServer])
        !            72:        if ([spotToMove isProxy])
        !            73:        {
        !            74:                // this actually frees the local proxy but may or may not
        !            75:                // free the ref-counted spot on the server side
        !            76: 
        !            77:                [spotToMove free];
        !            78:        }
        !            79: 
        !            80:     return self;
        !            81: }
        !            82: 
        !            83: - drawSelf:(const NXRect *) rects :(int)rectCount
        !            84: {
        !            85:        int     i, n;
        !            86:        id aSpot;
        !            87:        NXPoint pnt;
        !            88: 
        !            89:        PSsetgray(NX_WHITE);
        !            90:        NXRectFill(&bounds);
        !            91: 
        !            92:        // the list is retrieved bycopy so it is local, as are
        !            93:        // all the objects in the list
        !            94: 
        !            95:        spotList = [myThinker spotList];
        !            96:        
        !            97:        n = [spotList count];
        !            98:        
        !            99:        for (i = 0; i < n; i++)
        !           100:        {
        !           101:                aSpot = [spotList objectAt:i];
        !           102:                NXSetColor([aSpot color]);
        !           103:                pnt = [aSpot location];
        !           104:                PSarc(pnt.x+15, pnt.y+15, 15, 0, 360);
        !           105:                PSfill();
        !           106:        }
        !           107:        return self;
        !           108: }
        !           109: 
        !           110: 
        !           111: @end

unix.superglobalmegacorp.com

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