From 34e1924d8f1ea85eff2e2c95ac499dfb3e41be31 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 15 Dec 2020 09:17:03 +0400 Subject: [PATCH] Use immediate thumbnails on static stickers --- .../Sources/StickerResources.swift | 4 +++ .../Sources/ChatMessageStickerItemNode.swift | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/submodules/StickerResources/Sources/StickerResources.swift b/submodules/StickerResources/Sources/StickerResources.swift index 1a6e7c31c4..b41cfecd44 100644 --- a/submodules/StickerResources/Sources/StickerResources.swift +++ b/submodules/StickerResources/Sources/StickerResources.swift @@ -402,6 +402,10 @@ public func chatMessageSticker(postbox: Postbox, file: TelegramMediaFile, small: return nil } + if file.immediateThumbnailData != nil && fullSizeData == nil { + return nil + } + let context = DrawingContext(size: arguments.drawingSize, scale: arguments.scale ?? 0.0, clear: arguments.emptyColor == nil) let drawingRect = arguments.drawingRect diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index aa3eb8bea8..a6080de5b2 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -58,6 +58,17 @@ class ChatMessageStickerItemNode: ChatMessageItemView { super.init(layerBacked: false) + var firstTime = true + self.imageNode.imageUpdated = { [weak self] image in + guard let strongSelf = self else { + return + } + if image != nil { + strongSelf.removePlaceholder(animated: !firstTime) + } + firstTime = false + } + self.containerNode.shouldBegin = { [weak self] location in guard let strongSelf = self else { return false @@ -215,6 +226,19 @@ class ChatMessageStickerItemNode: ChatMessageItemView { } } + private var absoluteRect: (CGRect, CGSize)? + override func updateAbsoluteRect(_ rect: CGRect, within containerSize: CGSize) { + self.absoluteRect = (rect, containerSize) + if !self.contextSourceNode.isExtractedToContextPreview { + var rect = rect + rect.origin.y = containerSize.height - rect.maxY + self.insets.top + + if let placeholderNode = self.placeholderNode { + placeholderNode.updateAbsoluteRect(CGRect(origin: CGPoint(x: rect.minX + placeholderNode.frame.minX, y: rect.minY + placeholderNode.frame.minY), size: placeholderNode.frame.size), within: containerSize) + } + } + } + override func asyncLayout() -> (_ item: ChatMessageItem, _ params: ListViewItemLayoutParams, _ mergedTop: ChatMessageMerge, _ mergedBottom: ChatMessageMerge, _ dateHeaderAtBottom: Bool) -> (ListViewItemNodeLayout, (ListViewItemUpdateAnimation, Bool) -> Void) { let displaySize = CGSize(width: 184.0, height: 184.0) let telegramFile = self.telegramFile @@ -578,6 +602,15 @@ class ChatMessageStickerItemNode: ChatMessageItemView { transition.updateFrame(node: strongSelf.imageNode, frame: updatedImageFrame) imageApply() + if let immediateThumbnailData = telegramFile?.immediateThumbnailData, let placeholderNode = strongSelf.placeholderNode { + let foregroundColor = bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.message.stickerPlaceholderColor, wallpaper: item.presentationData.theme.wallpaper) + let shimmeringColor = bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.message.stickerPlaceholderShimmerColor, wallpaper: item.presentationData.theme.wallpaper) + + let placeholderFrame = updatedImageFrame.insetBy(dx: innerImageInset, dy: innerImageInset) + placeholderNode.update(backgroundColor: nil, foregroundColor: foregroundColor, shimmeringColor: shimmeringColor, data: immediateThumbnailData, size: placeholderFrame.size) + placeholderNode.frame = placeholderFrame + } + strongSelf.containerNode.frame = CGRect(origin: CGPoint(), size: layoutSize) strongSelf.contextSourceNode.frame = CGRect(origin: CGPoint(), size: layoutSize) strongSelf.contextSourceNode.contentNode.frame = CGRect(origin: CGPoint(), size: layoutSize)