lottie-ios 3.2.2 → 3.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/.github/actions/setup/action.yml +32 -0
  2. package/.github/issue_template.md +6 -23
  3. package/.github/workflows/main.yml +98 -0
  4. package/.spi.yml +6 -0
  5. package/.swift-version +1 -0
  6. package/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +7 -0
  7. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  8. package/.swiftpm/xcode/xcuserdata/{brandonwithrow.xcuserdatad → cal.xcuserdatad}/xcschemes/xcschememanagement.plist +25 -15
  9. package/.swiftpm/xcode/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  10. package/Gemfile +4 -0
  11. package/Gemfile.lock +102 -0
  12. package/Lottie.xcodeproj/project.pbxproj +2003 -1972
  13. package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
  14. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  15. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_iOS.xcscheme → Lottie (iOS).xcscheme } +15 -18
  16. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.xcscheme → Lottie (macOS).xcscheme } +7 -20
  17. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.xcscheme → Lottie (tvOS).xcscheme } +5 -18
  18. package/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
  19. package/Lottie.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +24 -0
  20. package/Lottie.xcworkspace/contents.xcworkspacedata +10 -0
  21. package/Lottie.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  22. package/Lottie.xcworkspace/xcshareddata/swiftpm/Package.resolved +115 -0
  23. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  24. package/{Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad → Lottie.xcworkspace/xcuserdata/cal.xcuserdatad}/xcdebugger/Breakpoints_v2.xcbkptlist +2 -2
  25. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/xcdebugger/Expressions.xcexplist +153 -0
  26. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  27. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +39 -0
  28. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +25 -0
  29. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
  30. package/Package.resolved +88 -0
  31. package/Package.swift +10 -15
  32. package/README.md +40 -60
  33. package/Rakefile +121 -0
  34. package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
  35. package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +448 -0
  36. package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +53 -0
  37. package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
  38. package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +28 -0
  39. package/Sources/Private/CoreAnimation/Animations/GradientAnimations.swift +210 -0
  40. package/Sources/Private/CoreAnimation/Animations/LayerProperty.swift +229 -0
  41. package/Sources/Private/CoreAnimation/Animations/OpacityAnimation.swift +52 -0
  42. package/Sources/Private/CoreAnimation/Animations/RectangleAnimation.swift +31 -0
  43. package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +246 -0
  44. package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +95 -0
  45. package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +70 -0
  46. package/Sources/Private/CoreAnimation/Animations/TransformAnimations.swift +205 -0
  47. package/Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift +37 -0
  48. package/Sources/Private/CoreAnimation/CompatibilityTracker.swift +130 -0
  49. package/Sources/Private/CoreAnimation/CoreAnimationLayer.swift +492 -0
  50. package/Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift +35 -0
  51. package/Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift +37 -0
  52. package/Sources/Private/CoreAnimation/Extensions/Keyframes+combinedIfPossible.swift +73 -0
  53. package/Sources/Private/CoreAnimation/Layers/AnimationLayer.swift +83 -0
  54. package/Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +33 -0
  55. package/Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +87 -0
  56. package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +131 -0
  57. package/Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift +94 -0
  58. package/Sources/Private/CoreAnimation/Layers/ImageLayer.swift +79 -0
  59. package/Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +60 -0
  60. package/Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +138 -0
  61. package/Sources/Private/CoreAnimation/Layers/PreCompLayer.swift +140 -0
  62. package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +302 -0
  63. package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +319 -0
  64. package/Sources/Private/CoreAnimation/Layers/SolidLayer.swift +47 -0
  65. package/Sources/Private/CoreAnimation/Layers/TextLayer.swift +91 -0
  66. package/Sources/Private/CoreAnimation/Layers/TransformLayer.swift +11 -0
  67. package/Sources/Private/CoreAnimation/ValueProviderStore.swift +139 -0
  68. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/CompositionLayer.swift +93 -85
  69. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ImageCompositionLayer.swift +24 -21
  70. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/MaskContainerLayer.swift +75 -54
  71. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/NullCompositionLayer.swift +5 -5
  72. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/PreCompositionLayer.swift +61 -44
  73. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ShapeCompositionLayer.swift +22 -20
  74. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/SolidCompositionLayer.swift +26 -17
  75. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/TextCompositionLayer.swift +42 -36
  76. package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +200 -140
  77. package/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +47 -0
  78. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/CompositionLayersInitializer.swift +33 -24
  79. package/{lottie-swift/src/Private/LayerContainers/Utility/TextLayer.swift → Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift} +120 -106
  80. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +25 -24
  81. package/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +41 -0
  82. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerImageProvider.swift +20 -16
  83. package/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +40 -0
  84. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerTransformNode.swift +82 -67
  85. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +4 -4
  86. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/NodeProperty.swift +29 -21
  87. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +16 -10
  88. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +6 -6
  89. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +5 -5
  90. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +10 -8
  91. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueContainer.swift +25 -21
  92. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +23 -17
  93. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/KeyframeInterpolator.swift +125 -108
  94. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift +22 -17
  95. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift +110 -79
  96. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift +22 -16
  97. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift +19 -15
  98. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift +22 -20
  99. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift +22 -23
  100. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift +242 -0
  101. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +30 -24
  102. package/{lottie-swift/src/Private/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift → Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift} +93 -66
  103. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +23 -19
  104. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +139 -0
  105. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +170 -0
  106. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/RectNode.swift +95 -58
  107. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift +42 -29
  108. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/StarNode.swift +108 -69
  109. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +155 -0
  110. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift +51 -37
  111. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift +54 -42
  112. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +65 -57
  113. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +84 -58
  114. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +138 -119
  115. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/AnimatorNode.swift +80 -79
  116. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/PathNode.swift +5 -3
  117. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/RenderNode.swift +22 -17
  118. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift +27 -24
  119. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +34 -25
  120. package/Sources/Private/Model/Animation.swift +160 -0
  121. package/Sources/Private/Model/Assets/Asset.swift +43 -0
  122. package/{lottie-swift/src → Sources}/Private/Model/Assets/AssetLibrary.swift +40 -13
  123. package/Sources/Private/Model/Assets/ImageAsset.swift +112 -0
  124. package/{lottie-swift/src → Sources}/Private/Model/Assets/PrecompAsset.swift +20 -10
  125. package/Sources/Private/Model/DictionaryInitializable.swift +67 -0
  126. package/Sources/Private/Model/Extensions/Bundle.swift +34 -0
  127. package/{lottie-swift/src → Sources}/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift +8 -4
  128. package/Sources/Private/Model/Keyframes/KeyframeData.swift +113 -0
  129. package/Sources/Private/Model/Keyframes/KeyframeGroup.swift +197 -0
  130. package/{lottie-swift/src → Sources}/Private/Model/Layers/ImageLayerModel.swift +21 -11
  131. package/Sources/Private/Model/Layers/LayerModel.swift +228 -0
  132. package/{lottie-swift/src → Sources}/Private/Model/Layers/PreCompLayerModel.swift +39 -22
  133. package/{lottie-swift/src → Sources}/Private/Model/Layers/ShapeLayerModel.swift +23 -12
  134. package/{lottie-swift/src → Sources}/Private/Model/Layers/SolidLayerModel.swift +31 -19
  135. package/{lottie-swift/src → Sources}/Private/Model/Layers/TextLayerModel.swift +33 -19
  136. package/Sources/Private/Model/Objects/DashPattern.swift +44 -0
  137. package/Sources/Private/Model/Objects/Marker.swift +33 -0
  138. package/Sources/Private/Model/Objects/Mask.swift +80 -0
  139. package/Sources/Private/Model/Objects/Transform.swift +179 -0
  140. package/Sources/Private/Model/ShapeItems/Ellipse.swift +75 -0
  141. package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
  142. package/Sources/Private/Model/ShapeItems/GradientFill.swift +124 -0
  143. package/Sources/Private/Model/ShapeItems/GradientStroke.swift +186 -0
  144. package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
  145. package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -11
  146. package/Sources/Private/Model/ShapeItems/Rectangle.swift +73 -0
  147. package/Sources/Private/Model/ShapeItems/Repeater.swift +136 -0
  148. package/Sources/Private/Model/ShapeItems/Shape.swift +56 -0
  149. package/Sources/Private/Model/ShapeItems/ShapeItem.swift +163 -0
  150. package/Sources/Private/Model/ShapeItems/ShapeTransform.swift +136 -0
  151. package/Sources/Private/Model/ShapeItems/Star.swift +132 -0
  152. package/Sources/Private/Model/ShapeItems/Stroke.swift +102 -0
  153. package/Sources/Private/Model/ShapeItems/Trim.swift +78 -0
  154. package/Sources/Private/Model/Text/Font.swift +61 -0
  155. package/{lottie-swift/src → Sources}/Private/Model/Text/Glyph.swift +63 -39
  156. package/Sources/Private/Model/Text/TextAnimator.swift +164 -0
  157. package/Sources/Private/Model/Text/TextDocument.swift +123 -0
  158. package/Sources/Private/RootAnimationLayer.swift +51 -0
  159. package/{lottie-swift/src → Sources}/Private/Utility/Debugging/AnimatorNodeDebugging.swift +7 -7
  160. package/{lottie-swift/src → Sources}/Private/Utility/Debugging/LayerDebugging.swift +72 -48
  161. package/Sources/Private/Utility/Debugging/TestHelpers.swift +10 -0
  162. package/{lottie-swift/src → Sources}/Private/Utility/Extensions/AnimationKeypathExtension.swift +69 -59
  163. package/Sources/Private/Utility/Extensions/BlendMode+Filter.swift +31 -0
  164. package/Sources/Private/Utility/Extensions/CGColor+RGB.swift +22 -0
  165. package/{lottie-swift/src → Sources}/Private/Utility/Extensions/CGFloatExtensions.swift +70 -67
  166. package/Sources/Private/Utility/Extensions/DataExtension.swift +27 -0
  167. package/Sources/Private/Utility/Extensions/MathKit.swift +450 -0
  168. package/Sources/Private/Utility/Extensions/StringExtensions.swift +38 -0
  169. package/{lottie-swift/src → Sources}/Private/Utility/Helpers/AnimationContext.swift +42 -16
  170. package/Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift +134 -0
  171. package/{lottie-swift/src → Sources}/Private/Utility/Interpolatable/KeyframeExtensions.swift +13 -10
  172. package/Sources/Private/Utility/Interpolatable/KeyframeGroup+Extensions.swift +59 -0
  173. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -143
  174. package/Sources/Private/Utility/Primitives/CGPointExtension.swift +35 -0
  175. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/ColorExtension.swift +46 -14
  176. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/CompoundBezierPath.swift +58 -49
  177. package/Sources/Private/Utility/Primitives/CurveVertex.swift +184 -0
  178. package/Sources/Private/Utility/Primitives/PathElement.swift +75 -0
  179. package/Sources/Private/Utility/Primitives/UnitBezier.swift +115 -0
  180. package/Sources/Private/Utility/Primitives/VectorsExtensions.swift +341 -0
  181. package/Sources/Public/Animation/AnimationPublic.swift +266 -0
  182. package/Sources/Public/Animation/AnimationView.swift +1335 -0
  183. package/Sources/Public/Animation/AnimationViewInitializers.swift +109 -0
  184. package/Sources/Public/AnimationCache/AnimationCacheProvider.swift +22 -0
  185. package/{lottie-swift/src → Sources}/Public/AnimationCache/LRUAnimationCache.swift +22 -18
  186. package/Sources/Public/DynamicProperties/AnimationKeypath.swift +49 -0
  187. package/Sources/Public/DynamicProperties/AnyValueProvider.swift +132 -0
  188. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +54 -36
  189. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +40 -36
  190. package/Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +123 -0
  191. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +40 -35
  192. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +40 -35
  193. package/{lottie-swift/src → Sources}/Public/FontProvider/AnimationFontProvider.swift +15 -8
  194. package/Sources/Public/ImageProvider/AnimationImageProvider.swift +21 -0
  195. package/Sources/Public/Keyframes/Interpolatable.swift +253 -0
  196. package/Sources/Public/Keyframes/Keyframe.swift +92 -0
  197. package/Sources/Public/Logging/LottieLogger.swift +137 -0
  198. package/Sources/Public/LottieConfiguration.swift +143 -0
  199. package/{lottie-swift/src → Sources}/Public/Primitives/AnimationTime.swift +1 -1
  200. package/{lottie-swift/src → Sources}/Public/Primitives/Color.swift +10 -6
  201. package/{lottie-swift/src → Sources}/Public/Primitives/Vectors.swift +13 -12
  202. package/Sources/Public/TextProvider/AnimationTextProvider.swift +53 -0
  203. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedButton.swift +42 -26
  204. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +100 -91
  205. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +128 -94
  206. package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +3 -3
  207. package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
  208. package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +36 -34
  209. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +4 -0
  210. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +38 -29
  211. package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +24 -21
  212. package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +4 -4
  213. package/{lottie-swift/src/Public/MacOS/AnimationSubview.swift → Sources/Public/macOS/AnimationSubview.macOS.swift} +4 -5
  214. package/{lottie-swift/src/Public/MacOS/LottieView.swift → Sources/Public/macOS/AnimationViewBase.macOS.swift} +58 -50
  215. package/{lottie-swift/src/Public/MacOS/BundleImageProvider.swift → Sources/Public/macOS/BundleImageProvider.macOS.swift} +31 -32
  216. package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +67 -0
  217. package/Tests/AnimationKeypathTests.swift +94 -0
  218. package/Tests/AutomaticEngineTests.swift +57 -0
  219. package/Tests/BundleTests.swift +25 -0
  220. package/Tests/DataURLTests.swift +64 -0
  221. package/Tests/ParsingTests.swift +43 -0
  222. package/Tests/PerformanceTests.swift +215 -0
  223. package/Tests/SnapshotConfiguration.swift +153 -0
  224. package/Tests/SnapshotTests.swift +265 -0
  225. package/Tests/Utils/Bundle+Module.swift +30 -0
  226. package/Tests/Utils/HardcodedFontProvider.swift +19 -0
  227. package/Tests/Utils/HardcodedImageProvider.swift +23 -0
  228. package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
  229. package/Tests/ValueProvidersTests.swift +27 -0
  230. package/lottie-ios.podspec +11 -12
  231. package/package.json +1 -1
  232. package/script/test-carthage/Cartfile +1 -0
  233. package/script/test-carthage/Cartfile.resolved +1 -0
  234. package/script/test-carthage/CarthageTest/AppDelegate.swift +26 -0
  235. package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  236. package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  237. package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
  238. package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
  239. package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
  240. package/script/test-carthage/CarthageTest/Info.plist +66 -0
  241. package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
  242. package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
  243. package/script/test-carthage/CarthageTest-macOS/AppDelegate.swift +7 -0
  244. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  245. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
  246. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/Contents.json +6 -0
  247. package/script/test-carthage/CarthageTest-macOS/Base.lproj/Main.storyboard +717 -0
  248. package/script/test-carthage/CarthageTest-macOS/CarthageTest_macOS.entitlements +10 -0
  249. package/script/test-carthage/CarthageTest-macOS/ViewController.swift +15 -0
  250. package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +532 -0
  251. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  252. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  253. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  254. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  255. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  256. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  257. package/script/test-carthage/Mintfile +1 -0
  258. package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
  259. package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  260. package/script/test-spm/Mintfile +1 -0
  261. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  262. package/Lottie/Info.plist +0 -22
  263. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  264. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
  265. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
  266. package/lottie-swift/Assets/.gitkeep +0 -0
  267. package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
  268. package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
  269. package/lottie-swift/src/Private/Model/Animation.swift +0 -107
  270. package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
  271. package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
  272. package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
  273. package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
  274. package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
  275. package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
  276. package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
  277. package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
  278. package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
  279. package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
  280. package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
  281. package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
  282. package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
  283. package/lottie-swift/src/Private/Model/ShapeItems/Group.swift +0 -32
  284. package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
  285. package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
  286. package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
  287. package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
  288. package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
  289. package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
  290. package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
  291. package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
  292. package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
  293. package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
  294. package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
  295. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
  296. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
  297. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
  298. package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
  299. package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
  300. package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
  301. package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
  302. package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
  303. package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
  304. package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
  305. package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
  306. package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1006
  307. package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
  308. package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
  309. package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
  310. package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
  311. package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
  312. package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
  313. package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
  314. package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
  315. package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
  316. package/lottie-swift-testing.podspec +0 -32
