URI: 
       tdevdraw: cocoa fixes, bigarrow support (thanks Marius Eriksen) - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit b4d0ac961262aace74431d78fe952a404a6f25a1
   DIR parent 813b3eea8b469a6d603f13a51a8afb8e3dae3a32
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Sun, 23 Oct 2011 18:47:29 -0400
       
       devdraw: cocoa fixes, bigarrow support (thanks Marius Eriksen)
       
       Diffstat:
         M src/cmd/devdraw/cocoa-screen.m      |      35 +++++++++++++++++++++++++++++--
         A src/cmd/devdraw/cursor.c            |      16 ++++++++++++++++
         M src/cmd/devdraw/mkwsysrules.sh      |       2 +-
       
       3 files changed, 50 insertions(+), 3 deletions(-)
       ---
   DIR diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m
       t@@ -30,6 +30,11 @@ AUTOFRAMEWORK(Cocoa)
        
        int usegestures = 0;
        int useoldfullscreen = 0;
       +int usebigarrow = 0;
       +
       +extern Cursor bigarrow;
       +
       +void setcursor0(Cursor *c);
        
        void
        usage(void)
       t@@ -64,6 +69,9 @@ threadmain(int argc, char **argv)
                case 'g':
                        usegestures = 1;
                        break;
       +        case 'b':
       +                usebigarrow = 1;
       +                break;
                default:
                        usage();
                }ARGEND
       t@@ -71,6 +79,11 @@ threadmain(int argc, char **argv)
                if(OSX_VERSION < 100700)
                        [NSAutoreleasePool new];
        
       +        // Reset cursor to ensure we start
       +        // with bigarrow.
       +        if(usebigarrow)
       +                setcursor0(nil);
       +
                [NSApplication sharedApplication];
                [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
                [NSApp setDelegate:[appdelegate new]];
       t@@ -163,6 +176,7 @@ static void togglefs(void);
        + (void)calldrawimg:(id)arg{ drawimg();}
        + (void)callflushwin:(id)arg{ flushwin();}
        + (void)callmakewin:(id)arg{ makewin();}
       ++ (void)callsetcursor0:(id)arg{ setcursor0([[arg autorelease] pointerValue]);}
        - (void)calltogglefs:(id)arg{ togglefs();}
        @end
        
       t@@ -453,13 +467,15 @@ static void gettouch(NSEvent*, int);
        {
                NSCursor *c;
        
       +        [super resetCursorRects];
       +
                qlock(&win.cursorl);
        
                c = win.cursor;
                if(c == nil)
                        c = [NSCursor arrowCursor];
       -        [self addCursorRect:[self bounds] cursor:c];
        
       +        [self addCursorRect:[self bounds] cursor:c];
                qunlock(&win.cursorl);
        }
        - (BOOL)isFlipped
       t@@ -1128,7 +1144,16 @@ kicklabel(char *label)
        }
        
        void
       -setcursor(Cursor *c)
       +setcursor(Cursor *cursor)
       +{
       +        [appdelegate
       +                performSelectorOnMainThread:@selector(callsetcursor0:)
       +                withObject:[[NSValue valueWithPointer:cursor] retain]
       +                waitUntilDone:YES];
       +}
       +
       +void
       +setcursor0(Cursor *c)
        {
                NSBitmapImageRep *r;
                NSImage *i;
       t@@ -1142,6 +1167,10 @@ setcursor(Cursor *c)
                        [win.cursor release];
                        win.cursor = nil;
                }
       +
       +        if(c == nil && usebigarrow)
       +                c = &bigarrow;
       +
                if(c){
                        r = [[NSBitmapImageRep alloc]
                                initWithBitmapDataPlanes:nil
       t@@ -1167,9 +1196,11 @@ setcursor(Cursor *c)
        
                        win.cursor = [[NSCursor alloc] initWithImage:i hotSpot:p];
        
       +                [win.cursor set];
                        [i release];
                        [r release];
                }
       +
                qunlock(&win.cursorl);
                [WIN invalidateCursorRectsForView:win.content];
        }
   DIR diff --git a/src/cmd/devdraw/cursor.c b/src/cmd/devdraw/cursor.c
       t@@ -0,0 +1,16 @@
       +#include <u.h>
       +#include <libc.h>
       +#include <draw.h>
       +#include <cursor.h>
       +
       +Cursor bigarrow = {
       +        {0, 0},
       +        {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 
       +         0xFF, 0xF0, 0xFF, 0xF0, 0xFF, 0xF8, 0xFF, 0xFC, 
       +         0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFC, 
       +         0xF3, 0xF8, 0xF1, 0xF0, 0xE0, 0xE0, 0xC0, 0x40},
       +        {0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFC, 0x7F, 0xF0, 
       +         0x7F, 0xE0, 0x7F, 0xE0, 0x7F, 0xF0, 0x7F, 0xF8, 
       +         0x7F, 0xFC, 0x7F, 0xFE, 0x7F, 0xFC, 0x73, 0xF8, 
       +         0x61, 0xF0, 0x60, 0xE0, 0x40, 0x40, 0x00, 0x00},
       +};
   DIR diff --git a/src/cmd/devdraw/mkwsysrules.sh b/src/cmd/devdraw/mkwsysrules.sh
       t@@ -59,7 +59,7 @@ elif [ $WSYSTYPE = osx ]; then
                echo 'WSYSOFILES=$WSYSOFILES osx-screen-carbon-objc.o osx-draw.o osx-srv.o'
                echo 'MACARGV=macargv.o'
        elif [ $WSYSTYPE = osx-cocoa ]; then
       -        echo 'WSYSOFILES=$WSYSOFILES osx-draw.o cocoa-screen-objc.o cocoa-srv.o cocoa-thread.o'
       +        echo 'WSYSOFILES=$WSYSOFILES osx-draw.o cocoa-screen-objc.o cocoa-srv.o cocoa-thread.o cursor.o'
                echo 'MACARGV=macargv-objc.o'
        elif [ $WSYSTYPE = nowsys ]; then
                echo 'WSYSOFILES=nowsys.o'