You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
251 lines
7.3 KiB
251 lines
7.3 KiB
#import "RNGestureHandlerEvents.h"
|
|
|
|
#define SAFE_VELOCITY(velocity) @(isnan(velocity) ? 0 : velocity)
|
|
|
|
@implementation RNGestureHandlerEventExtraData
|
|
|
|
- (instancetype)initWithData:(NSDictionary *)data;
|
|
{
|
|
if ((self = [super init])) {
|
|
_data = data;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
|
|
withAbsolutePosition:(CGPoint)absolutePosition
|
|
withNumberOfTouches:(NSUInteger)numberOfTouches
|
|
{
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
|
|
@"x" : @(position.x),
|
|
@"y" : @(position.y),
|
|
@"absoluteX" : @(absolutePosition.x),
|
|
@"absoluteY" : @(absolutePosition.y),
|
|
@"numberOfPointers" : @(numberOfTouches)
|
|
}];
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forPosition:(CGPoint)position
|
|
withAbsolutePosition:(CGPoint)absolutePosition
|
|
withNumberOfTouches:(NSUInteger)numberOfTouches
|
|
withDuration:(NSUInteger)duration
|
|
{
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
|
|
@"x" : @(position.x),
|
|
@"y" : @(position.y),
|
|
@"absoluteX" : @(absolutePosition.x),
|
|
@"absoluteY" : @(absolutePosition.y),
|
|
@"numberOfPointers" : @(numberOfTouches),
|
|
@"duration" : @(duration)
|
|
}];
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forPan:(CGPoint)position
|
|
withAbsolutePosition:(CGPoint)absolutePosition
|
|
withTranslation:(CGPoint)translation
|
|
withVelocity:(CGPoint)velocity
|
|
withNumberOfTouches:(NSUInteger)numberOfTouches
|
|
{
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
|
|
@"x" : @(position.x),
|
|
@"y" : @(position.y),
|
|
@"absoluteX" : @(absolutePosition.x),
|
|
@"absoluteY" : @(absolutePosition.y),
|
|
@"translationX" : @(translation.x),
|
|
@"translationY" : @(translation.y),
|
|
@"velocityX" : SAFE_VELOCITY(velocity.x),
|
|
@"velocityY" : SAFE_VELOCITY(velocity.y),
|
|
@"numberOfPointers" : @(numberOfTouches)
|
|
}];
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forForce:(CGFloat)force
|
|
forPosition:(CGPoint)position
|
|
withAbsolutePosition:(CGPoint)absolutePosition
|
|
withNumberOfTouches:(NSUInteger)numberOfTouches
|
|
{
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
|
|
@"x" : @(position.x),
|
|
@"y" : @(position.y),
|
|
@"absoluteX" : @(absolutePosition.x),
|
|
@"absoluteY" : @(absolutePosition.y),
|
|
@"force" : @(force),
|
|
@"numberOfPointers" : @(numberOfTouches)
|
|
}];
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forPinch:(CGFloat)scale
|
|
withFocalPoint:(CGPoint)focalPoint
|
|
withVelocity:(CGFloat)velocity
|
|
withNumberOfTouches:(NSUInteger)numberOfTouches
|
|
{
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
|
|
@"scale" : @(scale),
|
|
@"focalX" : @(focalPoint.x),
|
|
@"focalY" : @(focalPoint.y),
|
|
@"velocity" : SAFE_VELOCITY(velocity),
|
|
@"numberOfPointers" : @(numberOfTouches)
|
|
}];
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forRotation:(CGFloat)rotation
|
|
withAnchorPoint:(CGPoint)anchorPoint
|
|
withVelocity:(CGFloat)velocity
|
|
withNumberOfTouches:(NSUInteger)numberOfTouches
|
|
{
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
|
|
@"rotation" : @(rotation),
|
|
@"anchorX" : @(anchorPoint.x),
|
|
@"anchorY" : @(anchorPoint.y),
|
|
@"velocity" : SAFE_VELOCITY(velocity),
|
|
@"numberOfPointers" : @(numberOfTouches)
|
|
}];
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forEventType:(RNGHTouchEventType)eventType
|
|
withChangedPointers:(NSArray<NSDictionary *> *)changedPointers
|
|
withAllPointers:(NSArray<NSDictionary *> *)allPointers
|
|
withNumberOfTouches:(NSUInteger)numberOfTouches
|
|
{
|
|
if (changedPointers == nil || allPointers == nil) {
|
|
changedPointers = @[];
|
|
allPointers = @[];
|
|
eventType = RNGHTouchEventTypeUndetermined;
|
|
}
|
|
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{
|
|
@"eventType" : @(eventType),
|
|
@"changedTouches" : changedPointers,
|
|
@"allTouches" : allPointers,
|
|
@"numberOfTouches" : @(numberOfTouches)
|
|
}];
|
|
}
|
|
|
|
+ (RNGestureHandlerEventExtraData *)forPointerInside:(BOOL)pointerInside
|
|
{
|
|
return [[RNGestureHandlerEventExtraData alloc] initWithData:@{@"pointerInside" : @(pointerInside)}];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation RNGestureHandlerEvent {
|
|
NSNumber *_handlerTag;
|
|
RNGestureHandlerState _state;
|
|
RNGestureHandlerEventExtraData *_extraData;
|
|
}
|
|
|
|
@synthesize viewTag = _viewTag;
|
|
@synthesize coalescingKey = _coalescingKey;
|
|
|
|
- (instancetype)initWithReactTag:(NSNumber *)reactTag
|
|
handlerTag:(NSNumber *)handlerTag
|
|
state:(RNGestureHandlerState)state
|
|
extraData:(RNGestureHandlerEventExtraData *)extraData
|
|
coalescingKey:(uint16_t)coalescingKey
|
|
{
|
|
if ((self = [super init])) {
|
|
_viewTag = reactTag;
|
|
_handlerTag = handlerTag;
|
|
_state = state;
|
|
_extraData = extraData;
|
|
_coalescingKey = coalescingKey;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
RCT_NOT_IMPLEMENTED(-(instancetype)init)
|
|
|
|
- (NSString *)eventName
|
|
{
|
|
return @"onGestureHandlerEvent";
|
|
}
|
|
|
|
- (BOOL)canCoalesce
|
|
{
|
|
return YES;
|
|
}
|
|
|
|
- (id<RCTEvent>)coalesceWithEvent:(id<RCTEvent>)newEvent;
|
|
{
|
|
return newEvent;
|
|
}
|
|
|
|
+ (NSString *)moduleDotMethod
|
|
{
|
|
return @"RCTEventEmitter.receiveEvent";
|
|
}
|
|
|
|
- (NSArray *)arguments
|
|
{
|
|
NSMutableDictionary *body = [NSMutableDictionary dictionaryWithDictionary:_extraData.data];
|
|
[body setObject:_viewTag forKey:@"target"];
|
|
[body setObject:_handlerTag forKey:@"handlerTag"];
|
|
[body setObject:@(_state) forKey:@"state"];
|
|
return @[ self.viewTag, @"onGestureHandlerEvent", body ];
|
|
}
|
|
|
|
@end
|
|
|
|
@implementation RNGestureHandlerStateChange {
|
|
NSNumber *_handlerTag;
|
|
RNGestureHandlerState _state;
|
|
RNGestureHandlerState _prevState;
|
|
RNGestureHandlerEventExtraData *_extraData;
|
|
}
|
|
|
|
@synthesize viewTag = _viewTag;
|
|
@synthesize coalescingKey = _coalescingKey;
|
|
|
|
- (instancetype)initWithReactTag:(NSNumber *)reactTag
|
|
handlerTag:(NSNumber *)handlerTag
|
|
state:(RNGestureHandlerState)state
|
|
prevState:(RNGestureHandlerState)prevState
|
|
extraData:(RNGestureHandlerEventExtraData *)extraData
|
|
{
|
|
static uint16_t coalescingKey = 0;
|
|
if ((self = [super init])) {
|
|
_viewTag = reactTag;
|
|
_handlerTag = handlerTag;
|
|
_state = state;
|
|
_prevState = prevState;
|
|
_extraData = extraData;
|
|
_coalescingKey = coalescingKey++;
|
|
}
|
|
return self;
|
|
}
|
|
|
|
RCT_NOT_IMPLEMENTED(-(instancetype)init)
|
|
|
|
- (NSString *)eventName
|
|
{
|
|
return @"onGestureHandlerStateChange";
|
|
}
|
|
|
|
- (BOOL)canCoalesce
|
|
{
|
|
// TODO: event coalescing
|
|
return NO;
|
|
}
|
|
|
|
- (id<RCTEvent>)coalesceWithEvent:(id<RCTEvent>)newEvent;
|
|
{
|
|
return newEvent;
|
|
}
|
|
|
|
+ (NSString *)moduleDotMethod
|
|
{
|
|
return @"RCTEventEmitter.receiveEvent";
|
|
}
|
|
|
|
- (NSArray *)arguments
|
|
{
|
|
NSMutableDictionary *body = [NSMutableDictionary dictionaryWithDictionary:_extraData.data];
|
|
[body setObject:_viewTag forKey:@"target"];
|
|
[body setObject:_handlerTag forKey:@"handlerTag"];
|
|
[body setObject:@(_state) forKey:@"state"];
|
|
[body setObject:@(_prevState) forKey:@"oldState"];
|
|
return @[ self.viewTag, @"onGestureHandlerStateChange", body ];
|
|
}
|
|
|
|
@end
|