tdevdraw: cocoa fixes, bigarrow support (thanks Marius Eriksen) - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit b4d0ac961262aace74431d78fe952a404a6f25a1
parent 813b3eea8b469a6d603f13a51a8afb8e3dae3a32
Author: Russ Cox 
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(-)
---
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];
 }
diff --git a/src/cmd/devdraw/cursor.c b/src/cmd/devdraw/cursor.c
t@@ -0,0 +1,16 @@
+#include 
+#include 
+#include 
+#include 
+
+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},
+};
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'