lottie-ios 3.2.3 → 3.4.2

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 (434) 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/.github/workflows/stale_issues.yml +17 -0
  5. package/.spi.yml +6 -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/package.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  9. package/.swiftpm/xcode/xcuserdata/{brandonwithrow.xcuserdatad → cal.xcuserdatad}/xcschemes/xcschememanagement.plist +25 -15
  10. package/.swiftpm/xcode/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  11. package/Gemfile +4 -0
  12. package/Gemfile.lock +102 -0
  13. package/Lottie.xcodeproj/project.pbxproj +2011 -1972
  14. package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
  15. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  16. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_iOS.xcscheme → Lottie (iOS).xcscheme } +15 -18
  17. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.xcscheme → Lottie (macOS).xcscheme } +5 -18
  18. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.xcscheme → Lottie (tvOS).xcscheme } +5 -18
  19. package/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
  20. package/Lottie.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +24 -0
  21. package/Lottie.xcworkspace/contents.xcworkspacedata +10 -0
  22. package/Lottie.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  23. package/Lottie.xcworkspace/xcshareddata/swiftpm/Package.resolved +34 -0
  24. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  25. package/{Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad → Lottie.xcworkspace/xcuserdata/cal.xcuserdatad}/xcdebugger/Breakpoints_v2.xcbkptlist +2 -2
  26. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/xcdebugger/Expressions.xcexplist +153 -0
  27. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  28. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +22 -0
  29. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +138 -0
  30. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
  31. package/Package.swift +5 -15
  32. package/README.md +40 -60
  33. package/Rakefile +160 -0
  34. package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
  35. package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +447 -0
  36. package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +81 -0
  37. package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
  38. package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +55 -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 +58 -0
  43. package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +257 -0
  44. package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +124 -0
  45. package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +73 -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 +497 -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 +154 -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 +88 -0
  56. package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +167 -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 +64 -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/RepeaterLayer.swift +85 -0
  63. package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +315 -0
  64. package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +390 -0
  65. package/Sources/Private/CoreAnimation/Layers/SolidLayer.swift +47 -0
  66. package/Sources/Private/CoreAnimation/Layers/TextLayer.swift +91 -0
  67. package/Sources/Private/CoreAnimation/Layers/TransformLayer.swift +11 -0
  68. package/Sources/Private/CoreAnimation/ValueProviderStore.swift +139 -0
  69. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/CompositionLayer.swift +94 -86
  70. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ImageCompositionLayer.swift +24 -21
  71. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/MaskContainerLayer.swift +75 -54
  72. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/NullCompositionLayer.swift +5 -5
  73. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/PreCompositionLayer.swift +59 -43
  74. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ShapeCompositionLayer.swift +22 -20
  75. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/SolidCompositionLayer.swift +26 -17
  76. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/TextCompositionLayer.swift +42 -36
  77. package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +200 -140
  78. package/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +47 -0
  79. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/CompositionLayersInitializer.swift +33 -24
  80. package/{lottie-swift/src/Private/LayerContainers/Utility/TextLayer.swift → Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift} +149 -106
  81. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +26 -24
  82. package/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +41 -0
  83. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerImageProvider.swift +20 -16
  84. package/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +40 -0
  85. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerTransformNode.swift +82 -67
  86. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +9 -4
  87. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/NodeProperty.swift +29 -21
  88. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +16 -10
  89. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +6 -6
  90. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +5 -5
  91. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +10 -8
  92. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueContainer.swift +25 -21
  93. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +23 -17
  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 +247 -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 +57 -42
  112. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +66 -58
  113. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +169 -0
  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 +222 -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 +74 -0
  141. package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
  142. package/Sources/Private/Model/ShapeItems/GradientFill.swift +137 -0
  143. package/Sources/Private/Model/ShapeItems/GradientStroke.swift +185 -0
  144. package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
  145. package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -12
  146. package/Sources/Private/Model/ShapeItems/Rectangle.swift +72 -0
  147. package/Sources/Private/Model/ShapeItems/Repeater.swift +135 -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 +135 -0
  151. package/Sources/Private/Model/ShapeItems/Star.swift +131 -0
  152. package/Sources/Private/Model/ShapeItems/Stroke.swift +101 -0
  153. package/Sources/Private/Model/ShapeItems/Trim.swift +77 -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/Private/NodeRenderSystem/NodeProperties/ValueProviders → Sources/Private/Utility/Interpolatable}/KeyframeInterpolator.swift +125 -108
  174. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -143
  175. package/Sources/Private/Utility/Primitives/CGPointExtension.swift +35 -0
  176. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/ColorExtension.swift +46 -14
  177. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/CompoundBezierPath.swift +58 -49
  178. package/Sources/Private/Utility/Primitives/CurveVertex.swift +184 -0
  179. package/Sources/Private/Utility/Primitives/PathElement.swift +75 -0
  180. package/Sources/Private/Utility/Primitives/UnitBezier.swift +115 -0
  181. package/Sources/Private/Utility/Primitives/VectorsExtensions.swift +341 -0
  182. package/Sources/Public/Animation/AnimationPublic.swift +266 -0
  183. package/Sources/Public/Animation/AnimationView.swift +1335 -0
  184. package/Sources/Public/Animation/AnimationViewInitializers.swift +109 -0
  185. package/Sources/Public/AnimationCache/AnimationCacheProvider.swift +22 -0
  186. package/{lottie-swift/src → Sources}/Public/AnimationCache/LRUAnimationCache.swift +22 -18
  187. package/Sources/Public/DynamicProperties/AnimationKeypath.swift +49 -0
  188. package/Sources/Public/DynamicProperties/AnyValueProvider.swift +132 -0
  189. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +54 -36
  190. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +40 -36
  191. package/Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +123 -0
  192. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +40 -35
  193. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +40 -35
  194. package/{lottie-swift/src → Sources}/Public/FontProvider/AnimationFontProvider.swift +15 -8
  195. package/Sources/Public/ImageProvider/AnimationImageProvider.swift +21 -0
  196. package/Sources/Public/Keyframes/Interpolatable.swift +253 -0
  197. package/Sources/Public/Keyframes/Keyframe.swift +92 -0
  198. package/Sources/Public/Logging/LottieLogger.swift +137 -0
  199. package/Sources/Public/LottieConfiguration.swift +143 -0
  200. package/{lottie-swift/src → Sources}/Public/Primitives/AnimationTime.swift +1 -1
  201. package/{lottie-swift/src → Sources}/Public/Primitives/Color.swift +10 -6
  202. package/{lottie-swift/src → Sources}/Public/Primitives/Vectors.swift +13 -12
  203. package/Sources/Public/TextProvider/AnimationTextProvider.swift +53 -0
  204. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedButton.swift +42 -26
  205. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +100 -91
  206. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +128 -94
  207. package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +3 -3
  208. package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
  209. package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +36 -34
  210. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +4 -0
  211. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +38 -29
  212. package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +24 -21
  213. package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +4 -4
  214. package/{lottie-swift/src/Public/MacOS/AnimationSubview.swift → Sources/Public/macOS/AnimationSubview.macOS.swift} +4 -5
  215. package/{lottie-swift/src/Public/MacOS/LottieView.swift → Sources/Public/macOS/AnimationViewBase.macOS.swift} +58 -50
  216. package/{lottie-swift/src/Public/MacOS/BundleImageProvider.swift → Sources/Public/macOS/BundleImageProvider.macOS.swift} +31 -32
  217. package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +67 -0
  218. package/Tests/AnimationKeypathTests.swift +103 -0
  219. package/Tests/AutomaticEngineTests.swift +57 -0
  220. package/Tests/BundleTests.swift +25 -0
  221. package/Tests/DataURLTests.swift +64 -0
  222. package/Tests/ParsingTests.swift +43 -0
  223. package/Tests/PerformanceTests.swift +214 -0
  224. package/Tests/Samples/9squares_AlBoardman.json +1 -0
  225. package/Tests/Samples/Boat_Loader.json +1 -0
  226. package/Tests/Samples/HamburgerArrow.json +1 -0
  227. package/Tests/Samples/IconTransitions.json +1 -0
  228. package/Tests/Samples/Images/dog.png +0 -0
  229. package/Tests/Samples/Issues/issue_1125.json +1 -0
  230. package/Tests/Samples/Issues/issue_1260.json +1 -0
  231. package/Tests/Samples/Issues/issue_1403.json +1 -0
  232. package/Tests/Samples/Issues/issue_1407.json +1 -0
  233. package/Tests/Samples/Issues/issue_1460.json +1 -0
  234. package/Tests/Samples/Issues/issue_1488.json +1 -0
  235. package/Tests/Samples/Issues/issue_1505.json +1 -0
  236. package/Tests/Samples/Issues/issue_1541.json +1 -0
  237. package/Tests/Samples/Issues/issue_1557.json +1 -0
  238. package/Tests/Samples/Issues/issue_1603.json +1 -0
  239. package/Tests/Samples/Issues/issue_1628.json +1 -0
  240. package/Tests/Samples/Issues/issue_1636.json +1 -0
  241. package/Tests/Samples/Issues/issue_1643.json +1 -0
  242. package/Tests/Samples/Issues/issue_1655.json +1 -0
  243. package/Tests/Samples/Issues/issue_1664.json +1 -0
  244. package/Tests/Samples/Issues/issue_1683.json +1 -0
  245. package/Tests/Samples/Issues/issue_1687.json +1 -0
  246. package/Tests/Samples/Issues/issue_1711.json +1 -0
  247. package/Tests/Samples/Issues/issue_1717.json +1 -0
  248. package/Tests/Samples/Issues/issue_769.json +1 -0
  249. package/Tests/Samples/Issues/issue_885.json +1 -0
  250. package/Tests/Samples/Issues/issue_965.json +1 -0
  251. package/Tests/Samples/Issues/pr_1536.json +1 -0
  252. package/Tests/Samples/Issues/pr_1563.json +8439 -0
  253. package/Tests/Samples/Issues/pr_1592.json +5527 -0
  254. package/Tests/Samples/Issues/pr_1599.json +738 -0
  255. package/Tests/Samples/Issues/pr_1604_1.json +1 -0
  256. package/Tests/Samples/Issues/pr_1604_2.json +1 -0
  257. package/Tests/Samples/Issues/pr_1632_1.json +1 -0
  258. package/Tests/Samples/Issues/pr_1632_2.json +1 -0
  259. package/Tests/Samples/Issues/pr_1686.json +513 -0
  260. package/Tests/Samples/Issues/pr_1698.json +1 -0
  261. package/Tests/Samples/Issues/pr_1699.json +1 -0
  262. package/Tests/Samples/LottieFiles/LICENSE.md +14 -0
  263. package/Tests/Samples/LottieFiles/bounce_strokes.json +1 -0
  264. package/Tests/Samples/LottieFiles/cactus.json +1 -0
  265. package/Tests/Samples/LottieFiles/dog_car_ride.json +1 -0
  266. package/Tests/Samples/LottieFiles/draft_icon.json +1 -0
  267. package/Tests/Samples/LottieFiles/fireworks.json +1 -0
  268. package/Tests/Samples/LottieFiles/gradient_1.json +1 -0
  269. package/Tests/Samples/LottieFiles/gradient_2.json +1 -0
  270. package/Tests/Samples/LottieFiles/gradient_pill.json +1 -0
  271. package/Tests/Samples/LottieFiles/gradient_shapes.json +1 -0
  272. package/Tests/Samples/LottieFiles/gradient_square.json +1 -0
  273. package/Tests/Samples/LottieFiles/growth.json +1 -0
  274. package/Tests/Samples/LottieFiles/infinity_loader.json +1 -0
  275. package/Tests/Samples/LottieFiles/loading_dots_1.json +1 -0
  276. package/Tests/Samples/LottieFiles/loading_dots_2.json +1 -0
  277. package/Tests/Samples/LottieFiles/loading_dots_3.json +1 -0
  278. package/Tests/Samples/LottieFiles/loading_gradient_strokes.json +1 -0
  279. package/Tests/Samples/LottieFiles/settings_slider.json +1 -0
  280. package/Tests/Samples/LottieFiles/shop.json +1 -0
  281. package/Tests/Samples/LottieFiles/step_loader.json +1 -0
  282. package/Tests/Samples/LottieLogo1.json +1 -0
  283. package/Tests/Samples/LottieLogo1_masked.json +1 -0
  284. package/Tests/Samples/LottieLogo2.json +1 -0
  285. package/Tests/Samples/MotionCorpse_Jrcanest.json +1 -0
  286. package/Tests/Samples/Nonanimating/BasicLayers.json +1 -0
  287. package/Tests/Samples/Nonanimating/DisableNodesTest.json +1 -0
  288. package/Tests/Samples/Nonanimating/FirstText.json +1 -0
  289. package/Tests/Samples/Nonanimating/GeometryTransformTest.json +1 -0
  290. package/Tests/Samples/Nonanimating/Text_AnimatedProperties.json +1 -0
  291. package/Tests/Samples/Nonanimating/Text_Glyph.json +1 -0
  292. package/Tests/Samples/Nonanimating/Text_NoAnimation.json +1 -0
  293. package/Tests/Samples/Nonanimating/Text_NoGlyph.json +1 -0
  294. package/Tests/Samples/Nonanimating/Zoom.json +1 -0
  295. package/Tests/Samples/Nonanimating/_dog.json +1 -0
  296. package/Tests/Samples/Nonanimating/base64Test.json +1 -0
  297. package/Tests/Samples/Nonanimating/blend_mode_test.json +1 -0
  298. package/Tests/Samples/Nonanimating/keypathTest.json +1 -0
  299. package/Tests/Samples/Nonanimating/verifyLineHeight.json +1 -0
  300. package/Tests/Samples/PinJump.json +1 -0
  301. package/Tests/Samples/Switch.json +1 -0
  302. package/Tests/Samples/Switch_States.json +1 -0
  303. package/Tests/Samples/TwitterHeart.json +1 -0
  304. package/Tests/Samples/TwitterHeartButton.json +1 -0
  305. package/Tests/Samples/TypeFace/A.json +1 -0
  306. package/Tests/Samples/TypeFace/Apostrophe.json +1 -0
  307. package/Tests/Samples/TypeFace/B.json +1 -0
  308. package/Tests/Samples/TypeFace/BlinkingCursor.json +1 -0
  309. package/Tests/Samples/TypeFace/C.json +1 -0
  310. package/Tests/Samples/TypeFace/Colon.json +1 -0
  311. package/Tests/Samples/TypeFace/Comma.json +1 -0
  312. package/Tests/Samples/TypeFace/D.json +1 -0
  313. package/Tests/Samples/TypeFace/E.json +1 -0
  314. package/Tests/Samples/TypeFace/F.json +1 -0
  315. package/Tests/Samples/TypeFace/G.json +1 -0
  316. package/Tests/Samples/TypeFace/H.json +1 -0
  317. package/Tests/Samples/TypeFace/I.json +1 -0
  318. package/Tests/Samples/TypeFace/J.json +1 -0
  319. package/Tests/Samples/TypeFace/K.json +1 -0
  320. package/Tests/Samples/TypeFace/L.json +1 -0
  321. package/Tests/Samples/TypeFace/M.json +1 -0
  322. package/Tests/Samples/TypeFace/N.json +1 -0
  323. package/Tests/Samples/TypeFace/O.json +1 -0
  324. package/Tests/Samples/TypeFace/P.json +1 -0
  325. package/Tests/Samples/TypeFace/Q.json +1 -0
  326. package/Tests/Samples/TypeFace/R.json +1 -0
  327. package/Tests/Samples/TypeFace/S.json +1 -0
  328. package/Tests/Samples/TypeFace/T.json +1 -0
  329. package/Tests/Samples/TypeFace/U.json +1 -0
  330. package/Tests/Samples/TypeFace/V.json +1 -0
  331. package/Tests/Samples/TypeFace/W.json +1 -0
  332. package/Tests/Samples/TypeFace/X.json +1 -0
  333. package/Tests/Samples/TypeFace/Y.json +1 -0
  334. package/Tests/Samples/TypeFace/Z.json +1 -0
  335. package/Tests/Samples/Watermelon.json +1 -0
  336. package/Tests/Samples/setValueTest.json +1 -0
  337. package/Tests/Samples/timeremap.json +1 -0
  338. package/Tests/Samples/vcTransition1.json +1 -0
  339. package/Tests/Samples/vcTransition2.json +1 -0
  340. package/Tests/SnapshotConfiguration.swift +158 -0
  341. package/Tests/SnapshotTests.swift +265 -0
  342. package/Tests/Utils/Bundle+Module.swift +30 -0
  343. package/Tests/Utils/HardcodedFontProvider.swift +19 -0
  344. package/Tests/Utils/HardcodedImageProvider.swift +23 -0
  345. package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
  346. package/Tests/ValueProvidersTests.swift +27 -0
  347. package/lottie-ios.podspec +12 -12
  348. package/package.json +1 -1
  349. package/script/test-carthage/Cartfile +1 -0
  350. package/script/test-carthage/Cartfile.resolved +1 -0
  351. package/script/test-carthage/CarthageTest/AppDelegate.swift +26 -0
  352. package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  353. package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  354. package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
  355. package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
  356. package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
  357. package/script/test-carthage/CarthageTest/Info.plist +66 -0
  358. package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
  359. package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
  360. package/script/test-carthage/CarthageTest-macOS/AppDelegate.swift +7 -0
  361. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  362. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
  363. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/Contents.json +6 -0
  364. package/script/test-carthage/CarthageTest-macOS/Base.lproj/Main.storyboard +717 -0
  365. package/script/test-carthage/CarthageTest-macOS/CarthageTest_macOS.entitlements +10 -0
  366. package/script/test-carthage/CarthageTest-macOS/ViewController.swift +15 -0
  367. package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +532 -0
  368. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  369. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  370. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  371. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  372. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  373. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  374. package/script/test-carthage/Mintfile +1 -0
  375. package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
  376. package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  377. package/script/test-spm/Mintfile +1 -0
  378. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  379. package/Lottie/Info.plist +0 -22
  380. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  381. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
  382. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
  383. package/lottie-swift/Assets/.gitkeep +0 -0
  384. package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
  385. package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
  386. package/lottie-swift/src/Private/Model/Animation.swift +0 -107
  387. package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
  388. package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
  389. package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
  390. package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
  391. package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
  392. package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
  393. package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
  394. package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
  395. package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
  396. package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
  397. package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
  398. package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
  399. package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
  400. package/lottie-swift/src/Private/Model/ShapeItems/Group.swift +0 -32
  401. package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
  402. package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
  403. package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
  404. package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
  405. package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
  406. package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
  407. package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
  408. package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
  409. package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
  410. package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
  411. package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
  412. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
  413. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
  414. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
  415. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +0 -127
  416. package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
  417. package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
  418. package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
  419. package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
  420. package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
  421. package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
  422. package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
  423. package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
  424. package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1006
  425. package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
  426. package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
  427. package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
  428. package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
  429. package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
  430. package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
  431. package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
  432. package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
  433. package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
  434. 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
