Swiftgram/submodules/Display/Source/ActionSheetItemNode.swift
2021-02-19 16:02:17 +04:00

51 lines
1.8 KiB
Swift

import UIKit
import AsyncDisplayKit
open class ActionSheetItemNode: ASDisplayNode {
private let theme: ActionSheetControllerTheme
public let backgroundNode: ASDisplayNode
private let overflowSeparatorNode: ASDisplayNode
public var hasSeparator = true
public var requestLayout: (() -> Void)?
private var validSize: CGSize?
public init(theme: ActionSheetControllerTheme) {
self.theme = theme
self.backgroundNode = ASDisplayNode()
self.backgroundNode.backgroundColor = self.theme.itemBackgroundColor
self.overflowSeparatorNode = ASDisplayNode()
self.overflowSeparatorNode.backgroundColor = self.theme.itemHighlightedBackgroundColor
super.init()
self.addSubnode(self.backgroundNode)
self.addSubnode(self.overflowSeparatorNode)
}
open func updateLayout(constrainedSize: CGSize, transition: ContainedViewLayoutTransition) -> CGSize {
let size = CGSize(width: constrainedSize.width, height: 57.0)
self.updateInternalLayout(size, constrainedSize: constrainedSize)
return size
}
public func updateInternalLayout(_ calculatedSize: CGSize, constrainedSize: CGSize) {
self.validSize = constrainedSize
self.backgroundNode.frame = CGRect(origin: CGPoint(), size: calculatedSize)
self.overflowSeparatorNode.frame = CGRect(origin: CGPoint(x: 0.0, y: calculatedSize.height), size: CGSize(width: calculatedSize.width, height: UIScreenPixel))
self.overflowSeparatorNode.isHidden = !self.hasSeparator
}
public func requestLayoutUpdate() {
if let size = self.validSize {
let _ = self.updateLayout(constrainedSize: size, transition: .immediate)
}
}
}