mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-24 07:05:35 +00:00
Various Improvements
This commit is contained in:
@@ -11,6 +11,7 @@ import AnimatedStickerNode
|
||||
import TelegramAnimatedStickerNode
|
||||
import TelegramPresentationData
|
||||
import ShimmerEffect
|
||||
import SoftwareVideo
|
||||
|
||||
final class StickerPackPreviewInteraction {
|
||||
var previewedItem: ImportStickerPack.Sticker?
|
||||
@@ -60,6 +61,7 @@ final class StickerPackPreviewGridItemNode: GridItemNode {
|
||||
private var isVerified: Bool?
|
||||
private let imageNode: ASImageNode
|
||||
private var animationNode: AnimatedStickerNode?
|
||||
private var videoNode: VideoStickerNode?
|
||||
private var placeholderNode: ShimmerEffectNode?
|
||||
|
||||
private var theme: PresentationTheme?
|
||||
@@ -145,6 +147,39 @@ final class StickerPackPreviewGridItemNode: GridItemNode {
|
||||
let placeholderNode = ShimmerEffectNode()
|
||||
self.placeholderNode = placeholderNode
|
||||
|
||||
self.addSubnode(placeholderNode)
|
||||
if let (absoluteRect, containerSize) = self.absoluteLocation {
|
||||
placeholderNode.updateAbsoluteRect(absoluteRect, within: containerSize)
|
||||
}
|
||||
}
|
||||
case .video:
|
||||
self.imageNode.isHidden = true
|
||||
|
||||
if isVerified {
|
||||
let videoNode = VideoStickerNode()
|
||||
self.videoNode = videoNode
|
||||
|
||||
if let resource = stickerItem.resource as? TelegramMediaResource {
|
||||
let dummyFile = TelegramMediaFile(fileId: MediaId(namespace: 0, id: 1), partialReference: nil, resource: resource, previewRepresentations: [], videoThumbnails: [], immediateThumbnailData: nil, mimeType: "video/webm", size: resource.size ?? 1, attributes: [.Video(duration: 1, size: PixelDimensions(width: 100, height: 100), flags: [])])
|
||||
|
||||
videoNode.update(account: account, fileReference: .standalone(media: dummyFile))
|
||||
}
|
||||
|
||||
if let placeholderNode = self.placeholderNode {
|
||||
self.placeholderNode = nil
|
||||
placeholderNode.layer.animateAlpha(from: 1.0, to: 0.0, duration: 0.3, removeOnCompletion: false, completion: { [weak placeholderNode] _ in
|
||||
placeholderNode?.removeFromSupernode()
|
||||
})
|
||||
self.insertSubnode(videoNode, belowSubnode: placeholderNode)
|
||||
} else {
|
||||
self.addSubnode(videoNode)
|
||||
}
|
||||
|
||||
videoNode.update(isPlaying: self.isVisibleInGrid && self.interaction?.playAnimatedStickers ?? true)
|
||||
} else {
|
||||
let placeholderNode = ShimmerEffectNode()
|
||||
self.placeholderNode = placeholderNode
|
||||
|
||||
self.addSubnode(placeholderNode)
|
||||
if let (absoluteRect, containerSize) = self.absoluteLocation {
|
||||
placeholderNode.updateAbsoluteRect(absoluteRect, within: containerSize)
|
||||
@@ -175,6 +210,11 @@ final class StickerPackPreviewGridItemNode: GridItemNode {
|
||||
animationNode.updateLayout(size: imageSize)
|
||||
}
|
||||
|
||||
if let videoNode = self.videoNode {
|
||||
videoNode.frame = CGRect(origin: CGPoint(x: floor((bounds.size.width - imageSize.width) / 2.0), y: (bounds.size.height - imageSize.height) / 2.0), size: imageSize)
|
||||
videoNode.updateLayout(size: imageSize)
|
||||
}
|
||||
|
||||
if let placeholderNode = self.placeholderNode, let theme = self.theme {
|
||||
placeholderNode.update(backgroundColor: theme.list.itemBlocksBackgroundColor, foregroundColor: theme.list.mediaPlaceholderColor, shimmeringColor: theme.list.itemBlocksBackgroundColor.withAlphaComponent(0.4), shapes: [.roundedRect(rect: CGRect(origin: CGPoint(), size: imageSize), cornerRadius: 11.0)], horizontal: true, size: imageSize)
|
||||
placeholderNode.frame = self.imageNode.frame
|
||||
|
||||
Reference in New Issue
Block a user