--- /dev/null
+//
+// 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