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
@@ -5,28 +5,28 @@
5
5
  // Created by Brandon Withrow on 1/23/19.
6
6
  //
7
7
 
8
- import Foundation
9
8
  import CoreGraphics
9
+ import Foundation
10
10
 
11
- // MARK: - Properties
11
+ // MARK: - GradientStrokeProperties
12
12
 
13
13
  final class GradientStrokeProperties: NodePropertyMap, KeypathSearchable {
14
-
15
- var keypathName: String
16
-
14
+
15
+ // MARK: Lifecycle
16
+
17
17
  init(gradientStroke: GradientStroke) {
18
- self.keypathName = gradientStroke.name
19
- self.opacity = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.opacity.keyframes))
20
- self.startPoint = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.startPoint.keyframes))
21
- self.endPoint = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.endPoint.keyframes))
22
- self.colors = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.colors.keyframes))
23
- self.gradientType = gradientStroke.gradientType
24
- self.numberOfColors = gradientStroke.numberOfColors
25
- self.width = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.width.keyframes))
26
- self.miterLimit = CGFloat(gradientStroke.miterLimit)
27
- self.lineCap = gradientStroke.lineCap
28
- self.lineJoin = gradientStroke.lineJoin
29
-
18
+ keypathName = gradientStroke.name
19
+ opacity = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.opacity.keyframes))
20
+ startPoint = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.startPoint.keyframes))
21
+ endPoint = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.endPoint.keyframes))
22
+ colors = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.colors.keyframes))
23
+ gradientType = gradientStroke.gradientType
24
+ numberOfColors = gradientStroke.numberOfColors
25
+ width = NodeProperty(provider: KeyframeInterpolator(keyframes: gradientStroke.width.keyframes))
26
+ miterLimit = CGFloat(gradientStroke.miterLimit)
27
+ lineCap = gradientStroke.lineCap
28
+ lineJoin = gradientStroke.lineJoin
29
+
30
30
  if let dashes = gradientStroke.dashPattern {
31
31
  var dashPatterns = ContiguousArray<ContiguousArray<Keyframe<Vector1D>>>()
32
32
  var dashPhase = ContiguousArray<Keyframe<Vector1D>>()
@@ -37,84 +37,92 @@ final class GradientStrokeProperties: NodePropertyMap, KeypathSearchable {
37
37
  dashPatterns.append(dash.value.keyframes)
38
38
  }
39
39
  }
40
- self.dashPattern = NodeProperty(provider: GroupInterpolator(keyframeGroups: dashPatterns))
40
+ dashPattern = NodeProperty(provider: GroupInterpolator(keyframeGroups: dashPatterns))
41
41
  self.dashPhase = NodeProperty(provider: KeyframeInterpolator(keyframes: dashPhase))
42
42
  } else {
43
- self.dashPattern = NodeProperty(provider: SingleValueProvider([Vector1D]()))
44
- self.dashPhase = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
43
+ dashPattern = NodeProperty(provider: SingleValueProvider([Vector1D]()))
44
+ dashPhase = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
45
45
  }
46
- self.keypathProperties = [
46
+ keypathProperties = [
47
47
  "Opacity" : opacity,
48
48
  "Start Point" : startPoint,
49
49
  "End Point" : endPoint,
50
50
  "Colors" : colors,
51
51
  "Stroke Width" : width,
52
52
  "Dashes" : dashPattern,
53
- "Dash Phase" : dashPhase
53
+ "Dash Phase" : dashPhase,
54
54
  ]
55
- self.properties = Array(keypathProperties.values)
55
+ properties = Array(keypathProperties.values)
56
56
  }
57
-
57
+
58
+ // MARK: Internal
59
+
60
+ var keypathName: String
61
+
58
62
  let opacity: NodeProperty<Vector1D>
59
63
  let startPoint: NodeProperty<Vector3D>
60
64
  let endPoint: NodeProperty<Vector3D>
61
65
  let colors: NodeProperty<[Double]>
62
66
  let width: NodeProperty<Vector1D>
63
-
67
+
64
68
  let dashPattern: NodeProperty<[Vector1D]>
65
69
  let dashPhase: NodeProperty<Vector1D>
66
-
70
+
67
71
  let lineCap: LineCap
68
72
  let lineJoin: LineJoin
