mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
Improve _ASDisplayViewAccessibility
- Add class method to create a UIAccessibilityElement from a ASDisplayNode - Add function to iterate through a ASDisplayNode tree in bfs fashion - Add assert for _accessibleElements in accessibilityElementAtIndex:
This commit is contained in:
@@ -10,6 +10,8 @@
|
||||
#import "ASDisplayNodeInternal.h"
|
||||
#import "ASDisplayNode+FrameworkPrivate.h"
|
||||
|
||||
#import <queue>
|
||||
|
||||
extern ASInterfaceState ASInterfaceStateForDisplayNode(ASDisplayNode *displayNode, UIWindow *window)
|
||||
{
|
||||
ASDisplayNodeCAssert(![displayNode isLayerBacked], @"displayNode must not be layer backed as it may have a nil window");
|
||||
@@ -63,6 +65,24 @@ extern void ASDisplayNodePerformBlockOnEveryNode(CALayer *layer, ASDisplayNode *
|
||||
}
|
||||
}
|
||||
|
||||
extern void ASDisplayNodePerformBlockOnEveryNodeBFS(ASDisplayNode *node, void(^block)(ASDisplayNode *node))
|
||||
{
|
||||
// Queue used to keep track of subnodes while traversing this layout in a BFS fashion.
|
||||
std::queue<ASDisplayNode *> queue;
|
||||
queue.push(node);
|
||||
|
||||
while (!queue.empty()) {
|
||||
node = queue.front();
|
||||
queue.pop();
|
||||
|
||||
block(node);
|
||||
|
||||
// Add all subnodes to process in next step
|
||||
for (int i = 0; i < node.subnodes.count; i++)
|
||||
queue.push(node.subnodes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
extern void ASDisplayNodePerformBlockOnEverySubnode(ASDisplayNode *node, void(^block)(ASDisplayNode *node))
|
||||
{
|
||||
for (ASDisplayNode *subnode in node.subnodes) {
|
||||
|
||||
Reference in New Issue
Block a user