From 519370cb3c5fc9efc08610d24a14026be3e793b2 Mon Sep 17 00:00:00 2001 From: Ilya Laktyushin Date: Tue, 2 Aug 2022 19:15:08 +0300 Subject: [PATCH] Various improvements --- .../Sources/BotCheckoutController.swift | 48 +++- .../Sources/ContextActionsContainerNode.swift | 10 +- .../GalleryData/Sources/GalleryData.swift | 10 + submodules/PremiumUI/Resources/emoji.scn | Bin 27377 -> 58408 bytes submodules/PremiumUI/Resources/particles2.png | Bin 0 -> 18162 bytes submodules/PremiumUI/Resources/star | Bin 49037 -> 0 bytes submodules/PremiumUI/Resources/star.scn | Bin 0 -> 109191 bytes submodules/PremiumUI/Resources/swirl.scn | Bin 16713 -> 16724 bytes .../Sources/PremiumStarComponent.swift | 64 ++++-- .../Stickers/SearchStickers.swift | 52 +++-- .../AnimationCache/Sources/ImageData.swift | 6 +- .../Animations/input_anim_smileToSticker.json | 2 +- .../Animations/input_anim_stickerToSmile.json | 2 +- .../Sources/ChatHistoryEntriesForView.swift | 2 +- .../ChatMessageAnimatedStickerItemNode.swift | 216 ++++++++++++++---- .../Sources/ChatMessageBubbleItemNode.swift | 2 +- .../ChatMessageSelectionInputPanelNode.swift | 4 +- .../Sources/ChatMessageStickerItemNode.swift | 4 +- .../TelegramUI/Sources/EmojiResources.swift | 25 +- 19 files changed, 347 insertions(+), 100 deletions(-) create mode 100644 submodules/PremiumUI/Resources/particles2.png delete mode 100644 submodules/PremiumUI/Resources/star create mode 100644 submodules/PremiumUI/Resources/star.scn diff --git a/submodules/BotPaymentsUI/Sources/BotCheckoutController.swift b/submodules/BotPaymentsUI/Sources/BotCheckoutController.swift index 39b3e3251e..fad3844aea 100644 --- a/submodules/BotPaymentsUI/Sources/BotCheckoutController.swift +++ b/submodules/BotPaymentsUI/Sources/BotCheckoutController.swift @@ -133,16 +133,18 @@ public final class BotCheckoutController: ViewController { self?.present(c, in: .window(.root), with: a) }, dismissAnimated: { [weak self] in self?.dismiss() - }, completed: self.completed) + }, completed: { [weak self] currencyValue, receiptMessageId in + self?.complete(currencyValue: currencyValue, receiptMessageId: receiptMessageId) + }) displayNode.dismiss = { [weak self] in self?.presentingViewController?.dismiss(animated: false, completion: nil) } displayNode.pending = { [weak self] in - self?.pending() + self?.setPending() } displayNode.failed = { [weak self] in - self?.failed() + self?.fail() } self.displayNode = displayNode @@ -150,6 +152,12 @@ public final class BotCheckoutController: ViewController { self._ready.set(displayNode.ready) } + override public func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + + self.cancel() + } + override public func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) @@ -167,8 +175,40 @@ public final class BotCheckoutController: ViewController { self.controllerNode.containerLayoutUpdated(layout, navigationBarHeight: self.navigationLayout(layout: layout).navigationFrame.maxY, transition: transition, additionalInsets: UIEdgeInsets()) } - @objc private func cancelPressed() { + private var didCancel = false + private func cancel() { + guard !self.didCancel && !self.didFail && !self.didComplete else { + return + } self.cancelled() + } + + private var didFail = false + private func fail() { + guard !self.didCancel && !self.didFail && !self.didComplete else { + return + } + self.failed() + } + + private var didComplete = false + private func complete(currencyValue: String, receiptMessageId: EngineMessage.Id?) { + guard !self.didCancel && !self.didFail && !self.didComplete else { + return + } + self.completed(currencyValue, receiptMessageId) + } + + private var isPending = false + private func setPending() { + guard !self.isPending && !self.didCancel && !self.didFail && !self.didComplete else { + return + } + self.pending() + } + + @objc private func cancelPressed() { + self.cancel() self.dismiss() } } diff --git a/submodules/ContextUI/Sources/ContextActionsContainerNode.swift b/submodules/ContextUI/Sources/ContextActionsContainerNode.swift index 8c0697bdcc..ea9bf5a775 100644 --- a/submodules/ContextUI/Sources/ContextActionsContainerNode.swift +++ b/submodules/ContextUI/Sources/ContextActionsContainerNode.swift @@ -444,7 +444,8 @@ final class InnerTextSelectionTipContainerNode: ASDisplayNode { guard let strongSelf = self else { return } - strongSelf.updateHighlight(animated: true) + strongSelf.isButtonHighlighted = highlighted + strongSelf.updateHighlight(animated: false) } self.buttonNode.addTarget(self, action: #selector(self.pressed), forControlEvents: .touchUpInside) @@ -545,6 +546,7 @@ final class InnerTextSelectionTipContainerNode: ASDisplayNode { self.textNode.textNode.layer.animateAlpha(from: 0.0, to: 1.0, duration: 0.2) self.placeholderNode.layer.animateAlpha(from: self.placeholderNode.alpha, to: 1.0, duration: 0.2) } + self.textNode.visibilityRect = CGRect.infinite var contentHeight = textLayout.size.height if contentHeight.isZero { @@ -593,7 +595,7 @@ final class InnerTextSelectionTipContainerNode: ASDisplayNode { } func updateHighlight(animated: Bool) { - if self.buttonNode.isHighlighted || self.isHighlighted { + if self.isButtonHighlighted || self.isHighlighted { self.highlightBackgroundNode.alpha = 1.0 } else { if animated { @@ -606,8 +608,8 @@ final class InnerTextSelectionTipContainerNode: ASDisplayNode { } } - - var isHighlighted = false + private var isButtonHighlighted = false + private var isHighlighted = false func setHighlighted(_ highlighted: Bool) { guard self.isHighlighted != highlighted else { return diff --git a/submodules/GalleryData/Sources/GalleryData.swift b/submodules/GalleryData/Sources/GalleryData.swift index a0ab15bc75..6308be5660 100644 --- a/submodules/GalleryData/Sources/GalleryData.swift +++ b/submodules/GalleryData/Sources/GalleryData.swift @@ -98,6 +98,16 @@ public func chatMessageGalleryControllerData(context: AccountContext, chatLocati var galleryMedia: Media? var otherMedia: Media? var instantPageMedia: (TelegramMediaWebpage, [InstantPageGalleryEntry])? + if message.media.isEmpty, let entities = message.textEntitiesAttribute?.entities, entities.count == 1, let firstEntity = entities.first, case let .CustomEmoji(_, fileId) = firstEntity.type, let file = message.associatedMedia[MediaId(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile { + for attribute in file.attributes { + if case let .CustomEmoji(_, _, reference) = attribute { + if let reference = reference { + return .stickerPack(reference) + } + break + } + } + } for media in message.media { if let action = media as? TelegramMediaAction { switch action.action { diff --git a/submodules/PremiumUI/Resources/emoji.scn b/submodules/PremiumUI/Resources/emoji.scn index adca0e2664b6bc1b882f4bd921b9094b094d929b..26255185bd60fcb423a50190f8110ca5998d01e9 100644 GIT binary patch literal 58408 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 T*bOPFBEoj4>3IW?+4KJaIlF%F diff --git a/submodules/PremiumUI/Resources/particles2.png b/submodules/PremiumUI/Resources/particles2.png new file mode 100644 index 0000000000000000000000000000000000000000..ff080854d3a7179a099a90ca476d5ae36c107c7f GIT binary patch literal 18162 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 diff --git a/submodules/PremiumUI/Resources/star.scn b/submodules/PremiumUI/Resources/star.scn new file mode 100644 index 0000000000000000000000000000000000000000..9766b2b26443ea3e632c1279276cc7210eacb860 GIT binary patch literal 109191 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�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 XfSsdrM8Tg-1s{o`a;qW&_HseIDqaM9U`+0m zs1b=8)`@YYRwGw~kGRkZT9dWXG^l8Z@rCc;D{Z5usc8~X8(Zx`psV@SnYCxn`PQEE zeY5w>noo-1Y%#pC_PNk^uE16J5^loZ;NS2F9;2q+K|sVd*cRJid#wha!Y~ZSPS_PW8fa?$u@A=L zARK}&lsEyWVj8BS7qf6S&c{W#7?r#v@pZNAVbbil^}mo~tT?Z4pm{*NN^AKFF%#9rm;{$nfjh zlNLteY4eQ44`_kH!p~^Y;D4{Kocc8S_ zR@esbLIrGhY^T#JV7FtHu=UA&r=3i{9(WjzYrgGp1Zv?Z9D`4w4n9?u63V5dic@Yi zY&(1gC*UNUg453G3Ok_J1h2stO)56R4b@M@hv3if7d1kSRADJzpD(+hAdug>RrF!pyz!ihKuCp*!}=yA|r;S@X1ob}8!OmVR3n2Iy1ZkWEGjL5*5X-S?ZC&`oN z^<{_f*IMF_kY=5k=$qCO7sAX|_1QSf-eN_!31N=C*?Km$Np5_L++i(Z6CJrtV*So7 zYZ2QlRhx#nT6M<=1n?Zw~YKF3$%emvm#gZMsv z09)-OS<=qAs90w=$a~Kmck=WZp1_lM%Dxg;MC$SElqAoTt7NkJfwZ{q^DcczuSRuFurHx=+v6b9BGHL|>{e(_hh*UaT+I zSL&&Yy+!cJJ>F^n^m&CY#*y;2iOsIncZY}*gcNCEpN}Gcr@?E-Fz&cz$fy_d@4`j zsXUGQ`5Zo%=klezgqQL)d>t?2Heb&-@Cv>o$anGGypr$b`*<}!zz^~d_(|Ttukfq< zI=^j%8<9q=A&g;0qA}gbF!GIM#(tyDxM18cZkcFyGkcoU9BfK+j5*$%YNnW}W}2B{ z`phh|$Xsc@ZoX|+nup9w=I7=W^DFZkv(db7{?mMDjj<+K=~gh)3Rp`lWv#H*THCCh z)<@P|>z?(%`oVfAG!Y>>izpE-o)bMpFY$9RR7??>;#ILiye3LSsaPY{i85h}^F7vjDv(q+1ay2b}xS*{}2 zTGt*|t?P=bQMQ#om3?GiIYdsA)8!1AE@w)w^vP_QBmHu&%#{JTKo-b_a>dr>t5szHa~ReJk(7M NJ6&v^w2toO{{hlFf3yGq delta 2009 zcmaizd0Z9O702fsCDka4`f#ZsD)-L4Gp=#T+&AyJ5CLQI5kwv!0wRwGxP%>CaC;L( zf@rAeG+mMs;US=?hOO{6ltLAJN7A76oxLx3B}Li~ZO{Roa0$BL zGx!{S2fv3uz-71rH{lli3m(B^cp}|J2>}uNVSn_K+VDC277oB5v>`)|iZlsToP<+x zItsMo0*uFGOu;nt;Bw5t)wl-N;*an>d>?;|)%XGK!Wyi_={~H(-B^ze*eFewWGNB% z;z2xwzrm03w|E%a@Cbf_NAVaQ$CKEO=dq);1a|vBZ-L9wBuEEOD-Ue(Gq2jd?Y9C} z!m8HCwt#>c*^sj|+7-3B*qxr88R0H=*FiSqN|6cCuAaAx(o!i^8V>nTD0yn3z!+5v zMP?WoGjScPhmEyRV!Tib8;lSmDLyi;5E8$Slb!bmwIDN$!MN$*Tg!SKxXN+PjdLD*}$qj199+wr$>JbFk%hY zf70R*9Qr>x7>ptRPX}M@(ZO+jI(+KT@i^gGnhR2x^a@VKDQ18&wx17QG6yT;*)*TD zQi^=`Z3e!)ENF-;JUYf*SiI7co#`qmD$dODp=PEiq0@DApc7}}ES!yVFbrRjhT~ie z#|Vs+4&XeiuLGqv>3}pD=S#8pn&n?N_bCU4MPW29#29P$B8;`7E{rov)T}`XxY&v% z;u1`1y`_2v4_k_xlH?J%f`LW45$E$ln0NGceTaee$HYpO}jUR%b8|^NlQH zxep7m$Q&)^vUOO|Gkt+rg6nYuZp2Nv8NF!Wn^=llunf0iIlg6X5uqX5u(EGS=~&rk z_-;?MwN2y!`-zlmO)@sY9&EO(1%HnFEZ>Uz@qp!jiNC@R!DlYkw>@v2O*~HurjTi51`$LjP7+3u2Obz-jt)cbwXY>&Lly=f< z^q$;b_LoPn}$!0O{92UXmvH9$E=3;5g&C*#0D_{mIWo4|KRj^97gH^F=wu{xWI#$mb z*Z9>M4F`8R>!L^sk7B^HA-EmE>c};yqcsYtNH3Cb&I-Ftyh1o zwyPJ^4)wZvQ|(sos$ZxNwAtFLTAa2-^JZyz+FEU+wpDvytI>X;-PZ1C_q6-k1MQ*c zF9wQ1!e0y(HZfd`6cfb)u|%vF8^vZ}h*D7|%0-2!6gxzf*eSj%z9+sfekeW^ABjWa zV{up<5l6*waYCFDXT&*iUR)HNqDy=(?%MtAW9<{|;r3*QJ>S07-e5mu@342)zkEJJwwmZSLmzsY&}=cHy?+Ma$a$?J1#qJIPN>X hbbRG_=!|hLaV~RaICGq9q^B2RukU*1`|i#S{{~>rY1se( diff --git a/submodules/PremiumUI/Sources/PremiumStarComponent.swift b/submodules/PremiumUI/Sources/PremiumStarComponent.swift index bf6529d886..2ac8624611 100644 --- a/submodules/PremiumUI/Sources/PremiumStarComponent.swift +++ b/submodules/PremiumUI/Sources/PremiumStarComponent.swift @@ -90,6 +90,7 @@ class PremiumStarComponent: Component { self.sceneView.transform = CGAffineTransform(scaleX: 0.5, y: 0.5) self.sceneView.isUserInteractionEnabled = false self.sceneView.preferredFramesPerSecond = 60 + self.sceneView.isJitteringEnabled = true super.init(frame: frame) @@ -367,7 +368,7 @@ class PremiumStarComponent: Component { guard let scene = self.sceneView.scene, let node = scene.rootNode.childNode(withName: "star", recursively: false) else { return } - + let animation = CABasicAnimation(keyPath: "scale") animation.duration = 2.0 animation.fromValue = NSValue(scnVector3: SCNVector3(x: 0.1, y: 0.1, z: 0.1)) @@ -375,7 +376,7 @@ class PremiumStarComponent: Component { animation.timingFunction = CAMediaTimingFunction(name: .easeInEaseOut) animation.autoreverses = true animation.repeatCount = .infinity - + node.addAnimation(animation, forKey: "scale") } @@ -432,23 +433,32 @@ class PremiumStarComponent: Component { self.previousInteractionTimestamp = currentTime self.delayTapsTill = currentTime + 0.85 - if explode, let node = scene.rootNode.childNode(withName: "swirl", recursively: false), let particles = scene.rootNode.childNode(withName: "particles", recursively: false) { - if let particleSystem = particles.particleSystems?.first { - particleSystem.particleColorVariation = SCNVector4(0.15, 0.2, 0.15, 0.3) - particleSystem.speedFactor = 2.0 - particleSystem.particleVelocity = 2.2 - particleSystem.birthRate = 4.0 - particleSystem.particleLifeSpan = 2.0 + if explode, let node = scene.rootNode.childNode(withName: "swirl", recursively: false), let particlesLeft = scene.rootNode.childNode(withName: "particles_left", recursively: false), let particlesRight = scene.rootNode.childNode(withName: "particles_right", recursively: false) { + if let leftParticleSystem = particlesLeft.particleSystems?.first, let rightParticleSystem = particlesRight.particleSystems?.first { + leftParticleSystem.speedFactor = 1.3 + leftParticleSystem.particleVelocity = 2.4 + leftParticleSystem.birthRate = 24.0 + leftParticleSystem.particleLifeSpan = 4.0 + + rightParticleSystem.speedFactor = 1.3 + rightParticleSystem.particleVelocity = 2.4 + rightParticleSystem.birthRate = 24.0 + rightParticleSystem.particleLifeSpan = 4.0 node.physicsField?.isActive = true Queue.mainQueue().after(1.0) { node.physicsField?.isActive = false - particles.particleSystems?.first?.birthRate = 1.2 - particleSystem.particleVelocity = 1.0 - particleSystem.particleLifeSpan = 4.0 - let animation = POPBasicAnimation() - animation.property = (POPAnimatableProperty.property(withName: "speedFactor", initializer: { property in + leftParticleSystem.birthRate = 9.0 + leftParticleSystem.particleVelocity = 1.2 + leftParticleSystem.particleLifeSpan = 3.0 + + rightParticleSystem.birthRate = 9.0 + rightParticleSystem.particleVelocity = 1.2 + rightParticleSystem.particleLifeSpan = 3.0 + + let leftAnimation = POPBasicAnimation() + leftAnimation.property = (POPAnimatableProperty.property(withName: "speedFactor", initializer: { property in property?.readBlock = { particleSystem, values in values?.pointee = (particleSystem as! SCNParticleSystem).speedFactor } @@ -457,11 +467,27 @@ class PremiumStarComponent: Component { } property?.threshold = 0.01 }) as! POPAnimatableProperty) - animation.fromValue = 2.0 as NSNumber - animation.toValue = 1.0 as NSNumber - animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) - animation.duration = 0.5 - particleSystem.pop_add(animation, forKey: "speedFactor") + leftAnimation.fromValue = 1.2 as NSNumber + leftAnimation.toValue = 0.85 as NSNumber + leftAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) + leftAnimation.duration = 0.5 + leftParticleSystem.pop_add(leftAnimation, forKey: "speedFactor") + + let rightAnimation = POPBasicAnimation() + rightAnimation.property = (POPAnimatableProperty.property(withName: "speedFactor", initializer: { property in + property?.readBlock = { particleSystem, values in + values?.pointee = (particleSystem as! SCNParticleSystem).speedFactor + } + property?.writeBlock = { particleSystem, values in + (particleSystem as! SCNParticleSystem).speedFactor = values!.pointee + } + property?.threshold = 0.01 + }) as! POPAnimatableProperty) + rightAnimation.fromValue = 1.2 as NSNumber + rightAnimation.toValue = 0.85 as NSNumber + rightAnimation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) + rightAnimation.duration = 0.5 + rightParticleSystem.pop_add(rightAnimation, forKey: "speedFactor") } } } diff --git a/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift b/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift index 954e7ef206..abe381b388 100644 --- a/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift +++ b/submodules/TelegramCore/Sources/TelegramEngine/Stickers/SearchStickers.swift @@ -5,18 +5,22 @@ import SwiftSignalKit private struct SearchStickersConfiguration { static var defaultValue: SearchStickersConfiguration { - return SearchStickersConfiguration(cacheTimeout: 86400) + return SearchStickersConfiguration(cacheTimeout: 86400, normalStickersPerPremium: 2, premiumStickersCount: 0) } public let cacheTimeout: Int32 + public let normalStickersPerPremiumCount: Int32 + public let premiumStickersCount: Int32 - fileprivate init(cacheTimeout: Int32) { + fileprivate init(cacheTimeout: Int32, normalStickersPerPremium: Int32, premiumStickersCount: Int32) { self.cacheTimeout = cacheTimeout + self.normalStickersPerPremiumCount = normalStickersPerPremium + self.premiumStickersCount = premiumStickersCount } static func with(appConfiguration: AppConfiguration) -> SearchStickersConfiguration { - if let data = appConfiguration.data, let value = data["stickers_emoji_cache_time"] as? Double { - return SearchStickersConfiguration(cacheTimeout: Int32(value)) + if let data = appConfiguration.data, let cacheTimeoutValue = data["stickers_emoji_cache_time"] as? Double, let normalStickersPerPremiumValue = data["stickers_normal_by_emoji_per_premium_num"] as? Double, let premiumStickersCountValue = data["stickers_premium_by_emoji_num "] as? Double { + return SearchStickersConfiguration(cacheTimeout: Int32(cacheTimeoutValue), normalStickersPerPremium: Int32(normalStickersPerPremiumValue), premiumStickersCount: Int32(premiumStickersCountValue)) } else { return .defaultValue } @@ -85,7 +89,7 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic if query == "\u{2764}" { query = "\u{2764}\u{FE0F}" } - return account.postbox.transaction { transaction -> ([FoundStickerItem], CachedStickerQueryResult?, Bool) in + return account.postbox.transaction { transaction -> ([FoundStickerItem], CachedStickerQueryResult?, Bool, SearchStickersConfiguration) in let isPremium = transaction.getPeer(account.peerId)?.isPremium ?? false var result: [FoundStickerItem] = [] @@ -198,8 +202,8 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic cached = nil } - return (result, cached, isPremium) - } |> mapToSignal { localItems, cached, isPremium -> Signal<[FoundStickerItem], NoError> in + return (result, cached, isPremium, searchStickersConfiguration) + } |> mapToSignal { localItems, cached, isPremium, searchStickersConfiguration -> Signal<[FoundStickerItem], NoError> in var tempResult: [FoundStickerItem] = localItems if !scope.contains(.remote) { return .single(tempResult) @@ -237,19 +241,19 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic case let .stickers(hash, stickers): var items: [FoundStickerItem] = [] var animatedItems: [FoundStickerItem] = [] + var premiumItems: [FoundStickerItem] = [] - var result: [FoundStickerItem] = localItems - let currentItemIds = Set(result.map { $0.file.fileId }) + var allItems: [FoundStickerItem] = localItems + let currentItemIds = Set(allItems.map { $0.file.fileId }) var files: [TelegramMediaFile] = [] for sticker in stickers { if let file = telegramMediaFileFromApiDocument(sticker), let id = file.id { - if file.isPremiumSticker && !isPremium { - continue - } files.append(file) if !currentItemIds.contains(id) { - if file.isAnimatedSticker || file.isVideoSticker { + if file.isPremiumSticker { + premiumItems.append(FoundStickerItem(file: file, stringRepresentations: [])) + } else if file.isAnimatedSticker || file.isVideoSticker { animatedItems.append(FoundStickerItem(file: file, stringRepresentations: [])) } else { items.append(FoundStickerItem(file: file, stringRepresentations: [])) @@ -257,10 +261,24 @@ func _internal_searchStickers(account: Account, query: String, scope: SearchStic } } } - - result.append(contentsOf: animatedItems) - result.append(contentsOf: items) - + + allItems.append(contentsOf: animatedItems) + allItems.append(contentsOf: items) + + var result: [FoundStickerItem] = [] + if isPremium { + if searchStickersConfiguration.normalStickersPerPremiumCount == 0 { + result.append(contentsOf: premiumItems) + result.append(contentsOf: allItems) + } else { + result.append(contentsOf: premiumItems) + result.append(contentsOf: allItems) + } + } else { + result.append(contentsOf: allItems) + result.append(contentsOf: premiumItems.prefix(max(0, Int(searchStickersConfiguration.premiumStickersCount)))) + } + let currentTime = Int32(CFAbsoluteTimeGetCurrent() + kCFAbsoluteTimeIntervalSince1970) if let entry = CodableEntry(CachedStickerQueryResult(items: files, hash: hash, timestamp: currentTime)) { transaction.putItemCacheEntry(id: ItemCacheEntryId(collectionId: Namespaces.CachedItemCollection.cachedStickerQueryResults, key: CachedStickerQueryResult.cacheKey(query)), entry: entry) diff --git a/submodules/TelegramUI/Components/AnimationCache/Sources/ImageData.swift b/submodules/TelegramUI/Components/AnimationCache/Sources/ImageData.swift index 2d7ac5c4ec..c4744e410e 100644 --- a/submodules/TelegramUI/Components/AnimationCache/Sources/ImageData.swift +++ b/submodules/TelegramUI/Components/AnimationCache/Sources/ImageData.swift @@ -62,7 +62,7 @@ extension ImagePlane { func subtract(other: DctCoefficientPlane) { self.data.withUnsafeMutableBytes { bytes in other.data.withUnsafeBytes { otherBytes in - subtractArraysUInt8Int16(bytes.baseAddress!.assumingMemoryBound(to: UInt8.self), otherBytes.baseAddress!.assumingMemoryBound(to: Int16.self), bytes.baseAddress!.assumingMemoryBound(to: Int8.self), Int32(bytes.count)) + subtractArraysUInt8Int16(bytes.baseAddress!.assumingMemoryBound(to: UInt8.self), otherBytes.baseAddress!.assumingMemoryBound(to: Int16.self), bytes.baseAddress!.assumingMemoryBound(to: UInt8.self), Int32(bytes.count)) } } } @@ -70,7 +70,7 @@ extension ImagePlane { func add(other: DctCoefficientPlane) { self.data.withUnsafeMutableBytes { bytes in other.data.withUnsafeBytes { otherBytes in - addArraysUInt8Int16(bytes.baseAddress!.assumingMemoryBound(to: UInt8.self), otherBytes.baseAddress!.assumingMemoryBound(to: Int16.self), bytes.baseAddress!.assumingMemoryBound(to: Int8.self), Int32(bytes.count)) + addArraysUInt8Int16(bytes.baseAddress!.assumingMemoryBound(to: UInt8.self), otherBytes.baseAddress!.assumingMemoryBound(to: Int16.self), bytes.baseAddress!.assumingMemoryBound(to: UInt8.self), Int32(bytes.count)) } } } @@ -160,7 +160,7 @@ extension DctCoefficientPlane { func toUInt8(target: ImagePlane) { self.data.withUnsafeBytes { bytes in target.data.withUnsafeMutableBytes { otherBytes in - convertInt16toUInt8(bytes.baseAddress!.assumingMemoryBound(to: UInt16.self), otherBytes.baseAddress!.assumingMemoryBound(to: UInt8.self), Int32(bytes.count / 2)) + convertInt16toUInt8(bytes.baseAddress!.assumingMemoryBound(to: Int16.self), otherBytes.baseAddress!.assumingMemoryBound(to: UInt8.self), Int32(bytes.count / 2)) } } } diff --git a/submodules/TelegramUI/Resources/Animations/input_anim_smileToSticker.json b/submodules/TelegramUI/Resources/Animations/input_anim_smileToSticker.json index 26d136207a..1cabe5cfc8 100644 --- a/submodules/TelegramUI/Resources/Animations/input_anim_smileToSticker.json +++ b/submodules/TelegramUI/Resources/Animations/input_anim_smileToSticker.json @@ -1 +1 @@ -{"v":"5.8.1","fr":60,"ip":0,"op":24,"w":30,"h":30,"nm":"smiletosticker","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Path 85","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.746,-12.746,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5,0],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,-0.391],[0,-5],[-0.391,0],[0,0],[-0.829,0.406],[0,0]],"v":[[5.633,6.5],[5.733,6.296],[6.613,4.5],[6.613,2.5],[-2.387,-6.5],[-4.387,-6.5],[-6.183,-5.62],[-6.387,-5.52]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[0.923,0],[0,0],[0,4.418],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,0],[-4.418,0],[0,0],[0,-0.923],[0,0],[0,0]],"v":[[5.896,6.124],[5.996,5.92],[4.876,4.124],[3.467,4.124],[-4.124,-3.467],[-4.124,-4.876],[-5.92,-5.996],[-6.124,-5.896]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0],[0.923,0],[0,0],[0,4.418],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,0],[-4.418,0],[0,0],[0,-0.923],[0,0],[0,0]],"v":[[5.896,6.124],[5.996,5.92],[4.876,4.124],[3.876,4.124],[-4.124,-3.876],[-4.124,-4.876],[-5.92,-5.996],[-6.124,-5.896]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 85","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Oval 2","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.043,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"t":5,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Oval","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-18.997,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"t":5,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Ellipse 34","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,21.212,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.363,0],[0,0]],"o":[[0,0],[2.363,0],[0,0]],"v":[[-3.5,-0.965],[0,0.965],[3.5,-0.965]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 34","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":5,"s":[50]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"t":5,"s":[50]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Ellipse 33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[15,15,0],"to":[-0.045,0.043,0],"ti":[0.045,-0.043,0]},{"t":10,"s":[14.728,15.259,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-4.971,0],[0,4.971],[0.599,1.205],[1.758,0.874],[1.437,0],[0,-4.971]],"o":[[4.971,0],[0,-1.437],[-0.874,-1.758],[-1.205,-0.599],[-4.971,0],[0,4.971]],"v":[[0,9],[9,0],[8.064,-4],[4,-8.064],[0,-9],[-9,0]],"c":true}]},{"t":10,"s":[{"i":[[-4.971,0],[-1.46,2.97],[1.89,1.97],[0,0],[2.35,-1.126],[0,-3.49]],"o":[[3.49,0],[1.19,-2.35],[0,0],[-1.97,-1.89],[-2.97,1.524],[0,4.971]],"v":[[0.272,8.741],[8.272,3.741],[6.272,-3.259],[3.272,-6.259],[-3.728,-8.323],[-8.728,-0.259]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 33","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":24,"st":-60,"bm":0}],"markers":[]} \ No newline at end of file +{"v":"5.8.1","fr":60,"ip":0,"op":24,"w":32,"h":32,"nm":"smiletosticker","ddd":0,"assets":[{"id":"comp_0","nm":"smiletosticker30","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Path 85","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.746,-12.746,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5,0],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,-0.391],[0,-5],[-0.391,0],[0,0],[-0.829,0.406],[0,0]],"v":[[5.633,6.5],[5.733,6.296],[6.613,4.5],[6.613,2.5],[-2.387,-6.5],[-4.387,-6.5],[-6.183,-5.62],[-6.387,-5.52]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":10,"s":[{"i":[[0,0],[0,0],[0.923,0],[0,0],[0,4.418],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,0],[-4.418,0],[0,0],[0,-0.923],[0,0],[0,0]],"v":[[5.896,6.124],[5.996,5.92],[4.876,4.124],[3.467,4.124],[-4.124,-3.467],[-4.124,-4.876],[-5.92,-5.996],[-6.124,-5.896]],"c":false}]},{"t":20,"s":[{"i":[[0,0],[0,0],[0.923,0],[0,0],[0,4.418],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,0],[-4.418,0],[0,0],[0,-0.923],[0,0],[0,0]],"v":[[5.896,6.124],[5.996,5.92],[4.876,4.124],[3.876,4.124],[-4.124,-3.876],[-4.124,-4.876],[-5.92,-5.996],[-6.124,-5.896]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 85","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":2,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Oval 2","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.043,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"t":5,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Oval","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-18.997,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"t":5,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Ellipse 34","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,21.212,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.363,0],[0,0]],"o":[[0,0],[2.363,0],[0,0]],"v":[[-3.5,-0.965],[0,0.965],[3.5,-0.965]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 34","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"t":5,"s":[50]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[100]},{"t":5,"s":[50]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":24,"st":-60,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Ellipse 33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[15,15,0],"to":[-0.045,0.043,0],"ti":[0.045,-0.043,0]},{"t":10,"s":[14.728,15.259,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[16.667,16.667,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[{"i":[[-4.971,0],[0,4.971],[0.599,1.205],[1.758,0.874],[1.437,0],[0,-4.971]],"o":[[4.971,0],[0,-1.437],[-0.874,-1.758],[-1.205,-0.599],[-4.971,0],[0,4.971]],"v":[[0,9],[9,0],[8.064,-4],[4,-8.064],[0,-9],[-9,0]],"c":true}]},{"t":10,"s":[{"i":[[-4.971,0],[-1.46,2.97],[1.89,1.97],[0,0],[2.35,-1.126],[0,-3.49]],"o":[[3.49,0],[1.19,-2.35],[0,0],[-1.97,-1.89],[-2.97,1.524],[0,4.971]],"v":[[0.272,8.741],[8.272,3.741],[6.272,-3.259],[3.272,-6.259],[-3.728,-8.323],[-8.728,-0.259]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 33","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":24,"st":-60,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"smiletosticker30","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[16,16,0],"ix":2,"l":2},"a":{"a":0,"k":[15,15,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":30,"h":30,"ip":0,"op":84,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/submodules/TelegramUI/Resources/Animations/input_anim_stickerToSmile.json b/submodules/TelegramUI/Resources/Animations/input_anim_stickerToSmile.json index 1f209a5db8..6655f07192 100644 --- a/submodules/TelegramUI/Resources/Animations/input_anim_stickerToSmile.json +++ b/submodules/TelegramUI/Resources/Animations/input_anim_stickerToSmile.json @@ -1 +1 @@ -{"v":"5.8.1","fr":60,"ip":60,"op":84,"w":30,"h":30,"nm":"stickertosmile","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":2,"ty":4,"nm":"Path 85","parent":6,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"t":68,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.746,-12.746,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,0],[0,0],[0.923,0],[0,0],[0,4.418],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,0],[-4.418,0],[0,0],[0,-0.923],[0,0],[0,0]],"v":[[5.896,6.124],[5.996,5.92],[4.876,4.124],[3.876,4.124],[-4.124,-3.876],[-4.124,-4.876],[-5.92,-5.996],[-6.124,-5.896]],"c":false}]},{"t":70,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5,0],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,-0.391],[0,-5],[-0.391,0],[0,0],[-0.829,0.406],[0,0]],"v":[[5.633,6.5],[5.733,6.296],[6.613,4.5],[6.613,2.5],[-2.387,-6.5],[-4.387,-6.5],[-6.183,-5.62],[-6.387,-5.52]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 85","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":122,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Oval 2","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.043,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[0,0,100]},{"t":70,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":64,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Oval","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-18.997,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[0,0,100]},{"t":70,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Ellipse 34","parent":6,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,21.212,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.363,0],[0,0]],"o":[[0,0],[2.363,0],[0,0]],"v":[[-3.5,-0.965],[0,0.965],[3.5,-0.965]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 34","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[50]},{"t":70,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[50]},{"t":70,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Ellipse 33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[14.728,15.259,0],"to":[0.045,-0.043,0],"ti":[-0.045,0.043,0]},{"t":70,"s":[15,15,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[16.667,16.667,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70,"s":[17.5,17.5,100]},{"t":80,"s":[16.667,16.667,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[-4.971,0],[-1.46,2.97],[1.89,1.97],[0,0],[2.35,-1.126],[0,-3.49]],"o":[[3.49,0],[1.19,-2.35],[0,0],[-1.97,-1.89],[-2.97,1.524],[0,4.971]],"v":[[0.272,8.741],[8.272,3.741],[6.272,-3.259],[3.272,-6.259],[-3.728,-8.323],[-8.728,-0.259]],"c":true}]},{"t":70,"s":[{"i":[[-4.971,0],[0,4.971],[0.599,1.205],[1.758,0.874],[1.437,0],[0,-4.971]],"o":[[4.971,0],[0,-1.437],[-0.874,-1.758],[-1.205,-0.599],[-4.971,0],[0,4.971]],"v":[[0,9],[9,0],[8.064,-4],[4,-8.064],[0,-9],[-9,0]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 33","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}],"markers":[]} \ No newline at end of file +{"v":"5.8.1","fr":60,"ip":0,"op":24,"w":32,"h":32,"nm":"stickertosmile","ddd":0,"assets":[{"id":"comp_0","nm":"stickertosmile30","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Path 85","parent":5,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":67,"s":[100]},{"t":68,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[12.746,-12.746,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[0,0],[0,0],[0.923,0],[0,0],[0,4.418],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,0],[-4.418,0],[0,0],[0,-0.923],[0,0],[0,0]],"v":[[5.896,6.124],[5.996,5.92],[4.876,4.124],[3.876,4.124],[-4.124,-3.876],[-4.124,-4.876],[-5.92,-5.996],[-6.124,-5.896]],"c":false}]},{"t":70,"s":[{"i":[[0,0],[0,0],[0,0],[0,0],[5,0],[0,0],[0.829,-0.406],[0,0]],"o":[[0,0],[0.406,-0.829],[0,-0.391],[0,-5],[-0.391,0],[0,0],[-0.829,0.406],[0,0]],"v":[[5.633,6.5],[5.733,6.296],[6.613,4.5],[6.613,2.5],[-2.387,-6.5],[-4.387,-6.5],[-6.183,-5.62],[-6.387,-5.52]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Path 85","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":122,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Oval 2","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[19.043,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[0,0,100]},{"t":70,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":64,"op":120,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Oval","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-18.997,-11.087,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[0,0,100]},{"t":70,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[2.348,2.739],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Oval","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Ellipse 34","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,21.212,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-2.363,0],[0,0]],"o":[[0,0],[2.363,0],[0,0]],"v":[[-3.5,-0.965],[0,0.965],[3.5,-0.965]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 34","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[50]},{"t":70,"s":[0]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":60,"s":[50]},{"t":70,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":120,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Ellipse 33","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[14.728,15.259,0],"to":[0.045,-0.043,0],"ti":[-0.045,0.043,0]},{"t":70,"s":[15,15,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[16.667,16.667,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":70,"s":[17.5,17.5,100]},{"t":80,"s":[16.667,16.667,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":60,"s":[{"i":[[-4.971,0],[-1.46,2.97],[1.89,1.97],[0,0],[2.35,-1.126],[0,-3.49]],"o":[[3.49,0],[1.19,-2.35],[0,0],[-1.97,-1.89],[-2.97,1.524],[0,4.971]],"v":[[0.272,8.741],[8.272,3.741],[6.272,-3.259],[3.272,-6.259],[-3.728,-8.323],[-8.728,-0.259]],"c":true}]},{"t":70,"s":[{"i":[[-4.971,0],[0,4.971],[0.599,1.205],[1.758,0.874],[1.437,0],[0,-4.971]],"o":[[4.971,0],[0,-1.437],[-0.874,-1.758],[-1.205,-0.599],[-4.971,0],[0,4.971]],"v":[[0,9],[9,0],[8.064,-4],[4,-8.064],[0,-9],[-9,0]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0,0,0,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1.66,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[600,600],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 33","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":120,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"stickertosmile30","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[16,16,0],"ix":2,"l":2},"a":{"a":0,"k":[15,15,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":30,"h":30,"ip":-60,"op":24,"st":-60,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift b/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift index 1d0e5c9275..ef51277f23 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryEntriesForView.swift @@ -135,7 +135,7 @@ func chatHistoryEntriesForView( } if presentationData.largeEmoji, message.media.isEmpty { - if stickersEnabled && message.text.count == 1, let entities = message.textEntitiesAttribute?.entities, entities.count == 1, case let .CustomEmoji(_, fileId) = entities[0].type, let file = message.associatedMedia[MediaId(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile, !file.isVideoEmoji { + if stickersEnabled && messageIsElligibleForLargeCustomEmoji(message) { contentTypeHint = .animatedEmoji } else if stickersEnabled && message.text.count == 1, let _ = associatedData.animatedEmojiStickers[message.text.basicEmoji.0], (message.textEntitiesAttribute?.entities.isEmpty ?? true) { contentTypeHint = .animatedEmoji diff --git a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift index 58a6c6db69..db36052459 100644 --- a/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageAnimatedStickerItemNode.swift @@ -27,6 +27,7 @@ import LocalMediaResources import AppBundle import LottieMeshSwift import ChatPresentationInterfaceState +import TextNodeWithEntities private let nameFont = Font.medium(14.0) private let inlineBotPrefixFont = Font.regular(14.0) @@ -174,6 +175,8 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { private var didSetUpAnimationNode = false private var isPlaying = false + private let textNode: TextNodeWithEntities + private var additionalAnimationNodes: [ChatMessageTransitionNode.DecorationItemNode] = [] private var overlayMeshAnimationNode: ChatMessageTransitionNode.DecorationItemNode? private var enqueuedAdditionalAnimations: [(Int, Double)] = [] @@ -189,6 +192,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { var telegramFile: TelegramMediaFile? var emojiFile: TelegramMediaFile? var telegramDice: TelegramMediaDice? + var emojiString: String? private let disposable = MetaDisposable() private let disposables = DisposableSet() @@ -232,6 +236,10 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { self.messageAccessibilityArea = AccessibilityAreaNode() + self.textNode = TextNodeWithEntities() + self.textNode.textNode.displaysAsynchronously = false + self.textNode.textNode.isUserInteractionEnabled = false + super.init(layerBacked: false) self.containerNode.shouldBegin = { [weak self] location in @@ -399,6 +407,18 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if wasVisible != isVisible { self.visibilityStatus = isVisible } + + if oldValue != self.visibility { + switch self.visibility { + case .none: + self.textNode.visibilityRect = nil + case let .visible(_, subRect): + var subRect = subRect + subRect.origin.x = 0.0 + subRect.size.width = 10000.0 + self.textNode.visibilityRect = subRect + } + } } } @@ -522,20 +542,28 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let (emoji, fitz) = item.message.text.basicEmoji var emojiFile: TelegramMediaFile? - if let entities = item.message.textEntitiesAttribute?.entities, entities.count == 1, case let .CustomEmoji(_, fileId) = entities[0].type { - if let file = item.message.associatedMedia[MediaId(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile { - emojiFile = file + var emojiString: String? + if let entities = item.message.textEntitiesAttribute?.entities { + if entities.count == 1, case let .CustomEmoji(_, fileId) = entities[0].type { + if let file = item.message.associatedMedia[MediaId(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile { + emojiFile = file + } + } else if messageIsElligibleForLargeCustomEmoji(item.message) { + emojiString = item.message.text } } - if emojiFile == nil { + + if emojiFile == nil && emojiString == nil { emojiFile = item.associatedData.animatedEmojiStickers[emoji]?.first?.file } - if emojiFile == nil { + if emojiFile == nil && emojiString == nil { emojiFile = item.associatedData.animatedEmojiStickers[emoji.strippedEmoji]?.first?.file } - if self.emojiFile?.id != emojiFile?.id { + if self.emojiString != emojiString { + self.emojiString = emojiString + } else if self.emojiFile?.id != emojiFile?.id { self.emojiFile = emojiFile if let emojiFile = emojiFile { let dimensions = emojiFile.dimensions ?? PixelDimensions(width: 512, height: 512) @@ -645,7 +673,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let pathPrefix = item.context.account.postbox.mediaBox.shortLivedResourceCachePathPrefix(file.resource.id) let mode: AnimatedStickerMode = .direct(cachePathPrefix: pathPrefix) self.animationSize = fittedSize - animationNode.setup(source: AnimatedStickerResourceSource(account: item.context.account, resource: file.resource, fitzModifier: fitzModifier, isVideo: file.isVideoSticker), width: Int(fittedSize.width), height: Int(fittedSize.height), playbackMode: playbackMode, mode: mode) + animationNode.setup(source: AnimatedStickerResourceSource(account: item.context.account, resource: file.resource, fitzModifier: fitzModifier, isVideo: file.mimeType == "video/webm"), width: Int(fittedSize.width), height: Int(fittedSize.height), playbackMode: playbackMode, mode: mode) } } } @@ -755,12 +783,13 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } } } - + override func asyncLayout() -> (_ item: ChatMessageItem, _ params: ListViewItemLayoutParams, _ mergedTop: ChatMessageMerge, _ mergedBottom: ChatMessageMerge, _ dateHeaderAtBottom: Bool) -> (ListViewItemNodeLayout, (ListViewItemUpdateAnimation, ListViewItemApply, Bool) -> Void) { var displaySize = CGSize(width: 180.0, height: 180.0) let telegramFile = self.telegramFile let emojiFile = self.emojiFile let telegramDice = self.telegramDice + let emojiString = self.emojiString let layoutConstants = self.layoutConstants let imageLayout = self.imageNode.asyncLayout() let makeDateAndStatusLayout = self.dateAndStatusNode.asyncLayout() @@ -774,6 +803,8 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let currentShareButtonNode = self.shareButtonNode let currentForwardInfo = self.appliedForwardInfo + let textLayout = TextNodeWithEntities.asyncLayout(self.textNode) + return { item, params, mergedTop, mergedBottom, dateHeaderAtBottom in let accessibilityData = ChatMessageAccessibilityData(item: item, isSelected: nil) let layoutConstants = chatMessageItemLayoutConstants(layoutConstants, params: params, presentationData: item.presentationData) @@ -781,6 +812,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { var imageSize: CGSize = CGSize(width: 200.0, height: 200.0) var imageVerticalInset: CGFloat = 0.0 + var imageBottomPadding: CGFloat = 0.0 var imageHorizontalOffset: CGFloat = 0.0 if !(telegramFile?.videoThumbnails.isEmpty ?? true) { displaySize = CGSize(width: 240.0, height: 240.0) @@ -788,27 +820,8 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { imageHorizontalOffset = 12.0 } - var isEmoji = false - if let _ = telegramDice { - imageSize = displaySize - } else if let telegramFile = telegramFile { - if let dimensions = telegramFile.dimensions { - imageSize = dimensions.cgSize.aspectFitted(displaySize) - } else if let thumbnailSize = telegramFile.previewRepresentations.first?.dimensions { - imageSize = thumbnailSize.cgSize.aspectFitted(displaySize) - } else { - imageSize = displaySize - } - } else if let emojiFile = emojiFile { - isEmoji = true - - let displaySize = CGSize(width: floor(displaySize.width * item.presentationData.animatedEmojiScale), height: floor(displaySize.height * item.presentationData.animatedEmojiScale)) - if let dimensions = emojiFile.dimensions { - imageSize = CGSize(width: displaySize.width * CGFloat(dimensions.width) / 512.0, height: displaySize.height * CGFloat(dimensions.height) / 512.0) - } else if let thumbnailSize = emojiFile.previewRepresentations.first?.dimensions { - imageSize = thumbnailSize.cgSize.aspectFitted(displaySize) - } - } + var textLayoutAndApply: (TextNodeLayout, (TextNodeWithEntities.Arguments) -> TextNodeWithEntities)? + var imageInset: CGFloat = 10.0 let avatarInset: CGFloat var hasAvatar = false @@ -909,6 +922,55 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } } + var isEmoji = false + if let _ = telegramDice { + imageSize = displaySize + } else if let telegramFile = telegramFile { + if let dimensions = telegramFile.dimensions { + imageSize = dimensions.cgSize.aspectFitted(displaySize) + } else if let thumbnailSize = telegramFile.previewRepresentations.first?.dimensions { + imageSize = thumbnailSize.cgSize.aspectFitted(displaySize) + } else { + imageSize = displaySize + } + } else if let emojiFile = emojiFile { + isEmoji = true + + let displaySize = CGSize(width: floor(displaySize.width * item.presentationData.animatedEmojiScale), height: floor(displaySize.height * item.presentationData.animatedEmojiScale)) + if let dimensions = emojiFile.dimensions { + imageSize = CGSize(width: displaySize.width * CGFloat(dimensions.width) / 512.0, height: displaySize.height * CGFloat(dimensions.height) / 512.0) + } else if let thumbnailSize = emojiFile.previewRepresentations.first?.dimensions { + imageSize = thumbnailSize.cgSize.aspectFitted(displaySize) + } + } else if let _ = emojiString { + imageVerticalInset = 4.0 + imageBottomPadding = 24.0 + + let baseWidth = params.width + var tmpWidth = layoutConstants.bubble.maximumWidthFill.widthFor(baseWidth) + if needsShareButton && tmpWidth + 32.0 > baseWidth { + tmpWidth = baseWidth - 32.0 + } + + var deliveryFailedInset: CGFloat = 0.0 + if isFailed { + deliveryFailedInset += 24.0 + } + + tmpWidth -= deliveryFailedInset + + let maximumContentWidth = floor(tmpWidth - layoutConstants.bubble.edgeInset - layoutConstants.bubble.edgeInset - layoutConstants.bubble.contentInsets.left - layoutConstants.bubble.contentInsets.right - avatarInset) + + let font = Font.regular(fontSizeForEmojiString(item.message.text)) + let attributedText = stringWithAppliedEntities(item.message.text, entities: item.message.textEntitiesAttribute?.entities ?? [], baseColor: .black, linkColor: .black, baseFont: font, linkFont: font, boldFont: font, italicFont: font, boldItalicFont: font, fixedFont: font, blockQuoteFont: font, message: item.message) + textLayoutAndApply = textLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: maximumContentWidth, height: CGFloat.greatestFiniteMagnitude), alignment: .natural)) + + imageSize = CGSize(width: textLayoutAndApply!.0.size.width, height: textLayoutAndApply!.0.size.height) + isEmoji = true + + imageInset = 0.0 + } + var layoutInsets = UIEdgeInsets(top: mergedTop.merged ? layoutConstants.bubble.mergedSpacing : layoutConstants.bubble.defaultSpacing, left: 0.0, bottom: mergedBottom.merged ? layoutConstants.bubble.mergedSpacing : layoutConstants.bubble.defaultSpacing, right: 0.0) if dateHeaderAtBottom { layoutInsets.top += layoutConstants.timestampHeaderHeight @@ -921,7 +983,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { let displayLeftInset = params.leftInset + layoutConstants.bubble.edgeInset + avatarInset - let imageInset: CGFloat = 10.0 + var innerImageSize = imageSize imageSize = CGSize(width: imageSize.width + imageInset * 2.0, height: imageSize.height + imageInset * 2.0) let imageFrame = CGRect(origin: CGPoint(x: 0.0 + (incoming ? (params.leftInset + layoutConstants.bubble.edgeInset + avatarInset + layoutConstants.bubble.contentInsets.left) : (params.width - params.rightInset - imageSize.width - layoutConstants.bubble.edgeInset - layoutConstants.bubble.contentInsets.left - deliveryFailedInset - imageHorizontalOffset)), y: imageVerticalInset), size: CGSize(width: imageSize.width, height: imageSize.height)) @@ -1072,7 +1134,12 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } } - let contentHeight = max(imageSize.height + imageVerticalInset * 2.0, layoutConstants.image.minDimensions.height) + let contentHeight: CGFloat + if let _ = emojiString { + contentHeight = imageSize.height + imageVerticalInset * 2.0 + imageBottomPadding + } else { + contentHeight = max(imageSize.height + imageVerticalInset * 2.0, layoutConstants.image.minDimensions.height) + } var forwardSource: Peer? var forwardAuthorSignature: String? @@ -1179,14 +1246,37 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { } } - let updatedImageFrame = imageFrame.offsetBy(dx: 0.0, dy: floor((contentHeight - imageSize.height) / 2.0)) + let updatedImageFrame: CGRect + var contextContentFrame: CGRect + if let _ = emojiString { + updatedImageFrame = imageFrame + contextContentFrame = updatedImageFrame.inset(by: UIEdgeInsets(top: 0.0, left: 0.0, bottom: -imageBottomPadding, right: 0.0)) + } else { + updatedImageFrame = imageFrame.offsetBy(dx: 0.0, dy: floor((contentHeight - imageSize.height) / 2.0)) + contextContentFrame = updatedImageFrame + } var updatedContentFrame = updatedImageFrame - if isEmoji { + if isEmoji && emojiString == nil { updatedContentFrame = updatedContentFrame.insetBy(dx: -imageInset, dy: -imageInset) + contextContentFrame = updatedContentFrame + } + + if let (_, textApply) = textLayoutAndApply { + let placeholderColor = bubbleVariableColor(variableColor: item.presentationData.theme.theme.chat.message.stickerPlaceholderColor, wallpaper: item.presentationData.theme.wallpaper) + let _ = textApply(TextNodeWithEntities.Arguments(context: item.context, cache: item.controllerInteraction.presentationContext.animationCache, renderer: item.controllerInteraction.presentationContext.animationRenderer, placeholderColor: placeholderColor, attemptSynchronous: synchronousLoads)) + + if strongSelf.textNode.textNode.supernode == nil { + strongSelf.contextSourceNode.contentNode.insertSubnode(strongSelf.textNode.textNode, aboveSubnode: strongSelf.imageNode) + } + + strongSelf.textNode.textNode.frame = imageFrame } strongSelf.imageNode.frame = updatedContentFrame + strongSelf.contextSourceNode.contentRect = contextContentFrame + strongSelf.containerNode.targetNodeForActivationProgressContentRect = strongSelf.contextSourceNode.contentRect + let animationNodeFrame = updatedContentFrame.insetBy(dx: imageInset, dy: imageInset) var file: TelegramMediaFile? @@ -1231,10 +1321,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { strongSelf.enableSynchronousImageApply = true imageApply() strongSelf.enableSynchronousImageApply = false - - strongSelf.contextSourceNode.contentRect = strongSelf.imageNode.frame - strongSelf.containerNode.targetNodeForActivationProgressContentRect = strongSelf.contextSourceNode.contentRect - + if let updatedShareButtonNode = updatedShareButtonNode { if updatedShareButtonNode !== strongSelf.shareButtonNode { if let shareButtonNode = strongSelf.shareButtonNode { @@ -1245,13 +1332,13 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { updatedShareButtonNode.addTarget(strongSelf, action: #selector(strongSelf.shareButtonPressed), forControlEvents: .touchUpInside) } let buttonSize = updatedShareButtonNode.update(presentationData: item.presentationData, chatLocation: item.chatLocation, subject: item.associatedData.subject, message: item.message, account: item.context.account) - updatedShareButtonNode.frame = CGRect(origin: CGPoint(x: updatedImageFrame.maxX + 8.0, y: updatedImageFrame.maxY - buttonSize.height - 4.0), size: buttonSize) + updatedShareButtonNode.frame = CGRect(origin: CGPoint(x: updatedImageFrame.maxX + 8.0, y: updatedImageFrame.maxY - buttonSize.height - 4.0 + imageBottomPadding), size: buttonSize) } else if let shareButtonNode = strongSelf.shareButtonNode { shareButtonNode.removeFromSupernode() strongSelf.shareButtonNode = nil } - let dateAndStatusFrame = CGRect(origin: CGPoint(x: max(displayLeftInset, updatedImageFrame.maxX - dateAndStatusSize.width - 4.0), y: updatedImageFrame.maxY - dateAndStatusSize.height - 4.0), size: dateAndStatusSize) + let dateAndStatusFrame = CGRect(origin: CGPoint(x: max(displayLeftInset, updatedImageFrame.maxX - dateAndStatusSize.width - 4.0), y: updatedImageFrame.maxY - dateAndStatusSize.height - 4.0 + imageBottomPadding), size: dateAndStatusSize) animation.animator.updateFrame(layer: strongSelf.dateAndStatusNode.layer, frame: dateAndStatusFrame, completion: nil) dateAndStatusApply(animation) @@ -1337,7 +1424,6 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { strongSelf.replyInfoNode = nil } - if let replyBackgroundNode = strongSelf.replyBackgroundNode { replyBackgroundNode.frame = CGRect(origin: CGPoint(x: (!incoming ? (params.leftInset + layoutConstants.bubble.edgeInset + 10.0) : (params.width - params.rightInset - messageInfoSize.width - layoutConstants.bubble.edgeInset - 10.0)) - 4.0, y: 6.0), size: CGSize(width: messageInfoSize.width + 8.0, height: messageInfoSize.height + 5.0)) @@ -1367,7 +1453,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { strongSelf.addSubnode(deliveryFailedNode) } let deliveryFailedSize = deliveryFailedNode.updateLayout(theme: item.presentationData.theme.theme) - let deliveryFailedFrame = CGRect(origin: CGPoint(x: imageFrame.maxX + deliveryFailedInset - deliveryFailedSize.width, y: imageFrame.maxY - deliveryFailedSize.height - imageInset + imageVerticalInset), size: deliveryFailedSize) + let deliveryFailedFrame = CGRect(origin: CGPoint(x: imageFrame.maxX + deliveryFailedInset - deliveryFailedSize.width, y: imageFrame.maxY - deliveryFailedSize.height - imageInset + imageVerticalInset + imageBottomPadding), size: deliveryFailedSize) if isAppearing { deliveryFailedNode.frame = deliveryFailedFrame transition.animatePositionAdditive(node: deliveryFailedNode, offset: CGPoint(x: deliveryFailedInset, y: 0.0)) @@ -1385,7 +1471,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if let actionButtonsSizeAndApply = actionButtonsSizeAndApply { let actionButtonsNode = actionButtonsSizeAndApply.1(animation) let previousFrame = actionButtonsNode.frame - let actionButtonsFrame = CGRect(origin: CGPoint(x: imageFrame.minX, y: imageFrame.maxY + imageVerticalInset), size: actionButtonsSizeAndApply.0) + let actionButtonsFrame = CGRect(origin: CGPoint(x: imageFrame.minX, y: imageFrame.maxY + imageVerticalInset + imageBottomPadding), size: actionButtonsSizeAndApply.0) actionButtonsNode.frame = actionButtonsFrame if actionButtonsNode !== strongSelf.actionButtonsNode { strongSelf.actionButtonsNode = actionButtonsNode @@ -1412,7 +1498,7 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { if let reactionButtonsSizeAndApply = reactionButtonsSizeAndApply { let reactionButtonsNode = reactionButtonsSizeAndApply.1(animation) - var reactionButtonsFrame = CGRect(origin: CGPoint(x: imageFrame.minX, y: imageFrame.maxY + imageVerticalInset), size: reactionButtonsSizeAndApply.0) + var reactionButtonsFrame = CGRect(origin: CGPoint(x: imageFrame.minX, y: imageFrame.maxY + imageVerticalInset + imageBottomPadding), size: reactionButtonsSizeAndApply.0) if !incoming { reactionButtonsFrame.origin.x = imageFrame.maxX - reactionButtonsSizeAndApply.0.width } @@ -1820,7 +1906,12 @@ class ChatMessageAnimatedStickerItemNode: ChatMessageItemView { return .optionalAction({ item.controllerInteraction.displayDiceTooltip(dice) }) - } else if let emojiFile = self.emojiFile, !emojiFile.isCustomEmoji { + } else if let _ = self.emojiFile { +// if let emojiFile = self.emojiFile, emojiFile.isCustomEmoji { +// return .optionalAction({ +// let _ = item.controllerInteraction.openMessage(item.message, .default) +// }) +// } else if let animationNode = self.animationNode as? AnimatedStickerNode, let _ = recognizer { var shouldPlay = false if !animationNode.isPlaying { @@ -2494,3 +2585,40 @@ struct AnimatedEmojiSoundsConfiguration { } } } + +private func fontSizeForEmojiString(_ string: String) -> CGFloat { + let lines = string.components(separatedBy: "\n") + + var maxLineLength = 0 + for line in lines { + maxLineLength = max(maxLineLength, line.count) + } + + let linesCount = lines.count + + let length = max(maxLineLength, linesCount) + + let basicSize: CGFloat = 94.0 + let multiplier: CGFloat + switch length { + case 2: + multiplier = 0.7 + case 3: + multiplier = 0.52 + case 4: + multiplier = 0.37 + case 5: + multiplier = 0.28 + case 6: + multiplier = 0.25 + case 7: + multiplier = 0.23 + case 8: + multiplier = 0.21 + case 9: + multiplier = 0.19 + default: + multiplier = 0.19 + } + return floor(basicSize * multiplier) +} diff --git a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift index 817ea279ce..675e101b11 100644 --- a/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageBubbleItemNode.swift @@ -1295,7 +1295,7 @@ class ChatMessageBubbleItemNode: ChatMessageItemView, ChatMessagePreviewItemNode tmpWidth -= deliveryFailedInset - let maximumContentWidth = floor(tmpWidth - layoutConstants.bubble.edgeInset - layoutConstants.bubble.edgeInset - layoutConstants.bubble.contentInsets.left - layoutConstants.bubble.contentInsets.right - avatarInset) + let maximumContentWidth = floor(tmpWidth - layoutConstants.bubble.edgeInset * 3.0 - layoutConstants.bubble.contentInsets.left - layoutConstants.bubble.contentInsets.right - avatarInset) var contentPropertiesAndPrepareLayouts: [(Message, Bool, ChatMessageEntryAttributes, BubbleItemAttributes, (_ item: ChatMessageBubbleContentItem, _ layoutConstants: ChatMessageItemLayoutConstants, _ preparePosition: ChatMessageBubblePreparePosition, _ messageSelection: Bool?, _ constrainedSize: CGSize) -> (ChatMessageBubbleContentProperties, CGSize?, CGFloat, (CGSize, ChatMessageBubbleContentPosition) -> (CGFloat, (CGFloat) -> (CGSize, (ListViewItemUpdateAnimation, Bool, ListViewItemApply?) -> Void))))] = [] var addedContentNodes: [(Message, Bool, ChatMessageBubbleContentNode)]? diff --git a/submodules/TelegramUI/Sources/ChatMessageSelectionInputPanelNode.swift b/submodules/TelegramUI/Sources/ChatMessageSelectionInputPanelNode.swift index 49900afb1f..6282292a44 100644 --- a/submodules/TelegramUI/Sources/ChatMessageSelectionInputPanelNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageSelectionInputPanelNode.swift @@ -138,7 +138,7 @@ final class ChatMessageSelectionInputPanelNode: ChatInputPanelNode { } if let actions = self.actions, actions.isCopyProtected { self.interfaceInteraction?.displayCopyProtectionTip(self.forwardButton, false) - } else { + } else if !self.forwardButton.isImplicitlyDisabled { self.interfaceInteraction?.forwardSelectedMessages() } } @@ -149,7 +149,7 @@ final class ChatMessageSelectionInputPanelNode: ChatInputPanelNode { } if let actions = self.actions, actions.isCopyProtected { self.interfaceInteraction?.displayCopyProtectionTip(self.shareButton, true) - } else { + } else if !self.shareButton.isImplicitlyDisabled { self.interfaceInteraction?.shareSelectedMessages() } } diff --git a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift index abc5f2b60d..7ab3d9312d 100644 --- a/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift +++ b/submodules/TelegramUI/Sources/ChatMessageStickerItemNode.swift @@ -260,7 +260,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { } if self.telegramFile == nil && item.presentationData.largeEmoji && messageIsElligibleForLargeEmoji(item.message) { - self.imageNode.setSignal(largeEmoji(postbox: item.context.account.postbox, emoji: item.message.text)) + self.imageNode.setSignal(largeEmoji(postbox: item.context.account.postbox, emoji: item.message.text, outline: false)) } } @@ -363,7 +363,7 @@ class ChatMessageStickerItemNode: ChatMessageItemView { var isEmoji = false if item.presentationData.largeEmoji && messageIsElligibleForLargeEmoji(item.message) { let attributedText = NSAttributedString(string: item.message.text, font: item.presentationData.messageEmojiFont, textColor: .black) - textLayoutAndApply = textLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: 180.0, height: 90.0), alignment: .natural)) + textLayoutAndApply = textLayout(TextNodeLayoutArguments(attributedString: attributedText, backgroundColor: nil, maximumNumberOfLines: 0, truncationType: .end, constrainedSize: CGSize(width: params.width, height: 90.0), alignment: .natural)) imageSize = CGSize(width: textLayoutAndApply!.0.size.width, height: textLayoutAndApply!.0.size.height) isEmoji = true diff --git a/submodules/TelegramUI/Sources/EmojiResources.swift b/submodules/TelegramUI/Sources/EmojiResources.swift index 318ba4103e..7b961272ca 100644 --- a/submodules/TelegramUI/Sources/EmojiResources.swift +++ b/submodules/TelegramUI/Sources/EmojiResources.swift @@ -192,7 +192,7 @@ private func matchingEmojiEntry(_ emoji: String) -> (UInt8, UInt8, UInt8)? { } func messageIsElligibleForLargeEmoji(_ message: Message) -> Bool { - if !message.text.isEmpty && message.text.containsOnlyEmoji && message.text.emojis.count < 4 { + if !message.text.isEmpty && message.text.containsOnlyEmoji { if !(message.textEntitiesAttribute?.entities.isEmpty ?? true) { return false } @@ -209,6 +209,29 @@ func messageIsElligibleForLargeEmoji(_ message: Message) -> Bool { } } +func messageIsElligibleForLargeCustomEmoji(_ message: Message) -> Bool { + let text = message.text.replacingOccurrences(of: "\n", with: "").replacingOccurrences(of: " ", with: "") + guard !text.isEmpty && text.containsOnlyEmoji else { + return false + } + let entities = message.textEntitiesAttribute?.entities ?? [] + guard entities.count > 0 else { + return false + } + for entity in entities { + if case let .CustomEmoji(_, fileId) = entity.type { + if let _ = message.associatedMedia[MediaId(namespace: Namespaces.Media.CloudFile, id: fileId)] as? TelegramMediaFile { + + } else { + return false + } + } else { + return false + } + } + return true +} + func largeEmoji(postbox: Postbox, emoji: String, outline: Bool = true) -> Signal<(TransformImageArguments) -> DrawingContext?, NoError> { var dataSignals: [Signal] = [] for emoji in emoji.emojis {