From 19e949e02fc8446f9658c4a0d5540e39ce44456b Mon Sep 17 00:00:00 2001 From: Levi McCallum Date: Fri, 20 May 2016 12:43:35 -0700 Subject: [PATCH] [ASDisplayNode] Move constrainedSize to layout --- AsyncDisplayKit/ASDisplayNode.mm | 34 ++++++------------- .../Private/ASDisplayNodeInternal.h | 2 -- AsyncDisplayKit/Private/ASLayoutTransition.h | 6 +--- AsyncDisplayKit/Private/ASLayoutTransition.mm | 8 ++--- 4 files changed, 13 insertions(+), 37 deletions(-) diff --git a/AsyncDisplayKit/ASDisplayNode.mm b/AsyncDisplayKit/ASDisplayNode.mm index 79e1ece249..ab918645c0 100644 --- a/AsyncDisplayKit/ASDisplayNode.mm +++ b/AsyncDisplayKit/ASDisplayNode.mm @@ -616,25 +616,20 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) [self cancelLayoutTransitionsInProgress]; ASLayout *previousLayout = _layout; - ASSizeRange previousConstrainedSize = _constrainedSize; ASLayout *newLayout = [self calculateLayoutThatFits:constrainedSize]; if (ASHierarchyStateIncludesLayoutPending(_hierarchyState)) { _pendingLayoutTransition = [[ASLayoutTransition alloc] initWithNode:self pendingLayout:newLayout - pendingConstrainedSize:constrainedSize - previousLayout:previousLayout - previousConstrainedSize:previousConstrainedSize]; + previousLayout:previousLayout]; } else { ASLayoutTransition *layoutContext; if (self.usesImplicitHierarchyManagement) { layoutContext = [[ASLayoutTransition alloc] initWithNode:self pendingLayout:newLayout - pendingConstrainedSize:constrainedSize - previousLayout:previousLayout - previousConstrainedSize:previousConstrainedSize]; + previousLayout:previousLayout]; } - [self applyLayout:newLayout constrainedSize:constrainedSize layoutContext:layoutContext]; + [self applyLayout:newLayout layoutContext:layoutContext]; [self _completeLayoutCalculation]; } @@ -658,7 +653,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) // only calculate the size if // - we haven't already // - the constrained size range is different - return (!_flags.isMeasured || !ASSizeRangeEqualToSizeRange(constrainedSize, _constrainedSize)); + return (!_flags.isMeasured || !ASSizeRangeEqualToSizeRange(constrainedSize, _layout.constrainedSizeRange)); } #pragma mark - Layout Transition @@ -667,9 +662,8 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) shouldMeasureAsync:(BOOL)shouldMeasureAsync measurementCompletion:(void(^)())completion { - ASSizeRange currentConstrainedSize = _constrainedSize; [self invalidateCalculatedLayout]; - [self transitionLayoutWithSizeRange:currentConstrainedSize + [self transitionLayoutWithSizeRange:_layout.constrainedSizeRange animated:animated shouldMeasureAsync:shouldMeasureAsync measurementCompletion:completion]; @@ -732,8 +726,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) } ASLayout *previousLayout = _layout; - ASSizeRange previousConstrainedSize = _constrainedSize; - [self applyLayout:newLayout constrainedSize:constrainedSize layoutContext:nil]; + [self applyLayout:newLayout layoutContext:nil]; ASDisplayNodePerformBlockOnEverySubnode(self, ^(ASDisplayNode * _Nonnull node) { [node applyPendingLayoutContext]; @@ -749,9 +742,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) _pendingLayoutTransition = [[ASLayoutTransition alloc] initWithNode:self pendingLayout:newLayout - pendingConstrainedSize:constrainedSize - previousLayout:previousLayout - previousConstrainedSize:previousConstrainedSize]; + previousLayout:previousLayout]; [_pendingLayoutTransition applySubnodeInsertions]; _transitionContext = [[_ASTransitionContext alloc] initWithAnimation:animated @@ -1032,7 +1023,6 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) return; } - ASSizeRange oldConstrainedSize = _constrainedSize; [self invalidateCalculatedLayout]; if (_supernode) { @@ -1045,7 +1035,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c) } // This is the root node. Trigger a full measurement pass on *current* thread. Old constrained size is re-used. - [self measureWithSizeRange:oldConstrainedSize]; + [self measureWithSizeRange:_layout.constrainedSizeRange]; CGRect oldBounds = self.bounds; CGSize oldSize = oldBounds.size; @@ -2014,7 +2004,7 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) - (ASSizeRange)constrainedSizeForCalculatedLayout { ASDN::MutexLocker l(_propertyLock); - return _constrainedSize; + return _layout.constrainedSizeRange; } - (void)setLayoutSpecBlock:(ASLayoutSpecBlock)layoutSpecBlock @@ -2400,15 +2390,12 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) { ASDN::MutexLocker l(_propertyLock); if (_pendingLayoutTransition) { - [self applyLayout:_pendingLayoutTransition.pendingLayout - constrainedSize:_pendingLayoutTransition.pendingConstrainedSize - layoutContext:_pendingLayoutTransition]; + [self applyLayout:_pendingLayoutTransition.pendingLayout layoutContext:_pendingLayoutTransition]; _pendingLayoutTransition = nil; } } - (void)applyLayout:(ASLayout *)layout - constrainedSize:(ASSizeRange)constrainedSize layoutContext:(ASLayoutTransition *)layoutContext { ASDN::MutexLocker l(_propertyLock); @@ -2418,7 +2405,6 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock) ASDisplayNodeAssertTrue(layout.size.width >= 0.0); ASDisplayNodeAssertTrue(layout.size.height >= 0.0); - _constrainedSize = constrainedSize; _flags.isMeasured = YES; if (self.usesImplicitHierarchyManagement && layoutContext != nil) { diff --git a/AsyncDisplayKit/Private/ASDisplayNodeInternal.h b/AsyncDisplayKit/Private/ASDisplayNodeInternal.h index c2fe3ea0cc..1e5efee2dc 100644 --- a/AsyncDisplayKit/Private/ASDisplayNodeInternal.h +++ b/AsyncDisplayKit/Private/ASDisplayNodeInternal.h @@ -103,8 +103,6 @@ FOUNDATION_EXPORT NSString * const ASRenderingEngineDidDisplayNodesScheduledBefo ASEnvironmentState _environmentState; ASLayout *_layout; - ASSizeRange _constrainedSize; - UIEdgeInsets _hitTestSlop; NSMutableArray *_subnodes; diff --git a/AsyncDisplayKit/Private/ASLayoutTransition.h b/AsyncDisplayKit/Private/ASLayoutTransition.h index 75797687e1..e0bd79ecbc 100644 --- a/AsyncDisplayKit/Private/ASLayoutTransition.h +++ b/AsyncDisplayKit/Private/ASLayoutTransition.h @@ -16,15 +16,11 @@ @property (nonatomic, readonly, weak) ASDisplayNode *node; @property (nonatomic, readonly, strong) ASLayout *pendingLayout; -@property (nonatomic, readonly, assign) ASSizeRange pendingConstrainedSize; @property (nonatomic, readonly, strong) ASLayout *previousLayout; -@property (nonatomic, readonly, assign) ASSizeRange previousConstrainedSize; - (instancetype)initWithNode:(ASDisplayNode *)node pendingLayout:(ASLayout *)pendingLayout - pendingConstrainedSize:(ASSizeRange)pendingConstrainedSize - previousLayout:(ASLayout *)previousLayout - previousConstrainedSize:(ASSizeRange)previousConstrainedSize; + previousLayout:(ASLayout *)previousLayout; - (void)applySubnodeInsertions; diff --git a/AsyncDisplayKit/Private/ASLayoutTransition.mm b/AsyncDisplayKit/Private/ASLayoutTransition.mm index 5b6a6035b9..af85fa8cf3 100644 --- a/AsyncDisplayKit/Private/ASLayoutTransition.mm +++ b/AsyncDisplayKit/Private/ASLayoutTransition.mm @@ -29,17 +29,13 @@ - (instancetype)initWithNode:(ASDisplayNode *)node pendingLayout:(ASLayout *)pendingLayout - pendingConstrainedSize:(ASSizeRange)pendingConstrainedSize previousLayout:(ASLayout *)previousLayout - previousConstrainedSize:(ASSizeRange)previousConstrainedSize { self = [super init]; if (self) { _node = node; _pendingLayout = pendingLayout; - _pendingConstrainedSize = pendingConstrainedSize; _previousLayout = previousLayout; - _previousConstrainedSize = previousConstrainedSize; } return self; } @@ -129,9 +125,9 @@ { ASDN::MutexLocker l(_propertyLock); if ([key isEqualToString:ASTransitionContextFromLayoutKey]) { - return _previousConstrainedSize; + return _previousLayout.constrainedSizeRange; } else if ([key isEqualToString:ASTransitionContextToLayoutKey]) { - return _pendingConstrainedSize; + return _pendingLayout.constrainedSizeRange; } else { return ASSizeRangeMake(CGSizeZero, CGSizeZero); }