123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #import "RCTScrollEvent.h"
- #import <React/RCTAssert.h>
- @implementation RCTScrollEvent {
- CGPoint _scrollViewContentOffset;
- UIEdgeInsets _scrollViewContentInset;
- CGSize _scrollViewContentSize;
- CGRect _scrollViewFrame;
- CGFloat _scrollViewZoomScale;
- NSDictionary *_userData;
- uint16_t _coalescingKey;
- }
- @synthesize viewTag = _viewTag;
- @synthesize eventName = _eventName;
- - (instancetype)initWithEventName:(NSString *)eventName
- reactTag:(NSNumber *)reactTag
- scrollViewContentOffset:(CGPoint)scrollViewContentOffset
- scrollViewContentInset:(UIEdgeInsets)scrollViewContentInset
- scrollViewContentSize:(CGSize)scrollViewContentSize
- scrollViewFrame:(CGRect)scrollViewFrame
- scrollViewZoomScale:(CGFloat)scrollViewZoomScale
- userData:(NSDictionary *)userData
- coalescingKey:(uint16_t)coalescingKey
- {
- RCTAssertParam(reactTag);
- if ((self = [super init])) {
- _eventName = [eventName copy];
- _viewTag = reactTag;
- _scrollViewContentOffset = scrollViewContentOffset;
- _scrollViewContentInset = scrollViewContentInset;
- _scrollViewContentSize = scrollViewContentSize;
- _scrollViewFrame = scrollViewFrame;
- _scrollViewZoomScale = scrollViewZoomScale;
- _userData = userData;
- _coalescingKey = coalescingKey;
- }
- return self;
- }
- RCT_NOT_IMPLEMENTED(-(instancetype)init)
- - (uint16_t)coalescingKey
- {
- return _coalescingKey;
- }
- - (NSDictionary *)body
- {
- NSDictionary *body = @{
- @"contentOffset" : @{@"x" : @(_scrollViewContentOffset.x), @"y" : @(_scrollViewContentOffset.y)},
- @"contentInset" : @{
- @"top" : @(_scrollViewContentInset.top),
- @"left" : @(_scrollViewContentInset.left),
- @"bottom" : @(_scrollViewContentInset.bottom),
- @"right" : @(_scrollViewContentInset.right)
- },
- @"contentSize" : @{@"width" : @(_scrollViewContentSize.width), @"height" : @(_scrollViewContentSize.height)},
- @"layoutMeasurement" : @{@"width" : @(_scrollViewFrame.size.width), @"height" : @(_scrollViewFrame.size.height)},
- @"zoomScale" : @(_scrollViewZoomScale ?: 1),
- };
- if (_userData) {
- NSMutableDictionary *mutableBody = [body mutableCopy];
- [mutableBody addEntriesFromDictionary:_userData];
- body = mutableBody;
- }
- return body;
- }
- - (BOOL)canCoalesce
- {
- return YES;
- }
- - (RCTScrollEvent *)coalesceWithEvent:(RCTScrollEvent *)newEvent
- {
- NSArray<NSDictionary *> *updatedChildFrames =
- [_userData[@"updatedChildFrames"] arrayByAddingObjectsFromArray:newEvent->_userData[@"updatedChildFrames"]];
- if (updatedChildFrames) {
- NSMutableDictionary *userData = [newEvent->_userData mutableCopy];
- userData[@"updatedChildFrames"] = updatedChildFrames;
- newEvent->_userData = userData;
- }
- return newEvent;
- }
- + (NSString *)moduleDotMethod
- {
- return @"RCTEventEmitter.receiveEvent";
- }
- - (NSArray *)arguments
- {
- return @[ self.viewTag, RCTNormalizeInputEventName(self.eventName), [self body] ];
- }
- @end
|