Swiftgram/submodules/TelegramUI/TelegramUI/ChatAvatarNavigationNode.swift
Peter b317aab568 Add 'submodules/TelegramUI/' from commit 'fa3ac0b61a27c8dd3296518a15891a6f9750cbf2'
git-subtree-dir: submodules/TelegramUI
git-subtree-mainline: 5c1613d1048026b9e00a6ce753775cef87eb53fa
git-subtree-split: fa3ac0b61a27c8dd3296518a15891a6f9750cbf2
2019-06-11 19:00:46 +01:00

80 lines
2.5 KiB
Swift

import Foundation
import UIKit
import AsyncDisplayKit
import Display
private let normalFont = UIFont(name: ".SFCompactRounded-Semibold", size: 16.0)!
private let smallFont = UIFont(name: ".SFCompactRounded-Semibold", size: 12.0)!
final class ChatAvatarNavigationNodeView: UIView, PreviewingHostView {
var previewingDelegate: PreviewingHostViewDelegate? {
return PreviewingHostViewDelegate(controllerForLocation: { [weak self] sourceView, point in
return self?.chatController?.avatarPreviewingController(from: sourceView)
}, commitController: { [weak self] controller in
self?.chatController?.previewingCommit(controller)
})
}
weak var chatController: ChatController?
weak var targetNode: ChatAvatarNavigationNode?
override func layoutSubviews() {
super.layoutSubviews()
self.targetNode?.onLayout()
}
}
final class ChatAvatarNavigationNode: ASDisplayNode {
let avatarNode: AvatarNode
weak var chatController: ChatController? {
didSet {
if self.isNodeLoaded {
(self.view as? ChatAvatarNavigationNodeView)?.chatController = self.chatController
}
}
}
override init() {
self.avatarNode = AvatarNode(font: normalFont)
super.init()
self.setViewBlock({
return ChatAvatarNavigationNodeView()
})
self.addSubnode(self.avatarNode)
}
override func didLoad() {
super.didLoad()
self.view.isOpaque = false
(self.view as? ChatAvatarNavigationNodeView)?.targetNode = self
(self.view as? ChatAvatarNavigationNodeView)?.chatController = self.chatController
}
override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
if constrainedSize.height.isLessThanOrEqualTo(32.0) {
return CGSize(width: 26.0, height: 26.0)
} else {
return CGSize(width: 37.0, height: 37.0)
}
}
func onLayout() {
let bounds = self.bounds
if self.bounds.size.height.isLessThanOrEqualTo(26.0) {
if !self.avatarNode.bounds.size.equalTo(bounds.size) {
self.avatarNode.font = smallFont
}
self.avatarNode.frame = bounds.offsetBy(dx: 8.0, dy: 0.0)
} else {
if !self.avatarNode.bounds.size.equalTo(bounds.size) {
self.avatarNode.font = normalFont
}
self.avatarNode.frame = bounds.offsetBy(dx: 10.0, dy: 1.0)
}
}
}