mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 14:20:20 +00:00
[ASDisplayNode] Move constrainedSize to layout
This commit is contained in:
@@ -616,25 +616,20 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
|
|||||||
[self cancelLayoutTransitionsInProgress];
|
[self cancelLayoutTransitionsInProgress];
|
||||||
|
|
||||||
ASLayout *previousLayout = _layout;
|
ASLayout *previousLayout = _layout;
|
||||||
ASSizeRange previousConstrainedSize = _constrainedSize;
|
|
||||||
ASLayout *newLayout = [self calculateLayoutThatFits:constrainedSize];
|
ASLayout *newLayout = [self calculateLayoutThatFits:constrainedSize];
|
||||||
|
|
||||||
if (ASHierarchyStateIncludesLayoutPending(_hierarchyState)) {
|
if (ASHierarchyStateIncludesLayoutPending(_hierarchyState)) {
|
||||||
_pendingLayoutTransition = [[ASLayoutTransition alloc] initWithNode:self
|
_pendingLayoutTransition = [[ASLayoutTransition alloc] initWithNode:self
|
||||||
pendingLayout:newLayout
|
pendingLayout:newLayout
|
||||||
pendingConstrainedSize:constrainedSize
|
previousLayout:previousLayout];
|
||||||
previousLayout:previousLayout
|
|
||||||
previousConstrainedSize:previousConstrainedSize];
|
|
||||||
} else {
|
} else {
|
||||||
ASLayoutTransition *layoutContext;
|
ASLayoutTransition *layoutContext;
|
||||||
if (self.usesImplicitHierarchyManagement) {
|
if (self.usesImplicitHierarchyManagement) {
|
||||||
layoutContext = [[ASLayoutTransition alloc] initWithNode:self
|
layoutContext = [[ASLayoutTransition alloc] initWithNode:self
|
||||||
pendingLayout:newLayout
|
pendingLayout:newLayout
|
||||||
pendingConstrainedSize:constrainedSize
|
previousLayout:previousLayout];
|
||||||
previousLayout:previousLayout
|
|
||||||
previousConstrainedSize:previousConstrainedSize];
|
|
||||||
}
|
}
|
||||||
[self applyLayout:newLayout constrainedSize:constrainedSize layoutContext:layoutContext];
|
[self applyLayout:newLayout layoutContext:layoutContext];
|
||||||
[self _completeLayoutCalculation];
|
[self _completeLayoutCalculation];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -658,7 +653,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
|
|||||||
// only calculate the size if
|
// only calculate the size if
|
||||||
// - we haven't already
|
// - we haven't already
|
||||||
// - the constrained size range is different
|
// - the constrained size range is different
|
||||||
return (!_flags.isMeasured || !ASSizeRangeEqualToSizeRange(constrainedSize, _constrainedSize));
|
return (!_flags.isMeasured || !ASSizeRangeEqualToSizeRange(constrainedSize, _layout.constrainedSizeRange));
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - Layout Transition
|
#pragma mark - Layout Transition
|
||||||
@@ -667,9 +662,8 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
|
|||||||
shouldMeasureAsync:(BOOL)shouldMeasureAsync
|
shouldMeasureAsync:(BOOL)shouldMeasureAsync
|
||||||
measurementCompletion:(void(^)())completion
|
measurementCompletion:(void(^)())completion
|
||||||
{
|
{
|
||||||
ASSizeRange currentConstrainedSize = _constrainedSize;
|
|
||||||
[self invalidateCalculatedLayout];
|
[self invalidateCalculatedLayout];
|
||||||
[self transitionLayoutWithSizeRange:currentConstrainedSize
|
[self transitionLayoutWithSizeRange:_layout.constrainedSizeRange
|
||||||
animated:animated
|
animated:animated
|
||||||
shouldMeasureAsync:shouldMeasureAsync
|
shouldMeasureAsync:shouldMeasureAsync
|
||||||
measurementCompletion:completion];
|
measurementCompletion:completion];
|
||||||
@@ -732,8 +726,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASLayout *previousLayout = _layout;
|
ASLayout *previousLayout = _layout;
|
||||||
ASSizeRange previousConstrainedSize = _constrainedSize;
|
[self applyLayout:newLayout layoutContext:nil];
|
||||||
[self applyLayout:newLayout constrainedSize:constrainedSize layoutContext:nil];
|
|
||||||
|
|
||||||
ASDisplayNodePerformBlockOnEverySubnode(self, ^(ASDisplayNode * _Nonnull node) {
|
ASDisplayNodePerformBlockOnEverySubnode(self, ^(ASDisplayNode * _Nonnull node) {
|
||||||
[node applyPendingLayoutContext];
|
[node applyPendingLayoutContext];
|
||||||
@@ -749,9 +742,7 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
|
|||||||
|
|
||||||
_pendingLayoutTransition = [[ASLayoutTransition alloc] initWithNode:self
|
_pendingLayoutTransition = [[ASLayoutTransition alloc] initWithNode:self
|
||||||
pendingLayout:newLayout
|
pendingLayout:newLayout
|
||||||
pendingConstrainedSize:constrainedSize
|
previousLayout:previousLayout];
|
||||||
previousLayout:previousLayout
|
|
||||||
previousConstrainedSize:previousConstrainedSize];
|
|
||||||
[_pendingLayoutTransition applySubnodeInsertions];
|
[_pendingLayoutTransition applySubnodeInsertions];
|
||||||
|
|
||||||
_transitionContext = [[_ASTransitionContext alloc] initWithAnimation:animated
|
_transitionContext = [[_ASTransitionContext alloc] initWithAnimation:animated
|
||||||
@@ -1032,7 +1023,6 @@ static ASDisplayNodeMethodOverrides GetASDisplayNodeMethodOverrides(Class c)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSizeRange oldConstrainedSize = _constrainedSize;
|
|
||||||
[self invalidateCalculatedLayout];
|
[self invalidateCalculatedLayout];
|
||||||
|
|
||||||
if (_supernode) {
|
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.
|
// 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;
|
CGRect oldBounds = self.bounds;
|
||||||
CGSize oldSize = oldBounds.size;
|
CGSize oldSize = oldBounds.size;
|
||||||
@@ -2014,7 +2004,7 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock)
|
|||||||
- (ASSizeRange)constrainedSizeForCalculatedLayout
|
- (ASSizeRange)constrainedSizeForCalculatedLayout
|
||||||
{
|
{
|
||||||
ASDN::MutexLocker l(_propertyLock);
|
ASDN::MutexLocker l(_propertyLock);
|
||||||
return _constrainedSize;
|
return _layout.constrainedSizeRange;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setLayoutSpecBlock:(ASLayoutSpecBlock)layoutSpecBlock
|
- (void)setLayoutSpecBlock:(ASLayoutSpecBlock)layoutSpecBlock
|
||||||
@@ -2400,15 +2390,12 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock)
|
|||||||
{
|
{
|
||||||
ASDN::MutexLocker l(_propertyLock);
|
ASDN::MutexLocker l(_propertyLock);
|
||||||
if (_pendingLayoutTransition) {
|
if (_pendingLayoutTransition) {
|
||||||
[self applyLayout:_pendingLayoutTransition.pendingLayout
|
[self applyLayout:_pendingLayoutTransition.pendingLayout layoutContext:_pendingLayoutTransition];
|
||||||
constrainedSize:_pendingLayoutTransition.pendingConstrainedSize
|
|
||||||
layoutContext:_pendingLayoutTransition];
|
|
||||||
_pendingLayoutTransition = nil;
|
_pendingLayoutTransition = nil;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)applyLayout:(ASLayout *)layout
|
- (void)applyLayout:(ASLayout *)layout
|
||||||
constrainedSize:(ASSizeRange)constrainedSize
|
|
||||||
layoutContext:(ASLayoutTransition *)layoutContext
|
layoutContext:(ASLayoutTransition *)layoutContext
|
||||||
{
|
{
|
||||||
ASDN::MutexLocker l(_propertyLock);
|
ASDN::MutexLocker l(_propertyLock);
|
||||||
@@ -2418,7 +2405,6 @@ void recursivelyTriggerDisplayForLayer(CALayer *layer, BOOL shouldBlock)
|
|||||||
ASDisplayNodeAssertTrue(layout.size.width >= 0.0);
|
ASDisplayNodeAssertTrue(layout.size.width >= 0.0);
|
||||||
ASDisplayNodeAssertTrue(layout.size.height >= 0.0);
|
ASDisplayNodeAssertTrue(layout.size.height >= 0.0);
|
||||||
|
|
||||||
_constrainedSize = constrainedSize;
|
|
||||||
_flags.isMeasured = YES;
|
_flags.isMeasured = YES;
|
||||||
|
|
||||||
if (self.usesImplicitHierarchyManagement && layoutContext != nil) {
|
if (self.usesImplicitHierarchyManagement && layoutContext != nil) {
|
||||||
|
|||||||
@@ -103,8 +103,6 @@ FOUNDATION_EXPORT NSString * const ASRenderingEngineDidDisplayNodesScheduledBefo
|
|||||||
ASEnvironmentState _environmentState;
|
ASEnvironmentState _environmentState;
|
||||||
ASLayout *_layout;
|
ASLayout *_layout;
|
||||||
|
|
||||||
ASSizeRange _constrainedSize;
|
|
||||||
|
|
||||||
UIEdgeInsets _hitTestSlop;
|
UIEdgeInsets _hitTestSlop;
|
||||||
NSMutableArray *_subnodes;
|
NSMutableArray *_subnodes;
|
||||||
|
|
||||||
|
|||||||
@@ -16,15 +16,11 @@
|
|||||||
|
|
||||||
@property (nonatomic, readonly, weak) ASDisplayNode *node;
|
@property (nonatomic, readonly, weak) ASDisplayNode *node;
|
||||||
@property (nonatomic, readonly, strong) ASLayout *pendingLayout;
|
@property (nonatomic, readonly, strong) ASLayout *pendingLayout;
|
||||||
@property (nonatomic, readonly, assign) ASSizeRange pendingConstrainedSize;
|
|
||||||
@property (nonatomic, readonly, strong) ASLayout *previousLayout;
|
@property (nonatomic, readonly, strong) ASLayout *previousLayout;
|
||||||
@property (nonatomic, readonly, assign) ASSizeRange previousConstrainedSize;
|
|
||||||
|
|
||||||
- (instancetype)initWithNode:(ASDisplayNode *)node
|
- (instancetype)initWithNode:(ASDisplayNode *)node
|
||||||
pendingLayout:(ASLayout *)pendingLayout
|
pendingLayout:(ASLayout *)pendingLayout
|
||||||
pendingConstrainedSize:(ASSizeRange)pendingConstrainedSize
|
previousLayout:(ASLayout *)previousLayout;
|
||||||
previousLayout:(ASLayout *)previousLayout
|
|
||||||
previousConstrainedSize:(ASSizeRange)previousConstrainedSize;
|
|
||||||
|
|
||||||
- (void)applySubnodeInsertions;
|
- (void)applySubnodeInsertions;
|
||||||
|
|
||||||
|
|||||||
@@ -29,17 +29,13 @@
|
|||||||
|
|
||||||
- (instancetype)initWithNode:(ASDisplayNode *)node
|
- (instancetype)initWithNode:(ASDisplayNode *)node
|
||||||
pendingLayout:(ASLayout *)pendingLayout
|
pendingLayout:(ASLayout *)pendingLayout
|
||||||
pendingConstrainedSize:(ASSizeRange)pendingConstrainedSize
|
|
||||||
previousLayout:(ASLayout *)previousLayout
|
previousLayout:(ASLayout *)previousLayout
|
||||||
previousConstrainedSize:(ASSizeRange)previousConstrainedSize
|
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self) {
|
if (self) {
|
||||||
_node = node;
|
_node = node;
|
||||||
_pendingLayout = pendingLayout;
|
_pendingLayout = pendingLayout;
|
||||||
_pendingConstrainedSize = pendingConstrainedSize;
|
|
||||||
_previousLayout = previousLayout;
|
_previousLayout = previousLayout;
|
||||||
_previousConstrainedSize = previousConstrainedSize;
|
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
@@ -129,9 +125,9 @@
|
|||||||
{
|
{
|
||||||
ASDN::MutexLocker l(_propertyLock);
|
ASDN::MutexLocker l(_propertyLock);
|
||||||
if ([key isEqualToString:ASTransitionContextFromLayoutKey]) {
|
if ([key isEqualToString:ASTransitionContextFromLayoutKey]) {
|
||||||
return _previousConstrainedSize;
|
return _previousLayout.constrainedSizeRange;
|
||||||
} else if ([key isEqualToString:ASTransitionContextToLayoutKey]) {
|
} else if ([key isEqualToString:ASTransitionContextToLayoutKey]) {
|
||||||
return _pendingConstrainedSize;
|
return _pendingLayout.constrainedSizeRange;
|
||||||
} else {
|
} else {
|
||||||
return ASSizeRangeMake(CGSizeZero, CGSizeZero);
|
return ASSizeRangeMake(CGSizeZero, CGSizeZero);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user