mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-09-04 03:40:45 +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:))) {
|
||||
overrides |= ASDisplayNodeMethodOverrideTouchesEnded;
|
||||
}
|
||||
if (ASDisplayNodeSubclassOverridesSelector([self class], @selector(calculateSizeThatFits:))) {
|
||||
overrides |= ASDisplayNodeMethodOverrideCalculateSizeThatFits;
|
||||
if (ASDisplayNodeSubclassOverridesSelector([self class], @selector(layoutSpecThatFits:))) {
|
||||
overrides |= ASDisplayNodeMethodOverrideLayoutSpecThatFits;
|
||||
}
|
||||
_methodOverrides = overrides;
|
||||
|
||||
@ -1332,10 +1332,7 @@ static NSInteger incrementIfFound(NSInteger i) {
|
||||
- (ASLayout *)calculateLayoutThatFits:(ASSizeRange)constrainedSize
|
||||
{
|
||||
ASDisplayNodeAssertThreadAffinity(self);
|
||||
if (_methodOverrides & ASDisplayNodeMethodOverrideCalculateSizeThatFits) {
|
||||
CGSize size = [self calculateSizeThatFits:constrainedSize.max];
|
||||
return [ASLayout newWithLayoutableObject:self size:ASSizeRangeClamp(constrainedSize, size)];
|
||||
} else {
|
||||
if (_methodOverrides & ASDisplayNodeMethodOverrideLayoutSpecThatFits) {
|
||||
id<ASLayoutable> layoutSpec = [self layoutSpecThatFits:constrainedSize];
|
||||
ASLayout *layout = [layoutSpec measureWithSizeRange:constrainedSize];
|
||||
// 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 [_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
|
||||
{
|
||||
ASDN::MutexLocker l(_propertyLock);
|
||||
_preferredFrameSize = preferredFrameSize;
|
||||
if (! CGSizeEqualToSize(_preferredFrameSize, preferredFrameSize)) {
|
||||
_preferredFrameSize = preferredFrameSize;
|
||||
[self invalidateCalculatedLayout];
|
||||
}
|
||||
}
|
||||
|
||||
- (CGSize)preferredFrameSize
|
||||
|
@ -28,7 +28,7 @@ typedef NS_OPTIONS(NSUInteger, ASDisplayNodeMethodOverrides) {
|
||||
ASDisplayNodeMethodOverrideTouchesCancelled = 1 << 1,
|
||||
ASDisplayNodeMethodOverrideTouchesEnded = 1 << 2,
|
||||
ASDisplayNodeMethodOverrideTouchesMoved = 1 << 3,
|
||||
ASDisplayNodeMethodOverrideCalculateSizeThatFits = 1 << 4
|
||||
ASDisplayNodeMethodOverrideLayoutSpecThatFits = 1 << 4
|
||||
};
|
||||
|
||||
@class _ASPendingState;
|
||||
|
Loading…
x
Reference in New Issue
Block a user