diff options
author | David Jeannot <djeannot24@gmail.com> | 2012-01-20 22:31:00 -0500 |
---|---|---|
committer | Russ Cox <rsc@swtch.com> | 2012-01-20 22:31:00 -0500 |
commit | f4792e43aef14341bb40f32e8583bd4731e1dcb4 (patch) | |
tree | 3e97d35d559c316c8532d874c527a33e1fdf8459 | |
parent | 5d434a3ff3426bfdc1a98da2543b1345a475ba67 (diff) | |
download | plan9port-f4792e43aef14341bb40f32e8583bd4731e1dcb4.tar.gz plan9port-f4792e43aef14341bb40f32e8583bd4731e1dcb4.tar.bz2 plan9port-f4792e43aef14341bb40f32e8583bd4731e1dcb4.zip |
devdraw: enable gestures on OS X
Remove swipe gestures.
Keep only 2-finger pinching and 3-finger tapping.
R=rsc
CC=plan9port.codebot
http://codereview.appspot.com/5498094
-rw-r--r-- | src/cmd/devdraw/cocoa-screen.m | 191 |
1 files changed, 8 insertions, 183 deletions
diff --git a/src/cmd/devdraw/cocoa-screen.m b/src/cmd/devdraw/cocoa-screen.m index 0f37d715..97ddd80c 100644 --- a/src/cmd/devdraw/cocoa-screen.m +++ b/src/cmd/devdraw/cocoa-screen.m @@ -102,8 +102,6 @@ struct int mbuttons; NSPoint mpos; int mscroll; - int undo; - int touchevent; int willactivate; } in; @@ -134,8 +132,6 @@ static NSCursor* makecursor(Cursor*); } - (void)windowDidBecomeKey:(id)arg { - in.touchevent = 0; - getmousepos(); sendmouse(); } @@ -506,7 +502,6 @@ static void updatecursor(void); - (void)keyDown:(NSEvent*)e{ getkeyboard(e);} - (void)flagsChanged:(NSEvent*)e{ getkeyboard(e);} -- (void)swipeWithEvent:(NSEvent*)e{ getgesture(e);} - (void)magnifyWithEvent:(NSEvent*)e{ getgesture(e);} - (void)touchesBeganWithEvent:(NSEvent*)e @@ -779,57 +774,20 @@ getmouse(NSEvent *e) sendmouse(); } -#define Minpinch 0.050 - -enum -{ - Left = -1, - Right = +1, - Up = +2, - Down = -2, -}; - -static int -getdir(int dx, int dy) -{ - return dx + 2*dy; -} - -static void interpretswipe(int); +#define Minpinch 0.02 static void getgesture(NSEvent *e) { - static float sum; - int dir; - - if(usegestures == 0) - return; - switch([e type]){ - case NSEventTypeMagnify: - sum += [e magnification]; - if(fabs(sum) > Minpinch){ + if(fabs([e magnification]) > Minpinch) togglefs(); - sum = 0; - } - break; - - case NSEventTypeSwipe: - dir = getdir(-[e deltaX], [e deltaY]); - - if(in.touchevent) - if(dir==Up || dir==Down) - break; - interpretswipe(dir); break; } } static void sendclick(int); -static void sendchord(int, int); -static void sendcmd(int); static uint msec(void) @@ -837,43 +795,16 @@ msec(void) return nsec()/1000000; } -#define Inch 72 -#define Cm Inch/2.54 - -#define Mindelta 0.0*Cm -#define Xminswipe 0.5*Cm -#define Yminswipe 0.1*Cm - -enum -{ - Finger = 1, - Msec = 1, - - Maxtap = 400*Msec, - Maxtouch = 3*Finger, -}; - static void gettouch(NSEvent *e, int type) { - static NSPoint delta; - static NSTouch *toucha[Maxtouch]; - static NSTouch *touchb[Maxtouch]; - static int done, ntouch, odir, tapping; + static int tapping; static uint taptime; - NSArray *a; - NSPoint d; NSSet *set; - NSSize s; - int dir, i, p; - - if(usegestures == 0) - return; + int p; switch(type){ - case NSTouchPhaseBegan: - in.touchevent = 1; p = NSTouchPhaseTouching; set = [e touchesMatchingPhase:p inView:nil]; if(set.count == 3){ @@ -882,80 +813,19 @@ gettouch(NSEvent *e, int type) }else if(set.count > 3) tapping = 0; - return; + break; case NSTouchPhaseMoved: - p = NSTouchPhaseMoved; - set = [e touchesMatchingPhase:p inView:nil]; - a = [set allObjects]; - if(set.count > Maxtouch) - return; - if(ntouch==0){ - ntouch = set.count; - for(i=0; i<ntouch; i++){ -// assert(toucha[i] == nil); - toucha[i] = [[a objectAtIndex:i] retain]; - } - return; - } - if(ntouch != set.count) - break; - if(done) - return; - - d = NSMakePoint(0,0); - for(i=0; i<ntouch; i++){ -// assert(touchb[i] == nil); - touchb[i] = [a objectAtIndex:i]; - d.x += touchb[i].normalizedPosition.x; - d.y += touchb[i].normalizedPosition.y; - d.x -= toucha[i].normalizedPosition.x; - d.y -= toucha[i].normalizedPosition.y; - } - s = toucha[0].deviceSize; - d.x = d.x/ntouch * s.width; - d.y = d.y/ntouch * s.height; - if(fabs(d.x)>Mindelta || fabs(d.y)>Mindelta){ - tapping = 0; - if(ntouch != 3){ - done = 1; - goto Return; - } - delta = NSMakePoint(delta.x+d.x, delta.y+d.y); - d = NSMakePoint(fabs(delta.x), fabs(delta.y)); - if(d.x>Xminswipe || d.y>Yminswipe){ - if(d.x > d.y) - dir = delta.x>0? Right : Left; - else - dir = delta.y>0? Up : Down; - if(dir != odir){ -// if(ntouch == 3) - if(dir==Up || dir==Down) - interpretswipe(dir); - odir = dir; - } - goto Return; - } - for(i=0; i<ntouch; i++){ - [toucha[i] release]; - toucha[i] = [touchb[i] retain]; - } - } -Return: - for(i=0; i<ntouch; i++) - touchb[i] = nil; - return; + tapping = 0; + break; case NSTouchPhaseEnded: p = NSTouchPhaseTouching; set = [e touchesMatchingPhase:p inView:nil]; if(set.count == 0){ - if(tapping && msec()-taptime<Maxtap) + if(tapping && msec()-taptime<400) sendclick(2); - odir = 0; tapping = 0; - in.undo = 0; - in.touchevent = 0; } break; @@ -965,40 +835,6 @@ Return: default: panic("gettouch: unexpected event type"); } - for(i=0; i<ntouch; i++){ - [toucha[i] release]; - toucha[i] = nil; - } - delta = NSMakePoint(0,0); - done = 0; - ntouch = 0; -} - -static void -interpretswipe(int dir) -{ - if(dir == Left) - sendcmd('x'); - else - if(dir == Right) - sendcmd('v'); - else - if(dir == Up) - sendcmd('c'); - else - if(dir == Down) - sendchord(2,1); -} - -static void -sendcmd(int c) -{ - if(in.touchevent && (c=='x' || c=='v')){ - if(in.undo) - c = 'z'; - in.undo = ! in.undo; - } - keystroke(Kcmd+c); } static void @@ -1011,17 +847,6 @@ sendclick(int b) } static void -sendchord(int b1, int b2) -{ - in.mbuttons = b1; - sendmouse(); - in.mbuttons |= b2; - sendmouse(); - in.mbuttons = 0; - sendmouse(); -} - -static void sendmouse(void) { NSSize size; |