From 88e07a974f66656afc5b635c4a7f926fbb6559a8 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Thu, 20 Oct 2022 12:56:33 +0300 Subject: [PATCH] Various fixes --- .../TelegramUI/Sources/ChatLoadingNode.swift | 7 ++++-- .../ChatMessageAnimatedStickerItemNode.swift | 3 ++- .../Sources/ChatMessageBubbleItemNode.swift | 3 ++- .../ChatMessageInstantVideoItemNode.swift | 3 ++- .../Sources/ChatMessageStickerItemNode.swift | 3 ++- .../Sources/ChatMessageSwipeToReplyNode.swift | 22 ++++++++++++++----- 6 files changed, 29 insertions(+), 12 deletions(-) diff --git a/submodules/TelegramUI/Sources/ChatLoadingNode.swift b/submodules/TelegramUI/Sources/ChatLoadingNode.swift index fe5b561203..3f76c67250 100644 --- a/submodules/TelegramUI/Sources/ChatLoadingNode.swift +++ b/submodules/TelegramUI/Sources/ChatLoadingNode.swift @@ -177,7 +177,7 @@ final class ChatLoadingPlaceholderNode: ASDisplayNode { let bubbleBorderImage = messageBubbleImage(maxCornerRadius: bubbleCorners.mainRadius, minCornerRadius: bubbleCorners.auxiliaryRadius, incoming: true, fillColor: .clear, strokeColor: .red, neighbors: .none, theme: theme.chat, wallpaper: .color(0xffffff), knockout: true, mask: true, extendedEdges: true, onlyOutline: true) var messageContainers: [ChatLoadingPlaceholderMessageContainer] = [] - for _ in 0 ..< 8 { + for _ in 0 ..< 11 { let container = ChatLoadingPlaceholderMessageContainer(bubbleImage: bubbleImage, bubbleBorderImage: bubbleBorderImage) container.setup(maskNode: self.maskNode, borderMaskNode: self.borderMaskNode) messageContainers.append(container) @@ -394,6 +394,9 @@ final class ChatLoadingPlaceholderNode: ASDisplayNode { CGSize(width: floorToScreenPixels(0.36 * size.width), height: shortHeight), CGSize(width: floorToScreenPixels(0.47 * size.width), height: tallHeight), CGSize(width: floorToScreenPixels(0.57 * size.width), height: tallHeight), + CGSize(width: floorToScreenPixels(0.73 * size.width), height: tallHeight), + CGSize(width: floorToScreenPixels(0.36 * size.width), height: tallHeight), + CGSize(width: floorToScreenPixels(0.57 * size.width), height: shortHeight), ] var offset: CGFloat = 5.0 @@ -403,7 +406,7 @@ final class ChatLoadingPlaceholderNode: ASDisplayNode { } for messageContainer in self.messageContainers { - let messageSize = dimensions[index % 8] + let messageSize = dimensions[index % 11] messageContainer.update(size: size, hasAvatar: self.isGroup, rect: CGRect(origin: CGPoint(x: 0.0, y: size.height - insets.bottom - offset - messageSize.height), size: messageSize), transition: transition) offset += messageSize.height index += 1 diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index c4e7adcdea..ded4ba96e5 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -2319,7 +2319,8 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let progress = abs(translation.x) / swipeOffset swipeToReplyNode.updateProgress(progress) - if progress == 1.0 && !self.playedSwipeToReplyHaptic { + if progress > 1.0 - .ulpOfOne && !self.playedSwipeToReplyHaptic { + self.playedSwipeToReplyHaptic = true self.swipeToReplyFeedback?.impact(.heavy) } } diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index f8cf7b0c6b..91fd93c81e 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -3963,7 +3963,8 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode let progress = abs(translation.x) / swipeOffset swipeToReplyNode.updateProgress(progress) - if progress == 1.0 && !self.playedSwipeToReplyHaptic { + if progress > 1.0 - .ulpOfOne && !self.playedSwipeToReplyHaptic { + self.playedSwipeToReplyHaptic = true self.swipeToReplyFeedback?.impact(.heavy) } } diff --git a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift index 6b9346f53e..2901480717 100644 --- a/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageInstantVideoItemNode.swift @@ -1031,7 +1031,8 @@ class ChatMessageInstantVideoItemNode: ChatMessageItemView, UIGestureRecognizerD let progress = abs(translation.x) / swipeOffset swipeToReplyNode.updateProgress(progress) - if progress == 1.0 && !self.playedSwipeToReplyHaptic { + if progress > 1.0 - .ulpOfOne && !self.playedSwipeToReplyHaptic { + self.playedSwipeToReplyHaptic = true self.swipeToReplyFeedback?.impact(.heavy) } } diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index aea7fe6b5f..3f45d85c54 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -1283,7 +1283,8 @@ class ChatMessageStickerItemNode: ChatMessageItemView { let progress = abs(translation.x) / swipeOffset swipeToReplyNode.updateProgress(progress) - if progress == 1.0 && !self.playedSwipeToReplyHaptic { + if progress > 1.0 - .ulpOfOne && !self.playedSwipeToReplyHaptic { + self.playedSwipeToReplyHaptic = true self.swipeToReplyFeedback?.impact(.heavy) } } diff --git a/submodules/TelegramUI/Sources/ChatMessageSwipeToReplyNode.swift b/submodules/TelegramUI/Sources/ChatMessageSwipeToReplyNode.swift index 582cfc2b4b..590e43752b 100644 --- a/submodules/TelegramUI/Sources/ChatMessageSwipeToReplyNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageSwipeToReplyNode.swift @@ -20,8 +20,9 @@ final class ChatMessageSwipeToReplyNode: ASDisplayNode { private let foregroundNode: ASImageNode private let maskNode: ASDisplayNode - private let progressLayer: CAShapeLayer - private let fillLayer: CAShapeLayer + private let progressLayer: SimpleShapeLayer + private let fillLayer: SimpleShapeLayer + private let semiFillLayer: SimpleShapeLayer private var absolutePosition: (CGRect, CGSize)? @@ -67,9 +68,10 @@ final class ChatMessageSwipeToReplyNode: ASDisplayNode { }) self.maskNode = ASDisplayNode() - self.progressLayer = CAShapeLayer() - self.fillLayer = CAShapeLayer() - + self.progressLayer = SimpleShapeLayer() + self.fillLayer = SimpleShapeLayer() + self.semiFillLayer = SimpleShapeLayer() + super.init() self.allowsGroupOpacity = true @@ -78,6 +80,7 @@ final class ChatMessageSwipeToReplyNode: ASDisplayNode { self.maskNode.layer.addSublayer(self.progressLayer) self.maskNode.layer.addSublayer(self.fillLayer) + self.maskNode.layer.addSublayer(self.semiFillLayer) self.addSubnode(self.foregroundNode) @@ -95,11 +98,16 @@ final class ChatMessageSwipeToReplyNode: ASDisplayNode { self.fillLayer.strokeColor = UIColor.white.cgColor self.fillLayer.fillColor = UIColor.clear.cgColor self.fillLayer.isHidden = true + + self.semiFillLayer.fillColor = UIColor(rgb: 0xffffff, alpha: 0.6).cgColor self.maskNode.frame = CGRect(origin: CGPoint(x: 22.0, y: 22.0), size: backgroundFrame.size) self.progressLayer.frame = CGRect(origin: .zero, size: size).insetBy(dx: -20.0, dy: -20.0) self.fillLayer.frame = CGRect(origin: .zero, size: size) + self.semiFillLayer.frame = self.fillLayer.frame + self.semiFillLayer.path = UIBezierPath(ovalIn: self.semiFillLayer.bounds).cgPath + let path = UIBezierPath(arcCenter: CGPoint(x: self.progressLayer.frame.width / 2.0, y: self.progressLayer.frame.height / 2.0), radius: size.width / 2.0, startAngle: CGFloat(-0.5 * .pi), endAngle: CGFloat(1.5 * .pi), clockwise: true) self.progressLayer.path = path.cgPath @@ -154,6 +162,8 @@ final class ChatMessageSwipeToReplyNode: ASDisplayNode { self.maskNode.alpha = progress } + self.semiFillLayer.opacity = Float(progress) + self.layer.sublayerTransform = CATransform3DMakeScale(scaleProgress, scaleProgress, 1.0) self.foregroundNode.alpha = foregroundProgress @@ -180,7 +190,7 @@ final class ChatMessageSwipeToReplyNode: ASDisplayNode { var path = self.progressLayer.path var targetPath = UIBezierPath(arcCenter: CGPoint(x: self.progressLayer.frame.width / 2.0, y: self.progressLayer.frame.height / 2.0), radius: 35.0, startAngle: CGFloat(-0.5 * .pi), endAngle: CGFloat(-0.5 * .pi + 2.0 * .pi), clockwise: true).cgPath self.progressLayer.path = targetPath - self.progressLayer.animate(from: path, to: targetPath, keyPath: "path", timingFunction: kCAMediaTimingFunctionSpring, duration: 0.2) + self.progressLayer.animate(from: path, to: targetPath, keyPath: "path", timingFunction: kCAMediaTimingFunctionSpring, duration: 0.25) self.fillLayer.isHidden = false self.fillLayer.path = UIBezierPath(ovalIn: CGRect(origin: .zero, size: size)).cgPath