From 04705d4d09c6e81fa970b19f3a058b25673dcdff Mon Sep 17 00:00:00 2001 From: Ali <> Date: Sat, 11 Nov 2023 23:03:53 +0400 Subject: [PATCH] [Demo] Sticker dust effect --- .../ChatMessageAnimatedStickerItemNode.swift | 17 +++++++++++++++++ .../Sources/ChatMessageStickerItemNode.swift | 17 +++++++++++++++++ .../DustEffect/Sources/DustEffectLayer.swift | 1 + 3 files changed, 35 insertions(+) diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift index 7ea7fa2482..35657bfd4b 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageAnimatedStickerItemNode/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -2952,6 +2952,23 @@ public class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { override public func contentFrame() -> CGRect { return self.imageNode.frame } + + override public func makeContentSnapshot() -> (UIImage, CGRect)? { + UIGraphicsBeginImageContextWithOptions(self.imageNode.view.bounds.size, false, 0.0) + let context = UIGraphicsGetCurrentContext()! + + context.translateBy(x: -self.imageNode.frame.minX, y: -self.imageNode.frame.minY) + self.view.layer.render(in: context) + + let image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + guard let image else { + return nil + } + + return (image, self.imageNode.frame) + } } public struct AnimatedEmojiSoundsConfiguration { diff --git a/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift index 3c15eb6de6..8d510a51b1 100644 --- a/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Components/Chat/ChatMessageStickerItemNode/Sources/ChatMessageStickerItemNode.swift @@ -2052,4 +2052,21 @@ public class ChatMessageStickerItemNode: ChatMessageItemView { override public func contentFrame() -> CGRect { return self.imageNode.frame } + + override public func makeContentSnapshot() -> (UIImage, CGRect)? { + UIGraphicsBeginImageContextWithOptions(self.imageNode.view.bounds.size, false, 0.0) + let context = UIGraphicsGetCurrentContext()! + + context.translateBy(x: -self.imageNode.frame.minX, y: -self.imageNode.frame.minY) + self.view.layer.render(in: context) + + let image = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + guard let image else { + return nil + } + + return (image, self.imageNode.frame) + } } diff --git a/submodules/TelegramUI/Components/DustEffect/Sources/DustEffectLayer.swift b/submodules/TelegramUI/Components/DustEffect/Sources/DustEffectLayer.swift index a8d9b6fa4d..9b6aa7b63a 100644 --- a/submodules/TelegramUI/Components/DustEffect/Sources/DustEffectLayer.swift +++ b/submodules/TelegramUI/Components/DustEffect/Sources/DustEffectLayer.swift @@ -166,6 +166,7 @@ public final class DustEffectLayer: MetalEngineSubjectLayer, MetalEngineSubject if let item = Item(frame: frame, image: image) { self.items.append(item) self.updateNeedsAnimation() + self.setNeedsUpdate() } }