Skip to content

Commit 06936fa

Browse files
author
Isaac
committed
Text input updates
1 parent c962e6f commit 06936fa

File tree

11 files changed

+235
-152
lines changed

11 files changed

+235
-152
lines changed

submodules/TelegramUI/Components/Chat/ChatInputAccessoryPanel/Sources/ChatInputAccessoryPanel.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,22 @@ public final class ChatInputAccessoryPanelEnvironment: Equatable {
3939
}
4040
}
4141

42+
public final class ChatInputAccessoryPanelTransitionData {
43+
public let titleView: UIView
44+
public let textView: UIView
45+
public let lineView: UIView
46+
public let imageView: UIView?
47+
48+
public init(titleView: UIView, textView: UIView, lineView: UIView, imageView: UIView?) {
49+
self.titleView = titleView
50+
self.textView = textView
51+
self.lineView = lineView
52+
self.imageView = imageView
53+
}
54+
}
55+
4256
public protocol ChatInputAccessoryPanelView: UIView {
4357
var contentTintView: UIView { get }
58+
var storedFrameBeforeDismissed: CGRect? { get set }
59+
var transitionData: ChatInputAccessoryPanelTransitionData? { get }
4460
}

submodules/TelegramUI/Components/Chat/ChatInputMessageAccessoryPanel/Sources/ChatInputMessageAccessoryPanel.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,20 @@ public final class ChatInputMessageAccessoryPanel: Component {
276276
private var inlineTextStarImage: UIImage?
277277
private var inlineTextTonImage: (UIImage, UIColor)?
278278

279+
public var transitionData: ChatInputAccessoryPanelTransitionData? {
280+
guard let textView = self.text.view else {
281+
return nil
282+
}
283+
return ChatInputAccessoryPanelTransitionData(
284+
titleView: self.titleNode.view,
285+
textView: textView,
286+
lineView: self.lineView,
287+
imageView: nil
288+
)
289+
}
290+
291+
public var storedFrameBeforeDismissed: CGRect?
292+
279293
override public init(frame: CGRect) {
280294
self.contentTintView = UIView()
281295

submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3044,18 +3044,18 @@ public class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
30443044
}
30453045

30463046
public final class AnimationTransitionReplyPanel {
3047-
public let titleNode: ASDisplayNode
3048-
public let textNode: ASDisplayNode
3049-
public let lineNode: ASDisplayNode
3050-
public let imageNode: ASDisplayNode
3047+
public let titleView: UIView
3048+
public let textView: UIView
3049+
public let lineView: UIView
3050+
public let imageView: UIView?
30513051
public let relativeSourceRect: CGRect
30523052
public let relativeTargetRect: CGRect
30533053

3054-
public init(titleNode: ASDisplayNode, textNode: ASDisplayNode, lineNode: ASDisplayNode, imageNode: ASDisplayNode, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
3055-
self.titleNode = titleNode
3056-
self.textNode = textNode
3057-
self.lineNode = lineNode
3058-
self.imageNode = imageNode
3054+
public init(titleView: UIView, textView: UIView, lineView: UIView, imageView: UIView?, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
3055+
self.titleView = titleView
3056+
self.textView = textView
3057+
self.lineView = lineView
3058+
self.imageView = imageView
30593059
self.relativeSourceRect = relativeSourceRect
30603060
self.relativeTargetRect = relativeTargetRect
30613061
}
@@ -3066,10 +3066,10 @@ public class ChatMessageAnimatedStickerItemNode: ChatMessageItemView {
30663066
let localRect = self.contextSourceNode.contentNode.view.convert(sourceReplyPanel.relativeSourceRect, to: replyInfoNode.view)
30673067

30683068
let mappedPanel = ChatMessageReplyInfoNode.TransitionReplyPanel(
3069-
titleNode: sourceReplyPanel.titleNode,
3070-
textNode: sourceReplyPanel.textNode,
3071-
lineNode: sourceReplyPanel.lineNode,
3072-
imageNode: sourceReplyPanel.imageNode,
3069+
titleView: sourceReplyPanel.titleView,
3070+
textView: sourceReplyPanel.textView,
3071+
lineView: sourceReplyPanel.lineView,
3072+
imageView: sourceReplyPanel.imageView,
30733073
relativeSourceRect: sourceReplyPanel.relativeSourceRect,
30743074
relativeTargetRect: sourceReplyPanel.relativeTargetRect
30753075
)

submodules/TelegramUI/Components/Chat/ChatMessageBubbleItemNode/Sources/ChatMessageBubbleItemNode.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,18 +1094,18 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
10941094
}
10951095

10961096
public final class AnimationTransitionReplyPanel {
1097-
public let titleNode: ASDisplayNode
1098-
public let textNode: ASDisplayNode
1099-
public let lineNode: ASDisplayNode
1100-
public let imageNode: ASDisplayNode
1097+
public let titleView: UIView
1098+
public let textView: UIView
1099+
public let lineView: UIView
1100+
public let imageView: UIView?
11011101
public let relativeSourceRect: CGRect
11021102
public let relativeTargetRect: CGRect
11031103

1104-
public init(titleNode: ASDisplayNode, textNode: ASDisplayNode, lineNode: ASDisplayNode, imageNode: ASDisplayNode, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
1105-
self.titleNode = titleNode
1106-
self.textNode = textNode
1107-
self.lineNode = lineNode
1108-
self.imageNode = imageNode
1104+
public init(titleView: UIView, textView: UIView, lineView: UIView, imageView: UIView?, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
1105+
self.titleView = titleView
1106+
self.textView = textView
1107+
self.lineView = lineView
1108+
self.imageView = imageView
11091109
self.relativeSourceRect = relativeSourceRect
11101110
self.relativeTargetRect = relativeTargetRect
11111111
}
@@ -1115,10 +1115,10 @@ public class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewI
11151115
if let replyInfoNode = self.replyInfoNode {
11161116
let localRect = self.mainContextSourceNode.contentNode.view.convert(sourceReplyPanel.relativeSourceRect, to: replyInfoNode.view)
11171117
let mappedPanel = ChatMessageReplyInfoNode.TransitionReplyPanel(
1118-
titleNode: sourceReplyPanel.titleNode,
1119-
textNode: sourceReplyPanel.textNode,
1120-
lineNode: sourceReplyPanel.lineNode,
1121-
imageNode: sourceReplyPanel.imageNode,
1118+
titleView: sourceReplyPanel.titleView,
1119+
textView: sourceReplyPanel.textView,
1120+
lineView: sourceReplyPanel.lineView,
1121+
imageView: sourceReplyPanel.imageView,
11221122
relativeSourceRect: sourceReplyPanel.relativeSourceRect,
11231123
relativeTargetRect: sourceReplyPanel.relativeTargetRect
11241124
)

submodules/TelegramUI/Components/Chat/ChatMessageReplyInfoNode/Sources/ChatMessageReplyInfoNode.swift

Lines changed: 48 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,18 @@ private let groupIcon: UIImage = {
5858

5959
public class ChatMessageReplyInfoNode: ASDisplayNode {
6060
public final class TransitionReplyPanel {
61-
public let titleNode: ASDisplayNode
62-
public let textNode: ASDisplayNode
63-
public let lineNode: ASDisplayNode
64-
public let imageNode: ASDisplayNode
61+
public let titleView: UIView
62+
public let textView: UIView
63+
public let lineView: UIView
64+
public let imageView: UIView?
6565
public let relativeSourceRect: CGRect
6666
public let relativeTargetRect: CGRect
6767

68-
public init(titleNode: ASDisplayNode, textNode: ASDisplayNode, lineNode: ASDisplayNode, imageNode: ASDisplayNode, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
69-
self.titleNode = titleNode
70-
self.textNode = textNode
71-
self.lineNode = lineNode
72-
self.imageNode = imageNode
68+
public init(titleView: UIView, textView: UIView, lineView: UIView, imageView: UIView?, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
69+
self.titleView = titleView
70+
self.textView = textView
71+
self.lineView = lineView
72+
self.imageView = imageView
7373
self.relativeSourceRect = relativeSourceRect
7474
self.relativeTargetRect = relativeTargetRect
7575
}
@@ -971,84 +971,88 @@ public class ChatMessageReplyInfoNode: ASDisplayNode {
971971

972972
if let titleNode = self.titleNode {
973973
let offset = CGPoint(
974-
x: localRect.minX + sourceReplyPanel.titleNode.frame.minX - titleNode.frame.minX,
975-
y: localRect.minY + sourceReplyPanel.titleNode.frame.midY - titleNode.frame.midY
974+
x: localRect.minX + sourceReplyPanel.titleView.frame.minX - titleNode.frame.minX,
975+
y: localRect.minY + sourceReplyPanel.titleView.frame.midY - titleNode.frame.midY
976976
)
977977

978978
transition.horizontal.animatePositionAdditive(node: titleNode, offset: CGPoint(x: offset.x, y: 0.0))
979979
transition.vertical.animatePositionAdditive(node: titleNode, offset: CGPoint(x: 0.0, y: offset.y))
980980

981-
sourceParentNode.addSubnode(sourceReplyPanel.titleNode)
981+
sourceParentNode.view.addSubview(sourceReplyPanel.titleView)
982982

983983
titleNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1)
984984

985-
sourceReplyPanel.titleNode.frame = sourceReplyPanel.titleNode.frame
985+
sourceReplyPanel.titleView.frame = sourceReplyPanel.titleView.frame
986986
.offsetBy(dx: sourceParentOffset.x, dy: sourceParentOffset.y)
987987
.offsetBy(dx: localRect.minX - offset.x, dy: localRect.minY - offset.y)
988-
transition.horizontal.animatePositionAdditive(node: sourceReplyPanel.titleNode, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
989-
transition.vertical.animatePositionAdditive(node: sourceReplyPanel.titleNode, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
988+
transition.horizontal.animatePositionAdditive(layer: sourceReplyPanel.titleView.layer, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
989+
transition.vertical.animatePositionAdditive(layer: sourceReplyPanel.titleView.layer, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
990990
}
991991

992992
if let textNode = self.textNode {
993993
let offset = CGPoint(
994-
x: localRect.minX + sourceReplyPanel.textNode.frame.minX - textNode.textNode.frame.minX,
995-
y: localRect.minY + sourceReplyPanel.textNode.frame.midY - textNode.textNode.frame.midY
994+
x: localRect.minX + sourceReplyPanel.textView.frame.minX - textNode.textNode.frame.minX,
995+
y: localRect.minY + sourceReplyPanel.textView.frame.midY - textNode.textNode.frame.midY
996996
)
997997

998998
transition.horizontal.animatePositionAdditive(node: textNode.textNode, offset: CGPoint(x: offset.x, y: 0.0))
999999
transition.vertical.animatePositionAdditive(node: textNode.textNode, offset: CGPoint(x: 0.0, y: offset.y))
10001000

1001-
sourceParentNode.addSubnode(sourceReplyPanel.textNode)
1001+
sourceParentNode.view.addSubview(sourceReplyPanel.textView)
10021002

10031003
textNode.textNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1)
10041004

1005-
sourceReplyPanel.textNode.frame = sourceReplyPanel.textNode.frame
1005+
sourceReplyPanel.textView.frame = sourceReplyPanel.textView.frame
10061006
.offsetBy(dx: sourceParentOffset.x, dy: sourceParentOffset.y)
10071007
.offsetBy(dx: localRect.minX - offset.x, dy: localRect.minY - offset.y)
1008-
transition.horizontal.animatePositionAdditive(node: sourceReplyPanel.textNode, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
1009-
transition.vertical.animatePositionAdditive(node: sourceReplyPanel.textNode, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
1008+
transition.horizontal.animatePositionAdditive(layer: sourceReplyPanel.textView.layer, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
1009+
transition.vertical.animatePositionAdditive(layer: sourceReplyPanel.textView.layer, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
10101010
}
10111011

10121012
if let imageNode = self.imageNode {
1013-
let offset = CGPoint(
1014-
x: localRect.minX + sourceReplyPanel.imageNode.frame.midX - imageNode.frame.midX,
1015-
y: localRect.minY + sourceReplyPanel.imageNode.frame.midY - imageNode.frame.midY
1016-
)
1017-
1018-
transition.horizontal.animatePositionAdditive(node: imageNode, offset: CGPoint(x: offset.x, y: 0.0))
1019-
transition.vertical.animatePositionAdditive(node: imageNode, offset: CGPoint(x: 0.0, y: offset.y))
1020-
1021-
sourceParentNode.addSubnode(sourceReplyPanel.imageNode)
1022-
1023-
imageNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1)
1024-
1025-
sourceReplyPanel.imageNode.frame = sourceReplyPanel.imageNode.frame
1026-
.offsetBy(dx: sourceParentOffset.x, dy: sourceParentOffset.y)
1027-
.offsetBy(dx: localRect.minX - offset.x, dy: localRect.minY - offset.y)
1028-
transition.horizontal.animatePositionAdditive(node: sourceReplyPanel.imageNode, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
1029-
transition.vertical.animatePositionAdditive(node: sourceReplyPanel.imageNode, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
1013+
if let sourceImageView = sourceReplyPanel.imageView {
1014+
let offset = CGPoint(
1015+
x: localRect.minX + sourceImageView.frame.midX - imageNode.frame.midX,
1016+
y: localRect.minY + sourceImageView.frame.midY - imageNode.frame.midY
1017+
)
1018+
1019+
transition.horizontal.animatePositionAdditive(node: imageNode, offset: CGPoint(x: offset.x, y: 0.0))
1020+
transition.vertical.animatePositionAdditive(node: imageNode, offset: CGPoint(x: 0.0, y: offset.y))
1021+
1022+
sourceParentNode.view.addSubview(sourceImageView)
1023+
1024+
imageNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1)
1025+
1026+
sourceImageView.frame = sourceImageView.frame
1027+
.offsetBy(dx: sourceParentOffset.x, dy: sourceParentOffset.y)
1028+
.offsetBy(dx: localRect.minX - offset.x, dy: localRect.minY - offset.y)
1029+
transition.horizontal.animatePositionAdditive(layer: sourceImageView.layer, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
1030+
transition.vertical.animatePositionAdditive(layer: sourceImageView.layer, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
1031+
} else {
1032+
imageNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1)
1033+
}
10301034
}
10311035

10321036
do {
10331037
let backgroundView = self.backgroundView
10341038

10351039
let offset = CGPoint(
1036-
x: localRect.minX + sourceReplyPanel.lineNode.frame.minX - backgroundView.frame.minX,
1037-
y: localRect.minY + sourceReplyPanel.lineNode.frame.minY - backgroundView.frame.minY
1040+
x: localRect.minX + sourceReplyPanel.lineView.frame.minX - backgroundView.frame.minX,
1041+
y: localRect.minY + sourceReplyPanel.lineView.frame.minY - backgroundView.frame.minY
10381042
)
10391043

10401044
transition.horizontal.animatePositionAdditive(layer: backgroundView.layer, offset: CGPoint(x: offset.x, y: 0.0))
10411045
transition.vertical.animatePositionAdditive(layer: backgroundView.layer, offset: CGPoint(x: 0.0, y: offset.y))
10421046

1043-
sourceParentNode.addSubnode(sourceReplyPanel.lineNode)
1047+
sourceParentNode.view.addSubview(sourceReplyPanel.lineView)
10441048

10451049
backgroundView.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.1)
10461050

1047-
sourceReplyPanel.lineNode.frame = sourceReplyPanel.lineNode.frame
1051+
sourceReplyPanel.lineView.frame = sourceReplyPanel.lineView.frame
10481052
.offsetBy(dx: sourceParentOffset.x, dy: sourceParentOffset.y)
10491053
.offsetBy(dx: localRect.minX - offset.x, dy: localRect.minY - offset.y)
1050-
transition.horizontal.animatePositionAdditive(node: sourceReplyPanel.lineNode, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
1051-
transition.vertical.animatePositionAdditive(node: sourceReplyPanel.lineNode, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
1054+
transition.horizontal.animatePositionAdditive(layer: sourceReplyPanel.lineView.layer, offset: CGPoint(x: offset.x, y: 0.0), removeOnCompletion: false)
1055+
transition.vertical.animatePositionAdditive(layer: sourceReplyPanel.lineView.layer, offset: CGPoint(x: 0.0, y: offset.y), removeOnCompletion: false)
10521056

10531057
return offset
10541058
}

submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2160,18 +2160,18 @@ public class ChatMessageStickerItemNode: ChatMessageItemView {
21602160
}
21612161

21622162
public final class AnimationTransitionReplyPanel {
2163-
public let titleNode: ASDisplayNode
2164-
public let textNode: ASDisplayNode
2165-
public let lineNode: ASDisplayNode
2166-
public let imageNode: ASDisplayNode
2163+
public let titleView: UIView
2164+
public let textView: UIView
2165+
public let lineView: UIView
2166+
public let imageView: UIView?
21672167
public let relativeSourceRect: CGRect
21682168
public let relativeTargetRect: CGRect
21692169

2170-
public init(titleNode: ASDisplayNode, textNode: ASDisplayNode, lineNode: ASDisplayNode, imageNode: ASDisplayNode, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
2171-
self.titleNode = titleNode
2172-
self.textNode = textNode
2173-
self.lineNode = lineNode
2174-
self.imageNode = imageNode
2170+
public init(titleView: UIView, textView: UIView, lineView: UIView, imageView: UIView?, relativeSourceRect: CGRect, relativeTargetRect: CGRect) {
2171+
self.titleView = titleView
2172+
self.textView = textView
2173+
self.lineView = lineView
2174+
self.imageView = imageView
21752175
self.relativeSourceRect = relativeSourceRect
21762176
self.relativeTargetRect = relativeTargetRect
21772177
}
@@ -2181,10 +2181,10 @@ public class ChatMessageStickerItemNode: ChatMessageItemView {
21812181
if let replyInfoNode = self.replyInfoNode {
21822182
let localRect = self.contextSourceNode.contentNode.view.convert(sourceReplyPanel.relativeSourceRect, to: replyInfoNode.view)
21832183
let mappedPanel = ChatMessageReplyInfoNode.TransitionReplyPanel(
2184-
titleNode: sourceReplyPanel.titleNode,
2185-
textNode: sourceReplyPanel.textNode,
2186-
lineNode: sourceReplyPanel.lineNode,
2187-
imageNode: sourceReplyPanel.imageNode,
2184+
titleView: sourceReplyPanel.titleView,
2185+
textView: sourceReplyPanel.textView,
2186+
lineView: sourceReplyPanel.lineView,
2187+
imageView: sourceReplyPanel.imageView,
21882188
relativeSourceRect: sourceReplyPanel.relativeSourceRect,
21892189
relativeTargetRect: sourceReplyPanel.relativeTargetRect
21902190
)

submodules/TelegramUI/Components/Chat/ChatMessageTextBubbleContentNode/Sources/ChatMessageTextBubbleContentNode.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1633,6 +1633,7 @@ public class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode {
16331633
}
16341634

16351635
public func animateFrom(sourceView: UIView, scrollOffset: CGFloat, widthDifference: CGFloat, transition: CombinedTransition) {
1636+
self.containerNode.clipsToBounds = false
16361637
self.containerNode.view.addSubview(sourceView)
16371638

16381639
sourceView.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.1, removeOnCompletion: false, completion: { [weak sourceView] _ in
@@ -1645,7 +1646,12 @@ public class ChatMessageTextBubbleContentNode: ChatMessageBubbleContentNode {
16451646
y: sourceView.frame.minY - (self.textNode.textNode.frame.minY - 3.0) - scrollOffset
16461647
)
16471648

1648-
transition.vertical.animatePositionAdditive(node: self.textNode.textNode, offset: offset)
1649+
transition.vertical.animatePositionAdditive(layer: self.textNode.textNode.layer, offset: offset, completion: { [weak self] _ in
1650+
guard let self else {
1651+
return
1652+
}
1653+
self.containerNode.clipsToBounds = true
1654+
})
16491655
transition.updatePosition(layer: sourceView.layer, position: CGPoint(x: sourceView.layer.position.x - offset.x, y: sourceView.layer.position.y - offset.y))
16501656

16511657
if let statusNode = self.statusNode {

0 commit comments

Comments
 (0)