Lottie update

This commit is contained in:
Isaac 2024-06-07 19:35:33 +04:00
parent 2254886ae3
commit c9fc721c39
4 changed files with 61 additions and 8 deletions

View File

@ -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;*/
} }
} }

View File

@ -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)
} }

View File

@ -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

View File

@ -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))