mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-22 22:25:57 +00:00
Various improvements
This commit is contained in:
@@ -193,6 +193,8 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
|
||||
private var chatImportStatusPanel: ChatImportStatusPanel?
|
||||
|
||||
private(set) var adPanelNode: ChatAdPanelNode?
|
||||
|
||||
private let titleAccessoryPanelContainer: ChatControllerTitlePanelNodeContainer
|
||||
private var titleAccessoryPanelNode: ChatTitleAccessoryPanelNode?
|
||||
|
||||
@@ -1427,6 +1429,29 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
self.chatImportStatusPanel = nil
|
||||
}
|
||||
|
||||
var dismissedAdPanelNode: ChatAdPanelNode?
|
||||
var adPanelHeight: CGFloat?
|
||||
if let _ = self.chatPresentationInterfaceState.adMessage {
|
||||
let adPanelNode: ChatAdPanelNode
|
||||
if let current = self.adPanelNode {
|
||||
adPanelNode = current
|
||||
} else {
|
||||
adPanelNode = ChatAdPanelNode(context: self.context, animationCache: self.controllerInteraction.presentationContext.animationCache, animationRenderer: self.controllerInteraction.presentationContext.animationRenderer)
|
||||
adPanelNode.controllerInteraction = self.controllerInteraction
|
||||
}
|
||||
|
||||
if self.adPanelNode != adPanelNode {
|
||||
dismissedAdPanelNode = self.adPanelNode
|
||||
self.adPanelNode = adPanelNode
|
||||
self.contentContainerNode.contentNode.addSubnode(adPanelNode)
|
||||
}
|
||||
|
||||
adPanelHeight = adPanelNode.updateLayout(width: layout.size.width, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, transition: transition, interfaceState: self.chatPresentationInterfaceState)
|
||||
} else if let adPanelNode = self.adPanelNode {
|
||||
dismissedAdPanelNode = adPanelNode
|
||||
self.adPanelNode = nil
|
||||
}
|
||||
|
||||
var inputPanelNodeBaseHeight: CGFloat = 0.0
|
||||
if let inputPanelNode = self.inputPanelNode {
|
||||
inputPanelNodeBaseHeight += inputPanelNode.minimalHeight(interfaceState: self.chatPresentationInterfaceState, metrics: layout.metrics)
|
||||
@@ -1726,14 +1751,21 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
extraNavigationBarHeight += panelHeight
|
||||
}
|
||||
|
||||
updateExtraNavigationBarBackgroundHeight(extraNavigationBarHeight, extraNavigationBarHitTestSlop, extraTransition)
|
||||
|
||||
var importStatusPanelFrame: CGRect?
|
||||
if let _ = self.chatImportStatusPanel, let panelHeight = importStatusPanelHeight {
|
||||
importStatusPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: panelHeight))
|
||||
insets.top += panelHeight
|
||||
}
|
||||
|
||||
var adPanelFrame: CGRect?
|
||||
if let _ = self.adPanelNode, let panelHeight = adPanelHeight {
|
||||
adPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: panelHeight))
|
||||
insets.top += panelHeight
|
||||
extraNavigationBarHeight += panelHeight
|
||||
}
|
||||
|
||||
updateExtraNavigationBarBackgroundHeight(extraNavigationBarHeight, extraNavigationBarHitTestSlop, extraTransition)
|
||||
|
||||
let contentBounds = CGRect(x: 0.0, y: 0.0, width: layout.size.width - wrappingInsets.left - wrappingInsets.right, height: layout.size.height - wrappingInsets.top - wrappingInsets.bottom)
|
||||
|
||||
if let backgroundEffectNode = self.backgroundEffectNode {
|
||||
@@ -2164,21 +2196,30 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
transition.updateFrame(node: self.navigateButtons, frame: apparentNavigateButtonsFrame)
|
||||
self.navigateButtons.update(rect: apparentNavigateButtonsFrame, within: layout.size, transition: transition)
|
||||
|
||||
if let titleAccessoryPanelNode = self.titleAccessoryPanelNode, let titleAccessoryPanelFrame = titleAccessoryPanelFrame, !titleAccessoryPanelNode.frame.equalTo(titleAccessoryPanelFrame) {
|
||||
if let titleAccessoryPanelNode = self.titleAccessoryPanelNode, let titleAccessoryPanelFrame, !titleAccessoryPanelNode.frame.equalTo(titleAccessoryPanelFrame) {
|
||||
titleAccessoryPanelNode.frame = titleAccessoryPanelFrame
|
||||
transition.animatePositionAdditive(node: titleAccessoryPanelNode, offset: CGPoint(x: 0.0, y: -titleAccessoryPanelFrame.height))
|
||||
}
|
||||
|
||||
if let chatTranslationPanel = self.chatTranslationPanel, let translationPanelFrame = translationPanelFrame, !chatTranslationPanel.frame.equalTo(translationPanelFrame) {
|
||||
if let chatTranslationPanel = self.chatTranslationPanel, let translationPanelFrame, !chatTranslationPanel.frame.equalTo(translationPanelFrame) {
|
||||
chatTranslationPanel.frame = translationPanelFrame
|
||||
transition.animatePositionAdditive(node: chatTranslationPanel, offset: CGPoint(x: 0.0, y: -translationPanelFrame.height))
|
||||
}
|
||||
|
||||
if let chatImportStatusPanel = self.chatImportStatusPanel, let importStatusPanelFrame = importStatusPanelFrame, !chatImportStatusPanel.frame.equalTo(importStatusPanelFrame) {
|
||||
if let chatImportStatusPanel = self.chatImportStatusPanel, let importStatusPanelFrame, !chatImportStatusPanel.frame.equalTo(importStatusPanelFrame) {
|
||||
chatImportStatusPanel.frame = importStatusPanelFrame
|
||||
//transition.animatePositionAdditive(node: chatImportStatusPanel, offset: CGPoint(x: 0.0, y: -titleAccessoryPanelFrame.height))
|
||||
}
|
||||
|
||||
if let adPanelNode = self.adPanelNode, let adPanelFrame, !adPanelNode.frame.equalTo(adPanelFrame) {
|
||||
if adPanelNode.frame.width.isZero {
|
||||
adPanelNode.frame = adPanelFrame
|
||||
transition.animatePositionAdditive(node: adPanelNode, offset: CGPoint(x: 0.0, y: -adPanelFrame.height))
|
||||
} else {
|
||||
transition.updateFrame(node: adPanelNode, frame: adPanelFrame)
|
||||
}
|
||||
}
|
||||
|
||||
if let secondaryInputPanelNode = self.secondaryInputPanelNode, let apparentSecondaryInputPanelFrame = apparentSecondaryInputPanelFrame, !secondaryInputPanelNode.frame.equalTo(apparentSecondaryInputPanelFrame) {
|
||||
if immediatelyLayoutSecondaryInputPanelAndAnimateAppearance {
|
||||
secondaryInputPanelNode.frame = apparentSecondaryInputPanelFrame.offsetBy(dx: 0.0, dy: apparentSecondaryInputPanelFrame.height + previousInputPanelBackgroundFrame.maxY - apparentSecondaryInputPanelFrame.maxY)
|
||||
@@ -2270,7 +2311,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
if let dismissedTitleAccessoryPanelNode = dismissedTitleAccessoryPanelNode {
|
||||
if let dismissedTitleAccessoryPanelNode {
|
||||
var dismissedPanelFrame = dismissedTitleAccessoryPanelNode.frame
|
||||
dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height
|
||||
transition.updateFrame(node: dismissedTitleAccessoryPanelNode, frame: dismissedPanelFrame, completion: { [weak dismissedTitleAccessoryPanelNode] _ in
|
||||
@@ -2278,7 +2319,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
})
|
||||
}
|
||||
|
||||
if let dismissedTranslationPanelNode = dismissedTranslationPanelNode {
|
||||
if let dismissedTranslationPanelNode {
|
||||
var dismissedPanelFrame = dismissedTranslationPanelNode.frame
|
||||
dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height
|
||||
transition.updateAlpha(node: dismissedTranslationPanelNode, alpha: 0.0, completion: { [weak dismissedTranslationPanelNode] _ in
|
||||
@@ -2287,7 +2328,7 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
dismissedTranslationPanelNode.animateOut()
|
||||
}
|
||||
|
||||
if let dismissedImportStatusPanelNode = dismissedImportStatusPanelNode {
|
||||
if let dismissedImportStatusPanelNode {
|
||||
var dismissedPanelFrame = dismissedImportStatusPanelNode.frame
|
||||
dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height
|
||||
transition.updateFrame(node: dismissedImportStatusPanelNode, frame: dismissedPanelFrame, completion: { [weak dismissedImportStatusPanelNode] _ in
|
||||
@@ -2295,6 +2336,14 @@ class ChatControllerNode: ASDisplayNode, ASScrollViewDelegate {
|
||||
})
|
||||
}
|
||||
|
||||
if let dismissedAdPanelNode {
|
||||
var dismissedPanelFrame = dismissedAdPanelNode.frame
|
||||
dismissedPanelFrame.origin.y = -dismissedPanelFrame.size.height
|
||||
transition.updateFrame(node: dismissedAdPanelNode, frame: dismissedPanelFrame, completion: { [weak dismissedAdPanelNode] _ in
|
||||
dismissedAdPanelNode?.removeFromSupernode()
|
||||
})
|
||||
}
|
||||
|
||||
if let inputPanelNode = self.inputPanelNode, let apparentInputPanelFrame = apparentInputPanelFrame, !inputPanelNode.frame.equalTo(apparentInputPanelFrame) {
|
||||
if immediatelyLayoutInputPanelAndAnimateAppearance {
|
||||
inputPanelNode.frame = apparentInputPanelFrame.offsetBy(dx: 0.0, dy: apparentInputPanelFrame.height + previousInputPanelBackgroundFrame.maxY - apparentInputBackgroundFrame.maxY)
|
||||
|
||||
Reference in New Issue
Block a user