X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=Classes%2FNJOutputMouseScroll.m;h=b2775a8017a6e21e3b39ad910c26de0f67dfb0bd;hp=99cec4a2f7724972e3a056b9a3ed97bc0790068f;hb=93d9951d6bd16b37e88b8fb6c38bc4afd6c9401e;hpb=4dabc5c754efa54adb2dc57063c7294b1c2e4654 diff --git a/Classes/NJOutputMouseScroll.m b/Classes/NJOutputMouseScroll.m index 99cec4a..b2775a8 100644 --- a/Classes/NJOutputMouseScroll.m +++ b/Classes/NJOutputMouseScroll.m @@ -16,42 +16,51 @@ - (NSDictionary *)serialize { return @{ @"type": self.class.serializationCode, @"direction": @(_direction), - @"speed": @(_speed) + @"speed": @(_speed), + @"smooth": @(_smooth), }; } -+ (NJOutput *)outputDeserialize:(NSDictionary *)serialization - withMappings:(NSArray *)mappings { ++ (NJOutput *)outputDeserialize:(NSDictionary *)serialization { NJOutputMouseScroll *output = [[NJOutputMouseScroll alloc] init]; output.direction = [serialization[@"direction"] intValue]; output.speed = [serialization[@"speed"] floatValue]; + output.smooth = [serialization[@"smooth"] boolValue]; return output; } - (BOOL)isContinuous { - return !!self.speed; + return _smooth; +} + +- (int)wheel:(int)n { + int amount = abs(_direction) == n ? _direction / n : 0; + if (self.smooth) + amount *= _speed * self.magnitude; + return amount; } - (void)trigger { - if (!self.speed) { + if (!_smooth) { CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, - 1, - _direction); + 2, + [self wheel:1], + [self wheel:2]); CGEventPost(kCGHIDEventTap, scroll); CFRelease(scroll); } } -- (BOOL)update:(NJDeviceController *)jc { +- (BOOL)update:(NJInputController *)jc { if (self.magnitude < 0.05f) return NO; // dead zone - int amount = (int)(_speed * self.magnitude * _direction); CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitPixel, - 1, - amount); + 2, + [self wheel:1], + [self wheel:2]); CGEventPost(kCGHIDEventTap, scroll); CFRelease(scroll);