mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-12 23:28:25 +00:00
Merge pull request #608 from nguyenhuy/preferredFrameSize_bugs
Fix small bugs related to preferredFrameSize
This commit is contained in:
commit
33912dfc49
@ -150,8 +150,8 @@ void ASDisplayNodeRespectThreadAffinityOfNode(ASDisplayNode *node, void (^block)
|
|||||||
if (ASDisplayNodeSubclassOverridesSelector([self class], @selector(touchesEnded:withEvent:))) {
|
if (ASDisplayNodeSubclassOverridesSelector([self class], @selector(touchesEnded:withEvent:))) {
|
||||||
overrides |= ASDisplayNodeMethodOverrideTouchesEnded;
|
overrides |= ASDisplayNodeMethodOverrideTouchesEnded;
|
||||||
}
|
}
|
||||||
if (ASDisplayNodeSubclassOverridesSelector([self class], @selector(calculateSizeThatFits:))) {
|
if (ASDisplayNodeSubclassOverridesSelector([self class], @selector(layoutSpecThatFits:))) {
|
||||||
overrides |= ASDisplayNodeMethodOverrideCalculateSizeThatFits;
|
overrides |= ASDisplayNodeMethodOverrideLayoutSpecThatFits;
|
||||||
}
|
}
|
||||||
_methodOverrides = overrides;
|
_methodOverrides = overrides;
|
||||||
|
|
||||||
@ -1332,10 +1332,7 @@ static NSInteger incrementIfFound(NSInteger i) {
|
|||||||
- (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize
|
- (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize
|
||||||
{
|
{
|
||||||
ASDisplayNodeAssertThreadAffinity(self);
|
ASDisplayNodeAssertThreadAffinity(self);
|
||||||
if (_methodOverrides & ASDisplayNodeMethodOverrideCalculateSizeThatFits) {
|
if (_methodOverrides & ASDisplayNodeMethodOverrideLayoutSpecThatFits) {
|
||||||
CGSize size = [self calculateSizeThatFits:constrainedSize.max];
|
|
||||||
return [ASLayout newWithLayoutableObject:self size:ASSizeRangeClamp(constrainedSize, size)];
|
|
||||||
} else {
|
|
||||||
id<ASLayoutable> layoutSpec = [self layoutSpecThatFits:constrainedSize];
|
id<ASLayoutable> layoutSpec = [self layoutSpecThatFits:constrainedSize];
|
||||||
ASLayout *layout = [layoutSpec measureWithSizeRange:constrainedSize];
|
ASLayout *layout = [layoutSpec measureWithSizeRange:constrainedSize];
|
||||||
// Make sure layoutableObject of the root layout is `self`, so that the flattened layout will be structurally correct.
|
// Make sure layoutableObject of the root layout is `self`, so that the flattened layout will be structurally correct.
|
||||||
@ -1346,6 +1343,11 @@ static NSInteger incrementIfFound(NSInteger i) {
|
|||||||
return [layout flattenedLayoutUsingPredicateBlock:^BOOL(ASLayout *evaluatedLayout) {
|
return [layout flattenedLayoutUsingPredicateBlock:^BOOL(ASLayout *evaluatedLayout) {
|
||||||
return [_subnodes containsObject:evaluatedLayout.layoutableObject];
|
return [_subnodes containsObject:evaluatedLayout.layoutableObject];
|
||||||
}];
|
}];
|
||||||
|
} else {
|
||||||
|
// If neither -layoutSpecThatFits: nor -calculateSizeThatFits: is overridden by subclassses, preferredFrameSize should be used,
|
||||||
|
// assume that the default implementation of -calculateSizeThatFits: returns it.
|
||||||
|
CGSize size = [self calculateSizeThatFits:constrainedSize.max];
|
||||||
|
return [ASLayout newWithLayoutableObject:self size:ASSizeRangeClamp(constrainedSize, size)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1382,7 +1384,10 @@ static NSInteger incrementIfFound(NSInteger i) {
|
|||||||
- (void)setPreferredFrameSize:(CGSize)preferredFrameSize
|
- (void)setPreferredFrameSize:(CGSize)preferredFrameSize
|
||||||
{
|
{
|
||||||
ASDN::MutexLocker l(_propertyLock);
|
ASDN::MutexLocker l(_propertyLock);
|
||||||
_preferredFrameSize = preferredFrameSize;
|
if (! CGSizeEqualToSize(_preferredFrameSize, preferredFrameSize)) {
|
||||||
|
_preferredFrameSize = preferredFrameSize;
|
||||||
|
[self invalidateCalculatedLayout];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (CGSize)preferredFrameSize
|
- (CGSize)preferredFrameSize
|
||||||
|
@ -28,7 +28,7 @@ typedef NS_OPTIONS(NSUInteger, ASDisplayNodeMethodOverrides) {
|
|||||||
ASDisplayNodeMethodOverrideTouchesCancelled = 1 << 1,
|
ASDisplayNodeMethodOverrideTouchesCancelled = 1 << 1,
|
||||||
ASDisplayNodeMethodOverrideTouchesEnded = 1 << 2,
|
ASDisplayNodeMethodOverrideTouchesEnded = 1 << 2,
|
||||||
ASDisplayNodeMethodOverrideTouchesMoved = 1 << 3,
|
ASDisplayNodeMethodOverrideTouchesMoved = 1 << 3,
|
||||||
ASDisplayNodeMethodOverrideCalculateSizeThatFits = 1 << 4
|
ASDisplayNodeMethodOverrideLayoutSpecThatFits = 1 << 4
|
||||||
};
|
};
|
||||||
|
|
||||||
@class _ASPendingState;
|
@class _ASPendingState;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user