@@ -13,13 +13,15 @@ import TelegramMedia
1313class AnimatedStickerHeaderItem : GeneralRowItem {
1414 fileprivate let context : AccountContext
1515 fileprivate let textLayout : TextViewLayout
16- fileprivate let sticker : LocalAnimatedSticker
16+ fileprivate let sticker : LocalAnimatedSticker ?
1717 let stickerSize : NSSize
1818 let bgColor : NSColor ?
1919 let modify : [ String ] ?
2020 let isFullView : Bool
21- init ( _ initialSize: NSSize , stableId: AnyHashable , context: AccountContext , sticker: LocalAnimatedSticker , text: NSAttributedString , stickerSize: NSSize = NSMakeSize ( 120 , 120 ) , bgColor: NSColor ? = nil , modify: [ String ] ? = nil , isFullView: Bool = false ) {
21+ let image : CGImage ?
22+ init ( _ initialSize: NSSize , stableId: AnyHashable , context: AccountContext , sticker: LocalAnimatedSticker ? , text: NSAttributedString , stickerSize: NSSize = NSMakeSize ( 120 , 120 ) , bgColor: NSColor ? = nil , modify: [ String ] ? = nil , isFullView: Bool = false , image: CGImage ? = nil ) {
2223 self . context = context
24+ self . image = image
2325 self . sticker = sticker
2426 self . stickerSize = stickerSize
2527 self . bgColor = bgColor
@@ -63,12 +65,12 @@ class AnimatedStickerHeaderItem: GeneralRowItem {
6365
6466
6567private final class AnimtedStickerHeaderView : TableRowView {
66- private let imageView : MediaAnimatedStickerView = MediaAnimatedStickerView ( frame: . zero)
68+ private var animationView : MediaAnimatedStickerView ?
69+ private var imageView : ImageView ?
6770 private let textView : TextView = TextView ( )
6871 private var bgView : View ?
6972 required init ( frame frameRect: NSRect ) {
7073 super. init ( frame: frameRect)
71- addSubview ( imageView)
7274 addSubview ( textView)
7375
7476 textView. isSelectable = false
@@ -90,15 +92,62 @@ private final class AnimtedStickerHeaderView : TableRowView {
9092
9193 guard let item = item as? AnimatedStickerHeaderItem else { return }
9294
93- let params = item. sticker. parameters
95+ if let sticker = item. sticker {
96+
97+ if let view = self . imageView {
98+ performSubviewRemoval ( view, animated: animated)
99+ self . imageView = nil
100+ }
101+
102+ let current : MediaAnimatedStickerView
103+ if let view = self . animationView {
104+ current = view
105+ } else {
106+ current = MediaAnimatedStickerView ( frame: item. stickerSize. bounds)
107+ self . animationView = current
108+ addSubview ( current)
109+ }
110+ let params = sticker. parameters
111+
112+ if let modify = item. modify, let color = item. bgColor {
113+ params. colors = modify. map {
114+ . init( keyPath: $0, color: color)
115+ }
116+ }
117+
118+ current. update ( with: sticker. file, size: item. stickerSize, context: item. context, parent: nil , table: item. table, parameters: params, animated: animated, positionFlags: nil , approximateSynchronousValue: false )
119+ } else {
120+ if let view = self . animationView {
121+ performSubviewRemoval ( view, animated: animated)
122+ self . animationView = nil
123+ }
124+ }
94125
95- if let modify = item. modify, let color = item. bgColor {
96- params. colors = modify. map {
97- . init( keyPath: $0, color: color)
126+ if let image = item. image {
127+
128+ if let view = self . animationView {
129+ performSubviewRemoval ( view, animated: animated)
130+ self . animationView = nil
131+ }
132+
133+ let current : ImageView
134+ if let view = self . imageView {
135+ current = view
136+ } else {
137+ current = ImageView ( frame: item. stickerSize. bounds)
138+ self . imageView = current
139+ addSubview ( current)
140+ }
141+ current. image = image
142+ current. sizeToFit ( )
143+ } else {
144+ if let view = self . imageView {
145+ performSubviewRemoval ( view, animated: animated)
146+ self . imageView = nil
98147 }
99148 }
100149
101- imageView . update ( with : item . sticker . file , size : item . stickerSize , context : item . context , parent : nil , table : item . table , parameters : params , animated : animated , positionFlags : nil , approximateSynchronousValue : false )
150+
102151
103152// self.imageView.image = item.icon
104153// self.imageView.sizeToFit()
@@ -122,15 +171,21 @@ private final class AnimtedStickerHeaderView : TableRowView {
122171 super. layout ( )
123172 guard let item = item as? AnimatedStickerHeaderItem else { return }
124173
174+ let imageView = self . imageView ?? self . animationView
175+
176+ guard let imageView else {
177+ return
178+ }
179+
125180 if item. isFullView {
126- self . imageView. center ( )
127- self . imageView. setFrameOrigin ( NSMakePoint ( self . imageView. frame. minX, self . imageView. frame. minY - 40 ) )
181+ imageView. center ( )
182+ imageView. setFrameOrigin ( NSMakePoint ( imageView. frame. minX, imageView. frame. minY - 40 ) )
128183 } else {
129- self . imageView. centerX ( y: item. inset. top)
184+ imageView. centerX ( y: item. inset. top)
130185 }
131- self . textView. centerX ( y: self . imageView. frame. maxY + item. inset. bottom)
186+ self . textView. centerX ( y: imageView. frame. maxY + item. inset. bottom)
132187
133- self . bgView? . frame = self . imageView. frame
188+ self . bgView? . frame = imageView. frame
134189 }
135190
136191 required init ? ( coder: NSCoder ) {
0 commit comments