@@ -1,70 +0,0 @@
1
- //
2
- // TextDocument.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/9/19.
6
- //
7
-
8
- import Foundation
9
-
10
- enum TextJustification: Int, Codable {
11
- case left
12
- case right
13
- case center
14
- }
15
-
16
- final class TextDocument: Codable {
17
-
18
- /// The Text
19
- let text: String
20
-
21
- /// The Font size
22
- let fontSize: Double
23
-
24
- /// The Font Family
25
- let fontFamily: String
26
-
27
- /// Justification
28
- let justification: TextJustification
29
-
30
- /// Tracking
31
- let tracking: Int
32
-
33
- /// Line Height
34
- let lineHeight: Double
35
-
36
- /// Baseline
37
- let baseline: Double?
38
-
39
- /// Fill Color data
40
- let fillColorData: Color?
41
-
42
- /// Scroke Color data
43
- let strokeColorData: Color?
44
-
45
- /// Stroke Width
46
- let strokeWidth: Double?
47
-
48
- /// Stroke Over Fill
49
- let strokeOverFill: Bool?
50
-
51
- let textFramePosition: Vector3D?
52
-
53
- let textFrameSize: Vector3D?
54
-
55
- private enum CodingKeys : String, CodingKey {
56
- case text = "t"
57
- case fontSize = "s"
58
- case fontFamily = "f"
59
- case justification = "j"
60
- case tracking = "tr"
61
- case lineHeight = "lh"
62
- case baseline = "ls"
63
- case fillColorData = "fc"
64
- case strokeColorData = "sc"
65
- case strokeWidth = "sw"
66
- case strokeOverFill = "of"
67
- case textFramePosition = "ps"
68
- case textFrameSize = "sz"
69
- }
70
- }
@@ -1,109 +0,0 @@
1
- //
2
- // EllipseNode.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/17/19.
6
- //
7
-
8
- import Foundation
9
- import QuartzCore
10
-
11
- final class EllipseNodeProperties: NodePropertyMap, KeypathSearchable {
12
-
13
- var keypathName: String
14
-
15
- init(ellipse: Ellipse) {
16
- self.keypathName = ellipse.name
17
- self.direction = ellipse.direction
18
- self.position = NodeProperty(provider: KeyframeInterpolator(keyframes: ellipse.position.keyframes))
19
- self.size = NodeProperty(provider: KeyframeInterpolator(keyframes: ellipse.size.keyframes))
20
- self.keypathProperties = [
21
- "Position" : position,
22
- "Size" : size
23
- ]
24
- self.properties = Array(keypathProperties.values)
25
- }
26
-
27
- let direction: PathDirection
28
- let position: NodeProperty<Vector3D>
29
- let size: NodeProperty<Vector3D>
30
-
31
- let keypathProperties: [String : AnyNodeProperty]
32
- let properties: [AnyNodeProperty]
33
- }
34
-
35
- final class EllipseNode: AnimatorNode, PathNode {
36
-
37
- let pathOutput: PathOutputNode
38
-
39
- let properties: EllipseNodeProperties
40
-
41
- init(parentNode: AnimatorNode?, ellipse: Ellipse) {
42
- self.pathOutput = PathOutputNode(parent: parentNode?.outputNode)
43
- self.properties = EllipseNodeProperties(ellipse: ellipse)
44
- self.parentNode = parentNode
45
- }
46
-
47
- // MARK: Animator Node
48
-
49
- var propertyMap: NodePropertyMap & KeypathSearchable {
50
- return properties
51
- }
52
-
53
- let parentNode: AnimatorNode?
54
- var hasLocalUpdates: Bool = false
55
- var hasUpstreamUpdates: Bool = false
56
- var lastUpdateFrame: CGFloat? = nil
57
- var isEnabled: Bool = true {
58
- didSet{
59
- self.pathOutput.isEnabled = self.isEnabled
60
- }
61
- }
62
-
63
- func rebuildOutputs(frame: CGFloat) {
64
- let ellipseSize = properties.size.value.sizeValue
65
- let center = properties.position.value.pointValue
66
-
67
- // Unfortunately we HAVE to manually build out the ellipse.
68
- // Every Apple method constructs an ellipse from the 3 o-clock position
69
- // After effects constructs from the Noon position.
70
- // After effects does clockwise, but also has a flag for reversed.
71
-
72
- var half = ellipseSize * 0.5
73
- if properties.direction == .counterClockwise {
74
- half.width = half.width * -1
75
- }
76
-
77
-
78
- let q1 = CGPoint(x: center.x, y: center.y - half.height)
79
- let q2 = CGPoint(x: center.x + half.width, y: center.y)
80
- let q3 = CGPoint(x: center.x, y: center.y + half.height)
81
- let q4 = CGPoint(x: center.x - half.width, y: center.y)
82
-
83
- let cp = half * EllipseNode.ControlPointConstant
84
-
85
- var path = BezierPath(startPoint: CurveVertex(point: q1,
86
- inTangentRelative: CGPoint(x: -cp.width, y: 0),
87
- outTangentRelative: CGPoint(x: cp.width, y: 0)))
88
- path.addVertex(CurveVertex(point: q2,
89
- inTangentRelative: CGPoint(x: 0, y: -cp.height),
90
- outTangentRelative: CGPoint(x: 0, y: cp.height)))
91
-
92
- path.addVertex(CurveVertex(point: q3,
93
- inTangentRelative: CGPoint(x: cp.width, y: 0),
94
- outTangentRelative: CGPoint(x: -cp.width, y: 0)))
95
-
96
- path.addVertex(CurveVertex(point: q4,
97
- inTangentRelative: CGPoint(x: 0, y: cp.height),
98
- outTangentRelative: CGPoint(x: 0, y: -cp.height)))
99
-
100
- path.addVertex(CurveVertex(point: q1,
101
- inTangentRelative: CGPoint(x: -cp.width, y: 0),
102
- outTangentRelative: CGPoint(x: cp.width, y: 0)))
103
- path.close()
104
- pathOutput.setPath(path, updateFrame: frame)
105
- }
106
-
107
- static let ControlPointConstant: CGFloat = 0.55228
108
-
109
- }
@@ -1,132 +0,0 @@
1
- //
2
- // PolygonNode.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/21/19.
6
- //
7
-
8
- import Foundation
9
- import QuartzCore
10
-
11
- final class PolygonNodeProperties: NodePropertyMap, KeypathSearchable {
12
-
13
- var keypathName: String
14
-
15
- var childKeypaths: [KeypathSearchable] = []
16
-
17
- init(star: Star) {
18
- self.keypathName = star.name
19
- self.direction = star.direction
20
- self.position = NodeProperty(provider: KeyframeInterpolator(keyframes: star.position.keyframes))
21
- self.outerRadius = NodeProperty(provider: KeyframeInterpolator(keyframes: star.outerRadius.keyframes))
22
- self.outerRoundedness = NodeProperty(provider: KeyframeInterpolator(keyframes: star.outerRoundness.keyframes))
23
- self.rotation = NodeProperty(provider: KeyframeInterpolator(keyframes: star.rotation.keyframes))
24
- self.points = NodeProperty(provider: KeyframeInterpolator(keyframes: star.points.keyframes))
25
- self.keypathProperties = [
26
- "Position" : position,
27
- "Outer Radius" : outerRadius,
28
- "Outer Roundedness" : outerRoundedness,
29
- "Rotation" : rotation,
30
- "Points" : points
31
- ]
32
- self.properties = Array(keypathProperties.values)
33
- }
34
-
35
- let keypathProperties: [String : AnyNodeProperty]
36
- let properties: [AnyNodeProperty]
37
-
38
- let direction: PathDirection
39
- let position: NodeProperty<Vector3D>
40
- let outerRadius: NodeProperty<Vector1D>
41
- let outerRoundedness: NodeProperty<Vector1D>
42
- let rotation: NodeProperty<Vector1D>
43
- let points: NodeProperty<Vector1D>
44
- }
45
-
46
- final class PolygonNode: AnimatorNode, PathNode {
47
-
48
- let properties: PolygonNodeProperties
49
-
50
- let pathOutput: PathOutputNode
51
-
52
- init(parentNode: AnimatorNode?, star: Star) {
53
- self.pathOutput = PathOutputNode(parent: parentNode?.outputNode)
54
- self.properties = PolygonNodeProperties(star: star)
55
- self.parentNode = parentNode
56
- }
57
-
58
- // MARK: Animator Node
59
-
60
- var propertyMap: NodePropertyMap & KeypathSearchable {
61
- return properties
62
- }
63
-
64
- let parentNode: AnimatorNode?
65
- var hasLocalUpdates: Bool = false
66
- var hasUpstreamUpdates: Bool = false
67
- var lastUpdateFrame: CGFloat? = nil
68
- var isEnabled: Bool = true {
69
- didSet{
70
- self.pathOutput.isEnabled = self.isEnabled
71
- }
72
- }
73
-
74
- /// Magic number needed for constructing path.
75
- static let PolygonConstant: CGFloat = 0.25
76
-
77
- func rebuildOutputs(frame: CGFloat) {
78
- let outerRadius = properties.outerRadius.value.cgFloatValue
79
- let outerRoundedness = properties.outerRoundedness.value.cgFloatValue * 0.01
80
- let numberOfPoints = properties.points.value.cgFloatValue
81
- let rotation = properties.rotation.value.cgFloatValue
82
- let position = properties.position.value.pointValue
83
-
84
- var currentAngle = (rotation - 90).toRadians()
85
- let anglePerPoint = ((2 * CGFloat.pi) / numberOfPoints)
86
-
87
- var point = CGPoint(x: (outerRadius * cos(currentAngle)),
88
- y: (outerRadius * sin(currentAngle)))
89
- var vertices = [CurveVertex(point: point + position, inTangentRelative: .zero, outTangentRelative: .zero)]
90
-
91
- var previousPoint = point
92
- currentAngle += anglePerPoint;
93
- for _ in 0..<Int(ceil(numberOfPoints)) {
94
- previousPoint = point
95
- point = CGPoint(x: (outerRadius * cos(currentAngle)),
96
- y: (outerRadius * sin(currentAngle)))
97
-
98
- if outerRoundedness != 0 {
99
- let cp1Theta = (atan2(previousPoint.y, previousPoint.x) - CGFloat.pi / 2)
100
- let cp1Dx = cos(cp1Theta);
101
- let cp1Dy = sin(cp1Theta);
102
-
103
- let cp2Theta = (atan2(point.y, point.x) - CGFloat.pi / 2)
104
- let cp2Dx = cos(cp2Theta)
105
- let cp2Dy = sin(cp2Theta)
106
-
107
- let cp1 = CGPoint(x: outerRadius * outerRoundedness * PolygonNode.PolygonConstant * cp1Dx,
108
- y: outerRadius * outerRoundedness * PolygonNode.PolygonConstant * cp1Dy)
109
- let cp2 = CGPoint(x: outerRadius * outerRoundedness * PolygonNode.PolygonConstant * cp2Dx,
110
- y: outerRadius * outerRoundedness * PolygonNode.PolygonConstant * cp2Dy)
111
-
112
- let previousVertex = vertices[vertices.endIndex-1]
113
- vertices[vertices.endIndex-1] = CurveVertex(previousVertex.inTangent, previousVertex.point, previousVertex.point - cp1 + position)
114
- vertices.append(CurveVertex(point: point + position, inTangentRelative: cp2, outTangentRelative: .zero))
115
- } else {
116
- vertices.append(CurveVertex(point: point + position, inTangentRelative: .zero, outTangentRelative: .zero))
117
- }
118
- currentAngle += anglePerPoint;
119
- }
120
- let reverse = properties.direction == .counterClockwise
121
- if reverse {
122
- vertices = vertices.reversed()
123
- }
124
- var path = BezierPath()
125
- for vertex in vertices {
126
- path.addVertex(reverse ? vertex.reversed() : vertex)
127
- }
128
- path.close()
129
- pathOutput.setPath(path, updateFrame: frame)
130
- }
131
-
132
- }
@@ -1,141 +0,0 @@
1
- //
2
- // GroupNode.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/18/19.
6
- //
7
-
8
- import Foundation
9
- import QuartzCore
10
- import CoreGraphics
11
-
12
- final class GroupNodeProperties: NodePropertyMap, KeypathSearchable {
13
-
14
- var keypathName: String = "Transform"
15
-
16
- var childKeypaths: [KeypathSearchable] = []
17
-
18
- init(transform: ShapeTransform?) {
19
- if let transform = transform {
20
- self.anchor = NodeProperty(provider: KeyframeInterpolator(keyframes: transform.anchor.keyframes))
21
- self.position = NodeProperty(provider: KeyframeInterpolator(keyframes: transform.position.keyframes))
22
- self.scale = NodeProperty(provider: KeyframeInterpolator(keyframes: transform.scale.keyframes))
23
- self.rotation = NodeProperty(provider: KeyframeInterpolator(keyframes: transform.rotation.keyframes))
24
- self.opacity = NodeProperty(provider: KeyframeInterpolator(keyframes: transform.opacity.keyframes))
25
- self.skew = NodeProperty(provider: KeyframeInterpolator(keyframes: transform.skew.keyframes))
26
- self.skewAxis = NodeProperty(provider: KeyframeInterpolator(keyframes: transform.skewAxis.keyframes))
27
- } else {
28
- /// Transform node missing. Default to empty transform.
29
- self.anchor = NodeProperty(provider: SingleValueProvider(Vector3D(x: CGFloat(0), y: CGFloat(0), z: CGFloat(0))))
30
- self.position = NodeProperty(provider: SingleValueProvider(Vector3D(x: CGFloat(0), y: CGFloat(0), z: CGFloat(0))))
31
- self.scale = NodeProperty(provider: SingleValueProvider(Vector3D(x: CGFloat(1), y: CGFloat(1), z: CGFloat(1))))
32
- self.rotation = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
33
- self.opacity = NodeProperty(provider: SingleValueProvider(Vector1D(1)))
34
- self.skew = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
35
- self.skewAxis = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
36
- }
37
- self.keypathProperties = [
38
- "Anchor Point" : anchor,
39
- "Position" : position,
40
- "Scale" : scale,
41
- "Rotation" : rotation,
42
- "Opacity" : opacity,
43
- "Skew" : skew,
44
- "Skew Axis" : skewAxis
45
- ]
46
- self.properties = Array(keypathProperties.values)
47
- }
48
-
49
- let keypathProperties: [String : AnyNodeProperty]
50
- let properties: [AnyNodeProperty]
51
-
52
- let anchor: NodeProperty<Vector3D>
53
- let position: NodeProperty<Vector3D>
54
- let scale: NodeProperty<Vector3D>
55
- let rotation: NodeProperty<Vector1D>
56
- let opacity: NodeProperty<Vector1D>
57
- let skew: NodeProperty<Vector1D>
58
- let skewAxis: NodeProperty<Vector1D>
59
-
60
- var caTransform: CATransform3D {
61
- return CATransform3D.makeTransform(anchor: anchor.value.pointValue,
62
- position: position.value.pointValue,
63
- scale: scale.value.sizeValue,
64
- rotation: rotation.value.cgFloatValue,
65
- skew: skew.value.cgFloatValue,
66
- skewAxis: skewAxis.value.cgFloatValue)
67
- }
68
- }
69
-
70
- final class GroupNode: AnimatorNode {
71
-
72
- // MARK: Properties
73
- let groupOutput: GroupOutputNode
74
-
75
- let properties: GroupNodeProperties
76
-
77
- let rootNode: AnimatorNode?
78
-
79
- var container: ShapeContainerLayer = ShapeContainerLayer()
80
-
81
- // MARK: Initializer
82
- init(name: String, parentNode: AnimatorNode?, tree: NodeTree) {
83
- self.parentNode = parentNode
84
- self.keypathName = name
85
- self.rootNode = tree.rootNode
86
- self.properties = GroupNodeProperties(transform: tree.transform)
87
- self.groupOutput = GroupOutputNode(parent: parentNode?.outputNode, rootNode: rootNode?.outputNode)
88
- var childKeypaths: [KeypathSearchable] = tree.childrenNodes
89
- childKeypaths.append(properties)
90
- self.childKeypaths = childKeypaths
91
-
92
- for childContainer in tree.renderContainers {
93
- container.insertRenderLayer(childContainer)
94
- }
95
- }
96
-
97
- // MARK: Keypath Searchable
98
-
99
- let keypathName: String
100
-
101
- let childKeypaths: [KeypathSearchable]
102
-
103
- var keypathLayer: CALayer? {
104
- return container
105
- }
106
-
107
- // MARK: Animator Node Protocol
108
-
109
- var propertyMap: NodePropertyMap & KeypathSearchable {
110
- return properties
111
- }
112
-
113
- var outputNode: NodeOutput {
114
- return groupOutput
115
- }
116
-
117
- let parentNode: AnimatorNode?
118
- var hasLocalUpdates: Bool = false
119
- var hasUpstreamUpdates: Bool = false
120
- var lastUpdateFrame: CGFloat? = nil
121
- var isEnabled: Bool = true {
122
- didSet {
123
- container.isHidden = !isEnabled
124
- }
125
- }
126
-
127
- func performAdditionalLocalUpdates(frame: CGFloat, forceLocalUpdate: Bool) -> Bool {
128
- return rootNode?.updateContents(frame, forceLocalUpdate: forceLocalUpdate) ?? false
129
- }
130
-
131
- func performAdditionalOutputUpdates(_ frame: CGFloat, forceOutputUpdate: Bool) {
132
- rootNode?.updateOutputs(frame, forceOutputUpdate: forceOutputUpdate)
133
- }
134
-
135
- func rebuildOutputs(frame: CGFloat) {
136
- container.opacity = Float(properties.opacity.value.cgFloatValue) * 0.01
137
- container.transform = properties.caTransform
138
- groupOutput.setTransform(container.transform, forFrame: frame)
139
- }
140
-
141
- }