Clean up root folder.
[enjoyable.git] / Classes / NJOutputMouseScroll.m
diff --git a/Classes/NJOutputMouseScroll.m b/Classes/NJOutputMouseScroll.m
new file mode 100644 (file)
index 0000000..812685f
--- /dev/null
@@ -0,0 +1,61 @@
+//
+//  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