Mouse improvements. Segment and snap the mouse move and scroll speed for easier match...
[enjoyable.git] / Classes / NJOutputMouseButton.m
index bc286bd..c9fe0eb 100644 (file)
 - (void)trigger {
     CGFloat height = NSScreen.mainScreen.frame.size.height;
     NSPoint mouseLoc = NSEvent.mouseLocation;
-    CGEventType eventType = (_button == kCGMouseButtonLeft) ? kCGEventLeftMouseDown : kCGEventRightMouseDown;
+    CGEventType eventType = _button == kCGMouseButtonLeft ? kCGEventLeftMouseDown
+                          : _button == kCGMouseButtonRight ? kCGEventRightMouseDown
+                          : kCGEventOtherMouseDown;
     CGEventRef click = CGEventCreateMouseEvent(NULL,
                                                eventType,
                                                CGPointMake(mouseLoc.x, height - mouseLoc.y),
                                                _button);
 
     if (clickCount >= 3 || [upTime compare:[NSDate date]] == NSOrderedAscending
-        || !CGPointEqualToPoint(NSEvent.mouseLocation, clickPosition))
+        || !CGPointEqualToPoint(mouseLoc, clickPosition))
         clickCount = 1;
     else
         ++clickCount;
     CGEventSetIntegerValueField(click, kCGMouseEventClickState, clickCount);
-    
     CGEventPost(kCGHIDEventTap, click);
     CFRelease(click);
+    clickPosition = mouseLoc;
 }
 
 - (void)untrigger {
     upTime = [NJOutputMouseButton dateWithClickInterval];
-    clickPosition = NSEvent.mouseLocation;
+    NSPoint mouseLoc = NSEvent.mouseLocation;
     CGFloat height = NSScreen.mainScreen.frame.size.height;
-    CGEventType eventType = (_button == kCGMouseButtonLeft) ? kCGEventLeftMouseUp : kCGEventRightMouseUp;
+    CGEventType eventType = _button == kCGMouseButtonLeft ? kCGEventLeftMouseUp
+                          : _button == kCGMouseButtonRight ? kCGEventRightMouseUp
+                          : kCGEventOtherMouseUp;
     CGEventRef click = CGEventCreateMouseEvent(NULL,
                                                eventType,
-                                               CGPointMake(clickPosition.x, height - clickPosition.y),
+                                               CGPointMake(mouseLoc.x, height - mouseLoc.y),
                                                _button);
     CGEventSetIntegerValueField(click, kCGMouseEventClickState, clickCount);
     CGEventPost(kCGHIDEventTap, click);
     CFRelease(click);
 }
 
+- (int)humanIndexedButton {
+    switch (_button) {
+        case kCGMouseButtonLeft: return 0;
+        case kCGMouseButtonCenter: return 1;
+        case kCGMouseButtonRight: return 2;
+        default: return 0;
+    }
+}
+
+- (void)setHumanIndexedButton:(int)humanIndexedButton {
+    switch (humanIndexedButton) {
+        case 0: _button = kCGMouseButtonLeft; break;
+        case 1: _button = kCGMouseButtonCenter; break;
+        case 2: _button = kCGMouseButtonRight; break;
+        default: _button = kCGMouseButtonLeft;
+    }
+}
+
 @end