Various fixes

This commit is contained in:
Ilya Laktyushin 2023-04-13 23:02:05 +04:00
parent 724a303c9c
commit 8d9068d87d

View File

@ -2311,7 +2311,7 @@ final class PeerInfoHeaderNode: ASDisplayNode {
var emojiStatusPackDisposable = MetaDisposable() var emojiStatusPackDisposable = MetaDisposable()
var emojiStatusFileAndPackTitle = Promise<(TelegramMediaFile, LoadedStickerPack)?>() var emojiStatusFileAndPackTitle = Promise<(TelegramMediaFile, LoadedStickerPack)?>()
private var validWidth: CGFloat? private var validLayout: (width: CGFloat, deviceMetrics: DeviceMetrics)?
init(context: AccountContext, avatarInitiallyExpanded: Bool, isOpenedFromChat: Bool, isMediaOnly: Bool, isSettings: Bool, forumTopicThreadId: Int64?, chatLocation: ChatLocation) { init(context: AccountContext, avatarInitiallyExpanded: Bool, isOpenedFromChat: Bool, isMediaOnly: Bool, isSettings: Bool, forumTopicThreadId: Int64?, chatLocation: ChatLocation) {
self.context = context self.context = context
@ -2577,7 +2577,9 @@ final class PeerInfoHeaderNode: ASDisplayNode {
self.peer = peer self.peer = peer
self.threadData = threadData self.threadData = threadData
self.avatarListNode.listContainerNode.peer = peer self.avatarListNode.listContainerNode.peer = peer
self.validWidth = width
let isFirstTime = self.validLayout == nil
self.validLayout = (width, deviceMetrics)
let previousPanelStatusData = self.currentPanelStatusData let previousPanelStatusData = self.currentPanelStatusData
self.currentPanelStatusData = panelStatusData.0 self.currentPanelStatusData = panelStatusData.0
@ -3628,6 +3630,10 @@ final class PeerInfoHeaderNode: ASDisplayNode {
transition.updateFrame(node: self.separatorNode, frame: separatorFrame) transition.updateFrame(node: self.separatorNode, frame: separatorFrame)
} }
if isFirstTime {
self.updateAvatarMask(transition: .immediate)
}
return resolvedHeight return resolvedHeight
} }
@ -3690,17 +3696,22 @@ final class PeerInfoHeaderNode: ASDisplayNode {
self.avatarListNode.animateAvatarCollapse(transition: transition) self.avatarListNode.animateAvatarCollapse(transition: transition)
} }
if let width = self.validWidth { self.updateAvatarMask(transition: transition)
let maskScale: CGFloat = isAvatarExpanded ? width / 100.0 : 1.0
transition.updateTransformScale(layer: self.avatarListNode.maskNode.layer, scale: maskScale)
transition.updateTransformScale(layer: self.avatarListNode.bottomCoverNode.layer, scale: maskScale)
transition.updateTransformScale(layer: self.avatarListNode.topCoverNode.layer, scale: maskScale)
let maskAnchorPoint = CGPoint(x: 0.5, y: isAvatarExpanded ? 0.37 : 0.5)
transition.updateAnchorPoint(layer: self.avatarListNode.maskNode.layer, anchorPoint: maskAnchorPoint)
}
} }
} }
private func updateAvatarMask(transition: ContainedViewLayoutTransition) {
guard let (width, deviceMetrics) = self.validLayout, deviceMetrics.hasDynamicIsland else {
return
}
let maskScale: CGFloat = isAvatarExpanded ? width / 100.0 : 1.0
transition.updateTransformScale(layer: self.avatarListNode.maskNode.layer, scale: maskScale)
transition.updateTransformScale(layer: self.avatarListNode.bottomCoverNode.layer, scale: maskScale)
transition.updateTransformScale(layer: self.avatarListNode.topCoverNode.layer, scale: maskScale)
let maskAnchorPoint = CGPoint(x: 0.5, y: isAvatarExpanded ? 0.37 : 0.5)
transition.updateAnchorPoint(layer: self.avatarListNode.maskNode.layer, anchorPoint: maskAnchorPoint)
}
} }
private class DynamicIslandMaskNode: ASDisplayNode { private class DynamicIslandMaskNode: ASDisplayNode {