69
73
  let miterLimit: CGFloat
70
74
  let gradientType: GradientType
71
75
  let numberOfColors: Int
72
-
73
-
74
- let keypathProperties: [String : AnyNodeProperty]
76
+
77
+ let keypathProperties: [String: AnyNodeProperty]
75
78
  let properties: [AnyNodeProperty]
76
-
79
+
77
80
  }
78
81
 
79
- // MARK: - Node
82
+ // MARK: - GradientStrokeNode
80
83
 
81
84
  final class GradientStrokeNode: AnimatorNode, RenderNode {
82
-
83
- let strokeRender: GradientStrokeRenderer
84
-
85
- var renderer: NodeOutput & Renderable {
86
- return strokeRender
87
- }
88
-
89
- let strokeProperties: GradientStrokeProperties
90
-
85
+
86
+ // MARK: Lifecycle
87
+
91
88
  init(parentNode: AnimatorNode?, gradientStroke: GradientStroke) {
92
- self.strokeRender = GradientStrokeRenderer(parent: parentNode?.outputNode)
93
- self.strokeProperties = GradientStrokeProperties(gradientStroke: gradientStroke)
89
+ strokeRender = GradientStrokeRenderer(parent: parentNode?.outputNode)
90
+ strokeProperties = GradientStrokeProperties(gradientStroke: gradientStroke)
94
91
  self.parentNode = parentNode
95
92
  }
96
-
93
+
94
+ // MARK: Internal
95
+
96
+ let strokeRender: GradientStrokeRenderer
97
+
98
+ let strokeProperties: GradientStrokeProperties
99
+
100
+ let parentNode: AnimatorNode?
101
+ var hasLocalUpdates = false
102
+ var hasUpstreamUpdates = false
103
+ var lastUpdateFrame: CGFloat? = nil
104
+
105
+ var renderer: NodeOutput & Renderable {
106
+ strokeRender
107
+ }
108
+
97
109
  // MARK: Animator Node Protocol
98
-
110
+
99
111
  var propertyMap: NodePropertyMap & KeypathSearchable {
100
- return strokeProperties
112
+ strokeProperties
101
113
  }
102
-
103
- let parentNode: AnimatorNode?
104
- var hasLocalUpdates: Bool = false
105
- var hasUpstreamUpdates: Bool = false
106
- var lastUpdateFrame: CGFloat? = nil
107
- var isEnabled: Bool = true {
114
+
115
+ var isEnabled = true {
108
116
  didSet {
109
117
  strokeRender.isEnabled = isEnabled
110
118
  }
111
119
  }
112
-
120
+
113
121
  func localUpdatesPermeateDownstream() -> Bool {
114
- return false
122
+ false
115
123
  }
116
-
117
- func rebuildOutputs(frame: CGFloat) {
124
+
125
+ func rebuildOutputs(frame _: CGFloat) {
118
126
  /// Update gradient properties
119
127
  strokeRender.gradientRender.start = strokeProperties.startPoint.value.pointValue
120
128
  strokeRender.gradientRender.end = strokeProperties.endPoint.value.pointValue
@@ -122,14 +130,14 @@ final class GradientStrokeNode: AnimatorNode, RenderNode {
122
130
  strokeRender.gradientRender.colors = strokeProperties.colors.value.map { CGFloat($0) }
123
131
  strokeRender.gradientRender.type = strokeProperties.gradientType
124
132
  strokeRender.gradientRender.numberOfColors = strokeProperties.numberOfColors
125
-
133
+
126
134
  /// Now update stroke properties
127
135
  strokeRender.strokeRender.opacity = strokeProperties.opacity.value.cgFloatValue
128
136
  strokeRender.strokeRender.width = strokeProperties.width.value.cgFloatValue
129
137
  strokeRender.strokeRender.miterLimit = strokeProperties.miterLimit
130
138
  strokeRender.strokeRender.lineCap = strokeProperties.lineCap
131
139
  strokeRender.strokeRender.lineJoin = strokeProperties.lineJoin
132
-
140
+
133
141
  /// Get dash lengths
134
142
  let dashLengths = strokeProperties.dashPattern.value.map { $0.cgFloatValue }
135
143
  if dashLengths.count > 0 {
@@ -7,112 +7,115 @@
7
7
 
8
8
  import Foundation
9
9
  import QuartzCore
10
- // MARK: - Properties
10
+
11
+ // MARK: - StrokeNodeProperties
11
12
 
12
13
  final class StrokeNodeProperties: NodePropertyMap, KeypathSearchable {
13
-
14
+
15
+ // MARK: Lifecycle
16
+
14
17
  init(stroke: Stroke) {
15
- self.keypathName = stroke.name
16
- self.color = NodeProperty(provider: KeyframeInterpolator(keyframes: stroke.color.keyframes))
17
- self.opacity = NodeProperty(provider: KeyframeInterpolator(keyframes: stroke.opacity.keyframes))
18
- self.width = NodeProperty(provider: KeyframeInterpolator(keyframes: stroke.width.keyframes))
19
- self.miterLimit = CGFloat(stroke.miterLimit)
20
- self.lineCap = stroke.lineCap
21
- self.lineJoin = stroke.lineJoin
22
-
18
+ keypathName = stroke.name
19
+ color = NodeProperty(provider: KeyframeInterpolator(keyframes: stroke.color.keyframes))
20
+ opacity = NodeProperty(provider: KeyframeInterpolator(keyframes: stroke.opacity.keyframes))
21
+ width = NodeProperty(provider: KeyframeInterpolator(keyframes: stroke.width.keyframes))
22
+ miterLimit = CGFloat(stroke.miterLimit)
23
+ lineCap = stroke.lineCap
24
+ lineJoin = stroke.lineJoin
25
+
23
26
  if let dashes = stroke.dashPattern {
24
- var dashPatterns = ContiguousArray<ContiguousArray<Keyframe<Vector1D>>>()
25
- var dashPhase = ContiguousArray<Keyframe<Vector1D>>()
26
- for dash in dashes {
27
- if dash.type == .offset {
28
- dashPhase = dash.value.keyframes
29
- } else {
30
- dashPatterns.append(dash.value.keyframes)
31
- }
32
- }
33
- self.dashPattern = NodeProperty(provider: GroupInterpolator(keyframeGroups: dashPatterns))
27
+ let (dashPatterns, dashPhase) = dashes.shapeLayerConfiguration
28
+ dashPattern = NodeProperty(provider: GroupInterpolator(keyframeGroups: dashPatterns))
34
29
  if dashPhase.count == 0 {
35
30
  self.dashPhase = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
36
31
  } else {
37
32
  self.dashPhase = NodeProperty(provider: KeyframeInterpolator(keyframes: dashPhase))
38
33
  }
39
34
  } else {
40
- self.dashPattern = NodeProperty(provider: SingleValueProvider([Vector1D]()))
41
- self.dashPhase = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
35
+ dashPattern = NodeProperty(provider: SingleValueProvider([Vector1D]()))
36
+ dashPhase = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
42
37
  }
43
- self.keypathProperties = [
38
+ keypathProperties = [
44
39
  "Opacity" : opacity,
45
- "Color" : color,
40
+ PropertyName.color.rawValue : color,
46
41
  "Stroke Width" : width,
47
42
  "Dashes" : dashPattern,
48
- "Dash Phase" : dashPhase
43
+ "Dash Phase" : dashPhase,
49
44
  ]
50
- self.properties = Array(keypathProperties.values)
45
+ properties = Array(keypathProperties.values)
51
46
  }
52
-
47
+
48
+ // MARK: Internal
49
+
53
50
  let keypathName: String
54
- let keypathProperties: [String : AnyNodeProperty]
51
+ let keypathProperties: [String: AnyNodeProperty]
55
52
  let properties: [AnyNodeProperty]
56
-
53
+
57
54
  let opacity: NodeProperty<Vector1D>
58
55
  let color: NodeProperty<Color>
59
56
  let width: NodeProperty<Vector1D>
60
-
57
+
61
58
  let dashPattern: NodeProperty<[Vector1D]>
62
59
  let dashPhase: NodeProperty<Vector1D>
63
-
60
+
64
61
  let lineCap: LineCap
65
62
  let lineJoin: LineJoin
66
63
  let miterLimit: CGFloat
67
-
64
+
68
65
  }
69
66
 
70
- // MARK: - Node
67
+ // MARK: - StrokeNode
71
68
 
72
69
  /// Node that manages stroking a path
73
70
  final class StrokeNode: AnimatorNode, RenderNode {
74
-
75
- let strokeRender: StrokeRenderer
76
- var renderer: NodeOutput & Renderable {
77
- return strokeRender
78
- }
79
-
80
- let strokeProperties: StrokeNodeProperties
81
-
71
+
72
+ // MARK: Lifecycle
73
+
82
74
  init(parentNode: AnimatorNode?, stroke: Stroke) {
83
- self.strokeRender = StrokeRenderer(parent: parentNode?.outputNode)
84
- self.strokeProperties = StrokeNodeProperties(stroke: stroke)
75
+ strokeRender = StrokeRenderer(parent: parentNode?.outputNode)
76
+ strokeProperties = StrokeNodeProperties(stroke: stroke)
85
77
  self.parentNode = parentNode
86
78
  }
87
-
79
+
80
+ // MARK: Internal
81
+
82
+ let strokeRender: StrokeRenderer
83
+
84
+ let strokeProperties: StrokeNodeProperties
85
+
86
+ let parentNode: AnimatorNode?
87
+ var hasLocalUpdates = false
88
+ var hasUpstreamUpdates = false
89
+ var lastUpdateFrame: CGFloat? = nil
90
+
91
+ var renderer: NodeOutput & Renderable {
92
+ strokeRender
93
+ }
94
+
88
95
  // MARK: Animator Node Protocol
89
-
96
+
90
97
  var propertyMap: NodePropertyMap & KeypathSearchable {
91
- return strokeProperties
98
+ strokeProperties
92
99
  }
93
-
94
- let parentNode: AnimatorNode?
95
- var hasLocalUpdates: Bool = false
96
- var hasUpstreamUpdates: Bool = false
97
- var lastUpdateFrame: CGFloat? = nil
98
- var isEnabled: Bool = true {
100
+
101
+ var isEnabled = true {
99
102
  didSet {
100
103
  strokeRender.isEnabled = isEnabled
101
104
  }
102
105
  }
103
-
106
+
104
107
  func localUpdatesPermeateDownstream() -> Bool {
105
- return false
108
+ false
106
109
  }
107
-
108
- func rebuildOutputs(frame: CGFloat) {
110
+
111
+ func rebuildOutputs(frame _: CGFloat) {
109
112
  strokeRender.color = strokeProperties.color.value.cgColorValue
110
113
  strokeRender.opacity = strokeProperties.opacity.value.cgFloatValue * 0.01
111
114
  strokeRender.width = strokeProperties.width.value.cgFloatValue
112
115
  strokeRender.miterLimit = strokeProperties.miterLimit
113
116
  strokeRender.lineCap = strokeProperties.lineCap
114
117
  strokeRender.lineJoin = strokeProperties.lineJoin
115
-
118
+
116
119
  /// Get dash lengths
117
120
  let dashLengths = strokeProperties.dashPattern.value.map { $0.cgFloatValue }
118
121
  if dashLengths.count > 0 {
@@ -123,5 +126,28 @@ final class StrokeNode: AnimatorNode, RenderNode {
123
126
  strokeRender.dashPhase = nil
124
127
  }
125
128
  }
126
-
129
+
130
+ }
131
+
132
+ // MARK: - [DashElement] + shapeLayerConfiguration
133
+
134
+ extension Array where Element == DashElement {
135
+ typealias ShapeLayerConfiguration = (
136
+ dashPatterns: ContiguousArray<ContiguousArray<Keyframe<Vector1D>>>,
137
+ dashPhase: ContiguousArray<Keyframe<Vector1D>>)
138
+
139
+ /// Converts the `[DashElement]` data model into `lineDashPattern` and `lineDashPhase`
140
+ /// representations usable in a `CAShapeLayer`
141
+ var shapeLayerConfiguration: ShapeLayerConfiguration {
142
+ var dashPatterns = ContiguousArray<ContiguousArray<Keyframe<Vector1D>>>()
143
+ var dashPhase = ContiguousArray<Keyframe<Vector1D>>()
144
+ for dash in self {
145
+ if dash.type == .offset {
146
+ dashPhase = dash.value.keyframes
147
+ } else {
148
+ dashPatterns.append(dash.value.keyframes)
149
+ }
150
+ }
151
+ return (dashPatterns, dashPhase)
152
+ }
127
153
  }