mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-11-25 17:43:18 +00:00
Offset input context panels independently
This commit is contained in:
parent
0ad2a2ccab
commit
16e3e37f06
@ -99,6 +99,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
private var inputPanelNode: ChatInputPanelNode?
|
private var inputPanelNode: ChatInputPanelNode?
|
||||||
private var accessoryPanelNode: AccessoryPanelNode?
|
private var accessoryPanelNode: AccessoryPanelNode?
|
||||||
private var inputContextPanelNode: ChatInputContextPanelNode?
|
private var inputContextPanelNode: ChatInputContextPanelNode?
|
||||||
|
private let inputContextPanelContainer: ChatControllerTitlePanelNodeContainer
|
||||||
private var overlayContextPanelNode: ChatInputContextPanelNode?
|
private var overlayContextPanelNode: ChatInputContextPanelNode?
|
||||||
|
|
||||||
private var inputNode: ChatInputNode?
|
private var inputNode: ChatInputNode?
|
||||||
@ -201,6 +202,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
self.titleAccessoryPanelContainer = ChatControllerTitlePanelNodeContainer()
|
self.titleAccessoryPanelContainer = ChatControllerTitlePanelNodeContainer()
|
||||||
self.titleAccessoryPanelContainer.clipsToBounds = true
|
self.titleAccessoryPanelContainer.clipsToBounds = true
|
||||||
|
|
||||||
|
self.inputContextPanelContainer = ChatControllerTitlePanelNodeContainer()
|
||||||
|
|
||||||
self.historyNode = ChatHistoryListNode(context: context, chatLocation: chatLocation, tagMask: nil, subject: subject, controllerInteraction: controllerInteraction, selectedMessages: self.selectedMessagesPromise.get())
|
self.historyNode = ChatHistoryListNode(context: context, chatLocation: chatLocation, tagMask: nil, subject: subject, controllerInteraction: controllerInteraction, selectedMessages: self.selectedMessagesPromise.get())
|
||||||
self.historyNode.rotated = true
|
self.historyNode.rotated = true
|
||||||
self.historyNodeContainer = ASDisplayNode()
|
self.historyNodeContainer = ASDisplayNode()
|
||||||
@ -269,6 +272,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
self.addSubnode(self.inputPanelBackgroundNode)
|
self.addSubnode(self.inputPanelBackgroundNode)
|
||||||
self.addSubnode(self.inputPanelBackgroundSeparatorNode)
|
self.addSubnode(self.inputPanelBackgroundSeparatorNode)
|
||||||
|
|
||||||
|
self.addSubnode(self.inputContextPanelContainer)
|
||||||
|
|
||||||
self.addSubnode(self.navigateButtons)
|
self.addSubnode(self.navigateButtons)
|
||||||
|
|
||||||
self.historyNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))))
|
self.historyNode.view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.tapGesture(_:))))
|
||||||
@ -678,6 +683,8 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
|
|
||||||
transition.updateFrame(node: self.titleAccessoryPanelContainer, frame: CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: 56.0)))
|
transition.updateFrame(node: self.titleAccessoryPanelContainer, frame: CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: 56.0)))
|
||||||
|
|
||||||
|
transition.updateFrame(node: self.inputContextPanelContainer, frame: CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: layout.size.width, height: layout.size.height)))
|
||||||
|
|
||||||
var titleAccessoryPanelFrame: CGRect?
|
var titleAccessoryPanelFrame: CGRect?
|
||||||
if let _ = self.titleAccessoryPanelNode, let panelHeight = titleAccessoryPanelHeight {
|
if let _ = self.titleAccessoryPanelNode, let panelHeight = titleAccessoryPanelHeight {
|
||||||
titleAccessoryPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: layout.size.width, height: panelHeight))
|
titleAccessoryPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: layout.size.width, height: panelHeight))
|
||||||
@ -768,7 +775,7 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
dismissedInputContextPanelNode = self.inputContextPanelNode
|
dismissedInputContextPanelNode = self.inputContextPanelNode
|
||||||
self.inputContextPanelNode = inputContextPanelNode
|
self.inputContextPanelNode = inputContextPanelNode
|
||||||
|
|
||||||
self.addSubnode(inputContextPanelNode)
|
self.inputContextPanelContainer.addSubnode(inputContextPanelNode)
|
||||||
immediatelyLayoutInputContextPanelAndAnimateAppearance = true
|
immediatelyLayoutInputContextPanelAndAnimateAppearance = true
|
||||||
}
|
}
|
||||||
} else if let inputContextPanelNode = self.inputContextPanelNode {
|
} else if let inputContextPanelNode = self.inputContextPanelNode {
|
||||||
@ -1081,16 +1088,21 @@ class ChatControllerNode: ASDisplayNode, UIScrollViewDelegate {
|
|||||||
let inputContextPanelsFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - inputPanelsHeight - insets.top)))
|
let inputContextPanelsFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - inputPanelsHeight - insets.top)))
|
||||||
let inputContextPanelsOverMainPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - (inputPanelSize == nil ? CGFloat(0.0) : inputPanelSize!.height) - insets.top)))
|
let inputContextPanelsOverMainPanelFrame = CGRect(origin: CGPoint(x: 0.0, y: insets.top), size: CGSize(width: layout.size.width, height: max(0.0, layout.size.height - insets.bottom - (inputPanelSize == nil ? CGFloat(0.0) : inputPanelSize!.height) - insets.top)))
|
||||||
|
|
||||||
|
if transition.isAnimated, let derivedLayoutState = self.derivedLayoutState {
|
||||||
|
let offset = derivedLayoutState.inputContextPanelsOverMainPanelFrame.maxY - inputContextPanelsOverMainPanelFrame.maxY
|
||||||
|
transition.animateOffsetAdditive(node: self.inputContextPanelContainer, offset: -offset)
|
||||||
|
}
|
||||||
|
|
||||||
if let inputContextPanelNode = self.inputContextPanelNode {
|
if let inputContextPanelNode = self.inputContextPanelNode {
|
||||||
let panelFrame = inputContextPanelNode.placement == .overTextInput ? inputContextPanelsOverMainPanelFrame : inputContextPanelsFrame
|
let panelFrame = inputContextPanelNode.placement == .overTextInput ? inputContextPanelsOverMainPanelFrame : inputContextPanelsFrame
|
||||||
if immediatelyLayoutInputContextPanelAndAnimateAppearance {
|
if immediatelyLayoutInputContextPanelAndAnimateAppearance {
|
||||||
var startPanelFrame = panelFrame
|
/*var startPanelFrame = panelFrame
|
||||||
if let derivedLayoutState = self.derivedLayoutState {
|
if let derivedLayoutState = self.derivedLayoutState {
|
||||||
let referenceFrame = inputContextPanelNode.placement == .overTextInput ? derivedLayoutState.inputContextPanelsOverMainPanelFrame : derivedLayoutState.inputContextPanelsFrame
|
let referenceFrame = inputContextPanelNode.placement == .overTextInput ? derivedLayoutState.inputContextPanelsOverMainPanelFrame : derivedLayoutState.inputContextPanelsFrame
|
||||||
startPanelFrame.origin.y = referenceFrame.maxY - panelFrame.height
|
startPanelFrame.origin.y = referenceFrame.maxY - panelFrame.height
|
||||||
}
|
}*/
|
||||||
inputContextPanelNode.frame = startPanelFrame
|
inputContextPanelNode.frame = panelFrame
|
||||||
inputContextPanelNode.updateLayout(size: startPanelFrame.size, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: 0.0, transition: .immediate, interfaceState: self.chatPresentationInterfaceState)
|
inputContextPanelNode.updateLayout(size: panelFrame.size, leftInset: layout.safeInsets.left, rightInset: layout.safeInsets.right, bottomInset: 0.0, transition: .immediate, interfaceState: self.chatPresentationInterfaceState)
|
||||||
}
|
}
|
||||||
|
|
||||||
if !inputContextPanelNode.frame.equalTo(panelFrame) || inputContextPanelNode.theme !== self.chatPresentationInterfaceState.theme {
|
if !inputContextPanelNode.frame.equalTo(panelFrame) || inputContextPanelNode.theme !== self.chatPresentationInterfaceState.theme {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user