// // NJOutputMouseScroll.m // Enjoy // // Created by Yifeng Huang on 7/28/12. // #import "NJOutputMouseScroll.h" @implementation NJOutputMouseScroll + (NSString *)serializationCode { return @"mouse scroll"; } - (NSDictionary *)serialize { return @{ @"type": self.class.serializationCode, @"direction": @(_direction), @"speed": @(_speed) }; } + (NJOutput *)outputDeserialize:(NSDictionary *)serialization withMappings:(NSArray *)mappings { NJOutputMouseScroll *output = [[NJOutputMouseScroll alloc] init]; output.direction = [serialization[@"direction"] intValue]; output.speed = [serialization[@"direction"] floatValue]; return output; } - (BOOL)isContinuous { return !!self.speed; } - (void)trigger { if (!self.speed) { CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, 1, _direction); CGEventPost(kCGHIDEventTap, scroll); CFRelease(scroll); } } - (BOOL)update:(NJDeviceController *)jc { if (self.magnitude < 0.05f) return NO; // dead zone int amount = (int)(_speed * self.magnitude * _direction); CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitPixel, 1, amount); CGEventPost(kCGHIDEventTap, scroll); CFRelease(scroll); return YES; } @end