- }
@@ -1,127 +0,0 @@
1
- //
2
- // StrokeNode.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/22/19.
6
- //
7
-
8
- import Foundation
9
- import QuartzCore
10
- // MARK: - Properties
11
-
12
- final class StrokeNodeProperties: NodePropertyMap, KeypathSearchable {
13
-
14
- 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
-
23
- 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))
34
- if dashPhase.count == 0 {
35
- self.dashPhase = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
36
- } else {
37
- self.dashPhase = NodeProperty(provider: KeyframeInterpolator(keyframes: dashPhase))
38
- }
39
- } else {
40
- self.dashPattern = NodeProperty(provider: SingleValueProvider([Vector1D]()))
41
- self.dashPhase = NodeProperty(provider: SingleValueProvider(Vector1D(0)))
42
- }
43
- self.keypathProperties = [
44
- "Opacity" : opacity,
45
- "Color" : color,
46
- "Stroke Width" : width,
47
- "Dashes" : dashPattern,
48
- "Dash Phase" : dashPhase
49
- ]
50
- self.properties = Array(keypathProperties.values)
51
- }
52
-
53
- let keypathName: String
54
- let keypathProperties: [String : AnyNodeProperty]
55
- let properties: [AnyNodeProperty]
56
-
57
- let opacity: NodeProperty<Vector1D>
58
- let color: NodeProperty<Color>
59
- let width: NodeProperty<Vector1D>
60
-
61
- let dashPattern: NodeProperty<[Vector1D]>
62
- let dashPhase: NodeProperty<Vector1D>
63
-
64
- let lineCap: LineCap
65
- let lineJoin: LineJoin
66
- let miterLimit: CGFloat
67
-
68
- }
69
-
70
- // MARK: - Node
71
-
72
- /// Node that manages stroking a path
73
- 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
-
82
- init(parentNode: AnimatorNode?, stroke: Stroke) {
83
- self.strokeRender = StrokeRenderer(parent: parentNode?.outputNode)
84
- self.strokeProperties = StrokeNodeProperties(stroke: stroke)
85
- self.parentNode = parentNode
86
- }
87
-
88
- // MARK: Animator Node Protocol
89
-
90
- var propertyMap: NodePropertyMap & KeypathSearchable {
91
- return strokeProperties
92
- }
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 {
99
- didSet {
100
- strokeRender.isEnabled = isEnabled
101
- }
102
- }
103
-
104
- func localUpdatesPermeateDownstream() -> Bool {
105
- return false
106
- }
107
-
108
- func rebuildOutputs(frame: CGFloat) {
109
- strokeRender.color = strokeProperties.color.value.cgColorValue
110
- strokeRender.opacity = strokeProperties.opacity.value.cgFloatValue * 0.01
111
- strokeRender.width = strokeProperties.width.value.cgFloatValue
112
- strokeRender.miterLimit = strokeProperties.miterLimit
113
- strokeRender.lineCap = strokeProperties.lineCap
114
- strokeRender.lineJoin = strokeProperties.lineJoin
115
-
116
- /// Get dash lengths
117
- let dashLengths = strokeProperties.dashPattern.value.map { $0.cgFloatValue }
118
- if dashLengths.count > 0 {
119
- strokeRender.dashPhase = strokeProperties.dashPhase.value.cgFloatValue
120
- strokeRender.dashLengths = dashLengths
121
- } else {
122
- strokeRender.dashLengths = nil
123
- strokeRender.dashPhase = nil
124
- }
125
- }
126
-
127
- }