From 1bb3f553caac2b6b74380bd20ddc4bb1ff22abb2 Mon Sep 17 00:00:00 2001 From: Joe Wreschnig Date: Fri, 1 Mar 2013 19:58:26 +0100 Subject: [PATCH] Analog mouse scrolling. --- TargetMouseScroll.m | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/TargetMouseScroll.m b/TargetMouseScroll.m index d840ba1..6595628 100644 --- a/TargetMouseScroll.m +++ b/TargetMouseScroll.m @@ -7,7 +7,9 @@ #import "TargetMouseScroll.h" -@implementation TargetMouseScroll +@implementation TargetMouseScroll { + int sign; +} + (NSString *)serializationCode { return @"mscroll"; @@ -23,13 +25,45 @@ target.amount = [serialization[@"amount"] intValue]; return target; } --(void) trigger { + +- (void)trigger { + if (!self.magnitude) { + CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, + kCGScrollEventUnitLine, + 1, + _amount); + CGEventPost(kCGHIDEventTap, scroll); + CFRelease(scroll); + } +} + +- (BOOL)update:(JoystickController *)jc { + if (fabsf(self.magnitude) < 0.01f) { + sign = 0; + return NO; // dead zone + } + + // If the action crossed over High/Low, this target is done. + if (!sign) + sign = self.magnitude < 0 ? -1 : 1; + else if (sign / self.magnitude < 0) { + sign = 0; + return NO; + } + + int amount = (int)(16.f * fabsf(self.magnitude) * _amount); CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, - kCGScrollEventUnitLine, + kCGScrollEventUnitPixel, 1, - _amount); + amount); CGEventPost(kCGHIDEventTap, scroll); CFRelease(scroll); + + return YES; +} + +- (BOOL)isContinuous { + return YES; } @end -- 2.30.2