mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 06:35:51 +00:00
Add locking for ASInterfaceState. Misc. cleanup.
This commit is contained in:
@@ -10,17 +10,17 @@
|
||||
|
||||
#import "ASDisplayNodeInternal.h"
|
||||
|
||||
inline ASDisplayNode *ASLayerToDisplayNode(CALayer *layer)
|
||||
extern ASDisplayNode *ASLayerToDisplayNode(CALayer *layer)
|
||||
{
|
||||
return layer.asyncdisplaykit_node;
|
||||
}
|
||||
|
||||
inline ASDisplayNode *ASViewToDisplayNode(UIView *view)
|
||||
extern ASDisplayNode *ASViewToDisplayNode(UIView *view)
|
||||
{
|
||||
return view.asyncdisplaykit_node;
|
||||
}
|
||||
|
||||
void ASDisplayNodePerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, void(^block)(ASDisplayNode *node))
|
||||
extern void ASDisplayNodePerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *node, void(^block)(ASDisplayNode *node))
|
||||
{
|
||||
if (!node) {
|
||||
ASDisplayNodeCAssertNotNil(layer, @"Cannot recursively perform with nil node and nil layer");
|
||||
@@ -148,6 +148,45 @@ extern id ASDisplayNodeFindFirstSubnodeOfClass(ASDisplayNode *start, Class c)
|
||||
});
|
||||
}
|
||||
|
||||
static inline BOOL _ASDisplayNodeIsAncestorOfDisplayNode(ASDisplayNode *possibleAncestor, ASDisplayNode *possibleDescendent)
|
||||
{
|
||||
ASDisplayNode *supernode = possibleDescendent;
|
||||
while (supernode) {
|
||||
if (supernode == possibleAncestor) {
|
||||
return YES;
|
||||
}
|
||||
supernode = supernode.supernode;
|
||||
}
|
||||
|
||||
return NO;
|
||||
}
|
||||
|
||||
extern ASDisplayNode *ASDisplayNodeFindClosestCommonAncestor(ASDisplayNode *node1, ASDisplayNode *node2)
|
||||
{
|
||||
ASDisplayNode *possibleAncestor = node1;
|
||||
while (possibleAncestor) {
|
||||
if (_ASDisplayNodeIsAncestorOfDisplayNode(possibleAncestor, node2)) {
|
||||
break;
|
||||
}
|
||||
possibleAncestor = possibleAncestor.supernode;
|
||||
}
|
||||
|
||||
ASDisplayNodeCAssertNotNil(possibleAncestor, @"Could not find a common ancestor between node1: %@ and node2: %@", node1, node2);
|
||||
return possibleAncestor;
|
||||
}
|
||||
|
||||
extern ASDisplayNode *ASDisplayNodeUltimateParentOfNode(ASDisplayNode *node)
|
||||
{
|
||||
// node <- supernode on each loop
|
||||
// previous <- node on each loop where node is not nil
|
||||
// previous is the final non-nil value of supernode, i.e. the root node
|
||||
ASDisplayNode *previousNode = node;
|
||||
while ((node = [node supernode])) {
|
||||
previousNode = node;
|
||||
}
|
||||
return previousNode;
|
||||
}
|
||||
|
||||
#pragma mark - Placeholders
|
||||
|
||||
UIColor *ASDisplayNodeDefaultPlaceholderColor()
|
||||
|
||||
Reference in New Issue
Block a user