// // TargetMouseScroll.m // Enjoy // // Created by Yifeng Huang on 7/28/12. // #import "TargetMouseScroll.h" @implementation TargetMouseScroll { int sign; } + (NSString *)serializationCode { return @"mscroll"; } - (NSDictionary *)serialize { return @{ @"type": @"mscroll", @"amount": @(_amount) }; } + (Target *)targetDeserialize:(NSDictionary *)serialization withConfigs:(NSArray *)configs { TargetMouseScroll *target = [[TargetMouseScroll alloc] init]; target.amount = [serialization[@"amount"] intValue]; return target; } - (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, kCGScrollEventUnitPixel, 1, amount); CGEventPost(kCGHIDEventTap, scroll); CFRelease(scroll); return YES; } - (BOOL)isContinuous { return YES; } @end