Swiftgram/submodules/Display/Source/AccessibilityAreaNode.swift
Ilya Laktyushin f800936080 Various fixes
2023-02-07 21:41:49 +04:00

57 lines
1.5 KiB
Swift

import Foundation
import UIKit
import AsyncDisplayKit
public protocol AccessibilityFocusableNode {
func accessibilityElementDidBecomeFocused()
}
public final class AccessibilityAreaNode: ASDisplayNode {
public var activate: (() -> Bool)?
public var increment: (() -> Void)?
public var decrement: (() -> Void)?
public var focused: (() -> Void)?
override public init() {
super.init()
self.isAccessibilityElement = true
}
override public func accessibilityActivate() -> Bool {
return self.activate?() ?? false
}
override public func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
return nil
}
override public func accessibilityElementDidBecomeFocused() {
if let focused = self.focused {
focused()
} else {
var supernode = self.supernode
while true {
if let supernodeValue = supernode {
if let listItemNode = supernodeValue as? AccessibilityFocusableNode {
listItemNode.accessibilityElementDidBecomeFocused()
break
} else {
supernode = supernodeValue.supernode
}
} else {
break
}
}
}
}
override public func accessibilityIncrement() {
self.increment?()
}
override public func accessibilityDecrement() {
self.decrement?()
}
}