mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Lottie update
This commit is contained in:
parent
2254886ae3
commit
c9fc721c39
@ -8,6 +8,53 @@
|
|||||||
import Foundation
|
import Foundation
|
||||||
import QuartzCore
|
import QuartzCore
|
||||||
|
|
||||||
|
private func fma(_ a: CGFloat, _ b: CGFloat, _ c: CGFloat) -> CGFloat {
|
||||||
|
return a * b + c
|
||||||
|
}
|
||||||
|
|
||||||
|
private func eval_poly(_ t: CGFloat, _ b: CGFloat) -> CGFloat {
|
||||||
|
return b;
|
||||||
|
}
|
||||||
|
|
||||||
|
private func eval_poly(_ t: CGFloat, _ m: CGFloat, _ b: CGFloat) -> CGFloat {
|
||||||
|
return eval_poly(t, fma(m, t, b))
|
||||||
|
}
|
||||||
|
|
||||||
|
private func eval_poly(_ t: CGFloat, _ m: CGFloat, _ b: CGFloat, _ c: CGFloat) -> CGFloat {
|
||||||
|
return eval_poly(t, fma(m, t, b), c)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func eval_poly(_ t: CGFloat, _ m: CGFloat, _ b: CGFloat, _ c: CGFloat, _ d: CGFloat) -> CGFloat {
|
||||||
|
return eval_poly(t, fma(m, t, b), c, d)
|
||||||
|
}
|
||||||
|
|
||||||
|
private func cubic_solver(_ A: CGFloat, _ B: CGFloat, _ C: CGFloat, _ D: CGFloat) -> CGFloat {
|
||||||
|
var t = -D
|
||||||
|
|
||||||
|
for _ in 0 ..< 8 {
|
||||||
|
let f = eval_poly(t, A, B, C, D) // f = At^3 + Bt^2 + Ct + D
|
||||||
|
if (abs(f) <= 0.00005) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let fp = eval_poly(t, 3.0 * A, 2.0 * B, C) // f' = 3At^2 + 2Bt + C
|
||||||
|
let fpp = eval_poly(t, 3.0 * A + 3.0 * A, 2.0 * B) // f'' = 6At + 2B
|
||||||
|
|
||||||
|
let numer = 2.0 * fp * f
|
||||||
|
let denom = fma(2 * fp, fp, -(f * fpp))
|
||||||
|
|
||||||
|
t -= numer / denom
|
||||||
|
}
|
||||||
|
|
||||||
|
if t < 0.0 {
|
||||||
|
t = 0.0
|
||||||
|
}
|
||||||
|
if t > 1.0 {
|
||||||
|
t = 1.0
|
||||||
|
}
|
||||||
|
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
|
||||||
extension CGFloat {
|
extension CGFloat {
|
||||||
|
|
||||||
// MARK: Internal
|
// MARK: Internal
|
||||||
@ -90,7 +137,9 @@ extension CGFloat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fileprivate static func SolveCubic(_ a: CGFloat, _ b: CGFloat, _ c: CGFloat, _ d: CGFloat) -> CGFloat {
|
fileprivate static func SolveCubic(_ a: CGFloat, _ b: CGFloat, _ c: CGFloat, _ d: CGFloat) -> CGFloat {
|
||||||
if a == 0 {
|
return cubic_solver(a, b, c, d)
|
||||||
|
|
||||||
|
/*if a == 0 {
|
||||||
return SolveQuadratic(b, c, d)
|
return SolveQuadratic(b, c, d)
|
||||||
}
|
}
|
||||||
if d == 0 {
|
if d == 0 {
|
||||||
@ -151,6 +200,6 @@ extension CGFloat {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -78,7 +78,7 @@ private final class ReferenceCompareTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var continueFromName: String?
|
var continueFromName: String?
|
||||||
//continueFromName = "1048388279864393866.json"
|
//continueFromName = "5089561049196134821.json"
|
||||||
|
|
||||||
let _ = await processAnimationFolderAsync(basePath: bundlePath, path: "", stopOnFailure: !testNonReference, process: { path, name, alwaysDraw in
|
let _ = await processAnimationFolderAsync(basePath: bundlePath, path: "", stopOnFailure: !testNonReference, process: { path, name, alwaysDraw in
|
||||||
if let continueFromNameValue = continueFromName {
|
if let continueFromNameValue = continueFromName {
|
||||||
@ -119,7 +119,7 @@ public final class ViewController: UIViewController {
|
|||||||
|
|
||||||
self.view.layer.addSublayer(MetalEngine.shared.rootLayer)
|
self.view.layer.addSublayer(MetalEngine.shared.rootLayer)
|
||||||
|
|
||||||
if !"".isEmpty {
|
if "".isEmpty {
|
||||||
if #available(iOS 13.0, *) {
|
if #available(iOS 13.0, *) {
|
||||||
self.test = ReferenceCompareTest(view: self.view, testNonReference: false)
|
self.test = ReferenceCompareTest(view: self.view, testNonReference: false)
|
||||||
}
|
}
|
||||||
|
@ -967,12 +967,14 @@ final class ChatSendMessageContextScreenComponent: Component {
|
|||||||
standaloneReactionAnimation = DirectAnimatedStickerNode()
|
standaloneReactionAnimation = DirectAnimatedStickerNode()
|
||||||
effectiveScale = 1.4
|
effectiveScale = 1.4
|
||||||
#else
|
#else
|
||||||
if "".isEmpty {
|
standaloneReactionAnimation = DirectAnimatedStickerNode()
|
||||||
|
effectiveScale = 1.4
|
||||||
|
/*if "".isEmpty {
|
||||||
standaloneReactionAnimation = DirectAnimatedStickerNode()
|
standaloneReactionAnimation = DirectAnimatedStickerNode()
|
||||||
effectiveScale = 1.4
|
effectiveScale = 1.4
|
||||||
} else {
|
} else {
|
||||||
standaloneReactionAnimation = LottieMetalAnimatedStickerNode()
|
standaloneReactionAnimation = LottieMetalAnimatedStickerNode()
|
||||||
}
|
}*/
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
standaloneReactionAnimation.isUserInteractionEnabled = false
|
standaloneReactionAnimation.isUserInteractionEnabled = false
|
||||||
|
@ -986,12 +986,14 @@ open class ChatMessageItemView: ListViewItemNode, ChatMessageItemNodeProtocol {
|
|||||||
additionalAnimationNode = DirectAnimatedStickerNode()
|
additionalAnimationNode = DirectAnimatedStickerNode()
|
||||||
effectiveScale = 1.4
|
effectiveScale = 1.4
|
||||||
#else
|
#else
|
||||||
if "".isEmpty {
|
additionalAnimationNode = DirectAnimatedStickerNode()
|
||||||
|
effectiveScale = 1.4
|
||||||
|
/*if "".isEmpty {
|
||||||
additionalAnimationNode = DirectAnimatedStickerNode()
|
additionalAnimationNode = DirectAnimatedStickerNode()
|
||||||
effectiveScale = 1.4
|
effectiveScale = 1.4
|
||||||
} else {
|
} else {
|
||||||
additionalAnimationNode = LottieMetalAnimatedStickerNode()
|
additionalAnimationNode = LottieMetalAnimatedStickerNode()
|
||||||
}
|
}*/
|
||||||
#endif
|
#endif
|
||||||
additionalAnimationNode.updateLayout(size: animationSize)
|
additionalAnimationNode.updateLayout(size: animationSize)
|
||||||
additionalAnimationNode.setup(source: source, width: Int(animationSize.width * effectiveScale), height: Int(animationSize.height * effectiveScale), playbackMode: .once, mode: .direct(cachePathPrefix: pathPrefix))
|
additionalAnimationNode.setup(source: source, width: Int(animationSize.width * effectiveScale), height: Int(animationSize.height * effectiveScale), playbackMode: .once, mode: .direct(cachePathPrefix: pathPrefix))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user