Swiftgram/submodules/LottieMeshSwift/Sources/Layers/MyShapeCompositionLayer.swift
2021-10-12 15:07:00 +04:00

55 lines
1.7 KiB
Swift

import Foundation
import CoreGraphics
/**
A CompositionLayer responsible for initializing and rendering shapes
*/
final class MyShapeCompositionLayer: MyCompositionLayer {
let rootNode: AnimatorNode?
let renderContainer: ShapeContainerLayer?
init(shapeLayer: ShapeLayerModel) {
let results = shapeLayer.items.initializeNodeTree()
let renderContainer = ShapeContainerLayer()
self.renderContainer = renderContainer
self.rootNode = results.rootNode
super.init(layer: shapeLayer, size: .zero)
//NOTE
//contentsLayer.addSublayer(renderContainer)
for container in results.renderContainers {
renderContainer.insertRenderLayer(container)
}
rootNode?.updateTree(0, forceUpdates: true)
}
override func displayContentsWithFrame(frame: CGFloat, forceUpdates: Bool) {
rootNode?.updateTree(frame, forceUpdates: forceUpdates)
renderContainer?.markRenderUpdates(forFrame: frame)
}
override func captureGeometry() -> CapturedGeometryNode {
var subnodes: [CapturedGeometryNode] = []
if let renderContainer = self.renderContainer {
subnodes.append(renderContainer.captureGeometry())
}
return CapturedGeometryNode(
transform: self.transformNode.globalTransform,
alpha: CGFloat(self.transformNode.opacity),
isHidden: self.isHidden,
displayItem: nil,
subnodes: subnodes
)
}
override func captureDisplayItem() -> CapturedGeometryNode.DisplayItem? {
preconditionFailure()
}
override func captureChildren() -> [CapturedGeometryNode] {
preconditionFailure()
}
}