X-Git-Url: https://git.yukkurigames.com/?p=enjoyable.git;a=blobdiff_plain;f=NJOutputMouseScroll.m;h=812685f527de245846749a33bd9b42d5a37fb4b0;hp=4aa614db0aa3cfe75e8ed1c3ef3337ac6174b287;hb=b8c30e0c06effb8f4a937378e5c4cf8a22f40c59;hpb=844a57be52a2e243832e3d83d148fa3cea6d5ad1 diff --git a/NJOutputMouseScroll.m b/NJOutputMouseScroll.m index 4aa614d..812685f 100644 --- a/NJOutputMouseScroll.m +++ b/NJOutputMouseScroll.m @@ -7,51 +7,47 @@ #import "NJOutputMouseScroll.h" -@implementation NJOutputMouseScroll { - int sign; -} +@implementation NJOutputMouseScroll + (NSString *)serializationCode { return @"mouse scroll"; } - (NSDictionary *)serialize { - return @{ @"type": self.class.serializationCode, @"amount": @(_amount) }; + return @{ @"type": self.class.serializationCode, + @"direction": @(_direction), + @"speed": @(_speed) + }; } + (NJOutput *)outputDeserialize:(NSDictionary *)serialization withMappings:(NSArray *)mappings { - NJOutputMouseScroll *output = [[NJOutputMouseScroll alloc] init]; - output.amount = [serialization[@"amount"] intValue]; - return output; + 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.magnitude) { + if (!self.speed) { CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitLine, 1, - _amount); + _direction); CGEventPost(kCGHIDEventTap, scroll); CFRelease(scroll); } } - (BOOL)update:(NJDeviceController *)jc { - if (fabsf(self.magnitude) < 0.01f) { - sign = 0; + if (self.magnitude < 0.05f) return NO; // dead zone - } - // If the input crossed over High/Low, this output 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); + int amount = (int)(_speed * self.magnitude * _direction); CGEventRef scroll = CGEventCreateScrollWheelEvent(NULL, kCGScrollEventUnitPixel, 1, @@ -62,8 +58,4 @@ return YES; } -- (BOOL)isContinuous { - return YES; -} - @end