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
@@ -0,0 +1,123 @@
1
+ //
2
+ // GradientValueProvider.swift
3
+ // lottie-swift
4
+ //
5
+ // Created by Enrique Bermúdez on 10/27/19.
6
+ //
7
+
8
+ import CoreGraphics
9
+ import Foundation
10
+
11
+ /// A `ValueProvider` that returns a Gradient Color Value.
12
+ public final class GradientValueProvider: ValueProvider {
13
+
14
+ // MARK: Lifecycle
15
+
16
+ /// Initializes with a block provider.
17
+ public init(
18
+ block: @escaping ColorsValueBlock,
19
+ locations: ColorLocationsBlock? = nil)
20
+ {
21
+ self.block = block
22
+ locationsBlock = locations
23
+ colors = []
24
+ self.locations = []
25
+ }
26
+
27
+ /// Initializes with an array of colors.
28
+ public init(
29
+ _ colors: [Color],
30
+ locations: [Double] = [])
31
+ {
32
+ self.colors = colors
33
+ self.locations = locations
34
+ updateValueArray()
35
+ hasUpdate = true
36
+ }
37
+
38
+ // MARK: Public
39
+
40
+ /// Returns a [Color] for a CGFloat(Frame Time).
41
+ public typealias ColorsValueBlock = (CGFloat) -> [Color]
42
+ /// Returns a [Double](Color locations) for a CGFloat(Frame Time).
43
+ public typealias ColorLocationsBlock = (CGFloat) -> [Double]
44
+
45
+ /// The colors values of the provider.
46
+ public var colors: [Color] {
47
+ didSet {
48
+ updateValueArray()
49
+ hasUpdate = true
50
+ }
51
+ }
52
+
53
+ /// The color location values of the provider.
54
+ public var locations: [Double] {
55
+ didSet {
56
+ updateValueArray()
57
+ hasUpdate = true
58
+ }
59
+ }
60
+
61
+ // MARK: ValueProvider Protocol
62
+
63
+ public var valueType: Any.Type {
64
+ [Double].self
65
+ }
66
+
67
+ public var storage: ValueProviderStorage<[Double]> {
68
+ .closure { [self] frame in
69
+ hasUpdate = false
70
+
71
+ if let block = block {
72
+ let newColors = block(frame)
73
+ let newLocations = locationsBlock?(frame) ?? []
74
+ value = value(from: newColors, locations: newLocations)
75
+ }
76
+
77
+ return value
78
+ }
79
+ }
80
+
81
+ public func hasUpdate(frame _: CGFloat) -> Bool {
82
+ if block != nil || locationsBlock != nil {
83
+ return true
84
+ }
85
+ return hasUpdate
86
+ }
87
+
88
+ // MARK: Private
89
+
90
+ private var hasUpdate = true
91
+
92
+ private var block: ColorsValueBlock?
93
+ private var locationsBlock: ColorLocationsBlock?
94
+ private var value: [Double] = []
95
+
96
+ private func value(from colors: [Color], locations: [Double]) -> [Double] {
97
+ var colorValues = [Double]()
98
+ var alphaValues = [Double]()
99
+ var shouldAddAlphaValues = false
100
+
101
+ for i in 0..<colors.count {
102
+ if colors[i].a < 1 { shouldAddAlphaValues = true }
103
+
104
+ let location = locations.count > i
105
+ ? locations[i]
106
+ : (Double(i) / Double(colors.count - 1))
107
+
108
+ colorValues.append(location)
109
+ colorValues.append(colors[i].r)
110
+ colorValues.append(colors[i].g)
111
+ colorValues.append(colors[i].b)
112
+
113
+ alphaValues.append(location)
114
+ alphaValues.append(colors[i].a)
115
+ }
116
+
117
+ return colorValues + (shouldAddAlphaValues ? alphaValues : [])
118
+ }
119
+
120
+ private func updateValueArray() {
121
+ value = value(from: colors, locations: locations)
122
+ }
123
+ }
@@ -5,60 +5,65 @@
5
5
  // Created by Brandon Withrow on 2/4/19.
6
6
  //
7
7
 
8
- import Foundation
9
8
  import CoreGraphics
9
+ import Foundation
10
10
  /// A `ValueProvider` that returns a CGPoint Value
11
- public final class PointValueProvider: AnyValueProvider {
12
-
13
- /// Returns a CGPoint for a CGFloat(Frame Time)
14
- public typealias PointValueBlock = (CGFloat) -> CGPoint
15
-
16
- public var point: CGPoint {
17
- didSet {
18
- hasUpdate = true
19
- }
20
- }
21
-
11
+ public final class PointValueProvider: ValueProvider {
12
+
13
+ // MARK: Lifecycle
14
+
22
15
  /// Initializes with a block provider
23
16
  public init(block: @escaping PointValueBlock) {
24
17
  self.block = block
25
- self.point = .zero
18
+ point = .zero
26
19
  }
27
-
20
+
28
21
  /// Initializes with a single point.
29
22
  public init(_ point: CGPoint) {
30
23
  self.point = point
31
- self.block = nil
24
+ block = nil
32
25
  hasUpdate = true
33
26
  }
34
-
27
+
28
+ // MARK: Public
29
+
30
+ /// Returns a CGPoint for a CGFloat(Frame Time)
31
+ public typealias PointValueBlock = (CGFloat) -> CGPoint
32
+
33
+ public var point: CGPoint {
34
+ didSet {
35
+ hasUpdate = true
36
+ }
37
+ }
38
+
35
39
  // MARK: ValueProvider Protocol
36
-
40
+
37
41
  public var valueType: Any.Type {
38
- return Vector3D.self
42
+ Vector3D.self
43
+ }
44
+
45
+ public var storage: ValueProviderStorage<Vector3D> {
46
+ if let block = block {
47
+ return .closure { frame in
48
+ self.hasUpdate = false
49
+ return block(frame).vector3dValue
50
+ }
51
+ } else {
52
+ hasUpdate = false
53
+ return .singleValue(point.vector3dValue)
54
+ }
39
55
  }
40
-
41
- public func hasUpdate(frame: CGFloat) -> Bool {
56
+
57
+ public func hasUpdate(frame _: CGFloat) -> Bool {
42
58
  if block != nil {
43
59
  return true
44
60
  }
45
61
  return hasUpdate
46
62
  }
47
-
48
- public func value(frame: CGFloat) -> Any {
49
- hasUpdate = false
50
- let newPoint: CGPoint
51
- if let block = block {
52
- newPoint = block(frame)
53
- } else {
54
- newPoint = point
55
- }
56
- return newPoint.vector3dValue
57
- }
58
-
63
+
59
64
  // MARK: Private
60
-
61
- private var hasUpdate: Bool = true
62
-
65
+
66
+ private var hasUpdate = true
67
+
63
68
  private var block: PointValueBlock?
64
69
  }
@@ -5,61 +5,66 @@
5
5
  // Created by Brandon Withrow on 2/4/19.
6
6
  //
7
7
 
8
- import Foundation
9
8
  import CoreGraphics
9
+ import Foundation
10
10
 
11
11
  /// A `ValueProvider` that returns a CGSize Value
12
- public final class SizeValueProvider: AnyValueProvider {
13
-
14
- /// Returns a CGSize for a CGFloat(Frame Time)
15
- public typealias SizeValueBlock = (CGFloat) -> CGSize
16
-
17
- public var size: CGSize {
18
- didSet {
19
- hasUpdate = true
20
- }
21
- }
22
-
12
+ public final class SizeValueProvider: ValueProvider {
13
+
14
+ // MARK: Lifecycle
15
+
23
16
  /// Initializes with a block provider
24
17
  public init(block: @escaping SizeValueBlock) {
25
18
  self.block = block
26
- self.size = .zero
19
+ size = .zero
27
20
  }
28
-
21
+
29
22
  /// Initializes with a single size.
30
23
  public init(_ size: CGSize) {
31
24
  self.size = size
32
- self.block = nil
25
+ block = nil
33
26
  hasUpdate = true
34
27
  }
35
-
28
+
29
+ // MARK: Public
30
+
31
+ /// Returns a CGSize for a CGFloat(Frame Time)
32
+ public typealias SizeValueBlock = (CGFloat) -> CGSize
33
+
34
+ public var size: CGSize {
35
+ didSet {
36
+ hasUpdate = true
37
+ }
38
+ }
39
+
36
40
  // MARK: ValueProvider Protocol
37
-
41
+
38
42
  public var valueType: Any.Type {
39
- return Vector3D.self
43
+ Vector3D.self
44
+ }
45
+
46
+ public var storage: ValueProviderStorage<Vector3D> {
47
+ if let block = block {
48
+ return .closure { frame in
49
+ self.hasUpdate = false
50
+ return block(frame).vector3dValue
51
+ }
52
+ } else {
53
+ hasUpdate = false
54
+ return .singleValue(size.vector3dValue)
55
+ }
40
56
  }
41
-
42
- public func hasUpdate(frame: CGFloat) -> Bool {
57
+
58
+ public func hasUpdate(frame _: CGFloat) -> Bool {
43
59
  if block != nil {
44
60
  return true
45
61
  }
46
62
  return hasUpdate
47
63
  }
48
-
49
- public func value(frame: CGFloat) -> Any {
50
- hasUpdate = false
51
- let newSize: CGSize
52
- if let block = block {
53
- newSize = block(frame)
54
- } else {
55
- newSize = size
56
- }
57
- return newSize.vector3dValue
58
- }
59
-
64
+
60
65
  // MARK: Private
61
-
62
- private var hasUpdate: Bool = true
63
-
66
+
67
+ private var hasUpdate = true
68
+
64
69
  private var block: SizeValueBlock?
65
70
  }
@@ -6,23 +6,30 @@
6
6
  // Copyright © 2020 YurtvilleProds. All rights reserved.
7
7
  //
8
8
 
9
- import Foundation
10
9
  import CoreGraphics
11
10
  import CoreText
11
+ import Foundation
12
12
 
13
- /**
14
- Font provider is a protocol that is used to supply fonts to `AnimationView`.
15
-
16
- */
13
+ // MARK: - AnimationFontProvider
14
+
15
+ /// Font provider is a protocol that is used to supply fonts to `AnimationView`.
16
+ ///
17
17
  public protocol AnimationFontProvider {
18
18
  func fontFor(family: String, size: CGFloat) -> CTFont?
19
19
  }
20
20
 
21
+ // MARK: - DefaultFontProvider
22
+
21
23
  /// Default Font provider.
22
24
  public final class DefaultFontProvider: AnimationFontProvider {
25
+
26
+ // MARK: Lifecycle
27
+
28
+ public init() { }
29
+
30
+ // MARK: Public
31
+
23
32
  public func fontFor(family: String, size: CGFloat) -> CTFont? {
24
- return CTFontCreateWithName(family as CFString, size, nil)
33
+ CTFontCreateWithName(family as CFString, size, nil)
25
34
  }
26
-
27
- public init() {}
28
35
  }
@@ -0,0 +1,21 @@
1
+ //
2
+ // LottieImageProvider.swift
3
+ // lottie-swift
4
+ //
5
+ // Created by Brandon Withrow on 1/25/19.
6
+ //
7
+
8
+ import CoreGraphics
9
+ import Foundation
10
+
11
+ /// Image provider is a protocol that is used to supply images to `AnimationView`.
12
+ ///
13
+ /// Some animations require a reference to an image. The image provider loads and
14
+ /// provides those images to the `AnimationView`. Lottie includes a couple of
15
+ /// prebuilt Image Providers that supply images from a Bundle, or from a FilePath.
16
+ ///
17
+ /// Additionally custom Image Providers can be made to load images from a URL,
18
+ /// or to Cache images.
19
+ public protocol AnimationImageProvider {
20
+ func imageForAsset(asset: ImageAsset) -> CGImage?
21
+ }
@@ -0,0 +1,253 @@
1
+ // Created by Cal Stephens on 1/24/22.
2
+ // Copyright © 2022 Airbnb Inc. All rights reserved.
3
+
4
+ import CoreGraphics
5
+
6
+ // MARK: - Interpolatable
7
+
8
+ /// A type that can be interpolated between two values
9
+ public protocol Interpolatable: AnyInterpolatable {
10
+ /// Interpolates the `self` to the given number by `amount`.
11
+ /// - Parameter to: The number to interpolate to.
12
+ /// - Parameter amount: The amount to interpolate,
13
+ /// relative to 0.0 (self) and 1.0 (to).
14
+ /// `amount` can be greater than one and less than zero,
15
+ /// and interpolation should not be clamped.
16
+ ///
17
+ /// ```
18
+ /// let number = 5
19
+ /// let interpolated = number.interpolateTo(10, amount: 0.5)
20
+ /// print(interpolated) // 7.5
21
+ /// ```
22
+ ///
23
+ /// ```
24
+ /// let number = 5
25
+ /// let interpolated = number.interpolateTo(10, amount: 1.5)
26
+ /// print(interpolated) // 12.5
27
+ /// ```
28
+ func interpolate(to: Self, amount: CGFloat) -> Self
29
+ }
30
+
31
+ // MARK: - SpatialInterpolatable
32
+
33
+ /// A type that can be interpolated between two values,
34
+ /// additionally using optional `spatialOutTangent` and `spatialInTangent` values.
35
+ /// - If your implementation doesn't use the `spatialOutTangent` and `spatialInTangent`
36
+ /// parameters, prefer implementing the simpler `Interpolatable` protocol.
37
+ public protocol SpatialInterpolatable: AnyInterpolatable {
38
+ /// Interpolates the `self` to the given number by `amount`.
39
+ /// - Parameter to: The number to interpolate to.
40
+ /// - Parameter amount: The amount to interpolate,
41
+ /// relative to 0.0 (self) and 1.0 (to).
42
+ /// `amount` can be greater than one and less than zero,
43
+ /// and interpolation should not be clamped.
44
+ func interpolate(
45
+ to: Self,
46
+ amount: CGFloat,
47
+ spatialOutTangent: CGPoint?,
48
+ spatialInTangent: CGPoint?)
49
+ -> Self
50
+ }
51
+
52
+ // MARK: - AnyInterpolatable
53
+
54
+ /// The base protocol that is implemented by both `Interpolatable` and `SpatialInterpolatable`
55
+ /// Types should not directly implement this protocol.
56
+ public protocol AnyInterpolatable {
57
+ /// Interpolates by calling either `Interpolatable.interpolate`
58
+ /// or `SpatialInterpolatable.interpolate`.
59
+ /// Should not be implemented or called by consumers.
60
+ func _interpolate(
61
+ to: Self,
62
+ amount: CGFloat,
63
+ spatialOutTangent: CGPoint?,
64
+ spatialInTangent: CGPoint?)
65
+ -> Self
66
+ }
67
+
68
+ extension Interpolatable {
69
+ public func _interpolate(
70
+ to: Self,
71
+ amount: CGFloat,
72
+ spatialOutTangent _: CGPoint?,
73
+ spatialInTangent _: CGPoint?)
74
+ -> Self
75
+ {
76
+ interpolate(to: to, amount: amount)
77
+ }
78
+ }
79
+
80
+ extension SpatialInterpolatable {
81
+ /// Helper that interpolates this `SpatialInterpolatable`
82
+ /// with `nil` spatial in/out tangents
83
+ public func interpolate(to: Self, amount: CGFloat) -> Self {
84
+ interpolate(
85
+ to: to,
86
+ amount: amount,
87
+ spatialOutTangent: nil,
88
+ spatialInTangent: nil)
89
+ }
90
+
91
+ public func _interpolate(
92
+ to: Self,
93
+ amount: CGFloat,
94
+ spatialOutTangent: CGPoint?,
95
+ spatialInTangent: CGPoint?)
96
+ -> Self
97
+ {
98
+ interpolate(
99
+ to: to,
100
+ amount: amount,
101
+ spatialOutTangent: spatialOutTangent,
102
+ spatialInTangent: spatialInTangent)
103
+ }
104
+ }
105
+
106
+ // MARK: - Double + Interpolatable
107
+
108
+ extension Double: Interpolatable { }
109
+
110
+ // MARK: - CGFloat + Interpolatable
111
+
112
+ extension CGFloat: Interpolatable { }
113
+
114
+ // MARK: - Float + Interpolatable
115
+
116
+ extension Float: Interpolatable { }
117
+
118
+ extension Interpolatable where Self: BinaryFloatingPoint {
119
+ public func interpolate(to: Self, amount: CGFloat) -> Self {
120
+ self + ((to - self) * Self(amount))
121
+ }
122
+ }
123
+
124
+ // MARK: - CGRect + Interpolatable
125
+
126
+ extension CGRect: Interpolatable {
127
+ public func interpolate(to: CGRect, amount: CGFloat) -> CGRect {
128
+ CGRect(
129
+ x: origin.x.interpolate(to: to.origin.x, amount: amount),
130
+ y: origin.y.interpolate(to: to.origin.y, amount: amount),
131
+ width: width.interpolate(to: to.width, amount: amount),
132
+ height: height.interpolate(to: to.height, amount: amount))
133
+ }
134
+ }
135
+
136
+ // MARK: - CGSize + Interpolatable
137
+
138
+ extension CGSize: Interpolatable {
139
+ public func interpolate(to: CGSize, amount: CGFloat) -> CGSize {
140
+ CGSize(
141
+ width: width.interpolate(to: to.width, amount: amount),
142
+ height: height.interpolate(to: to.height, amount: amount))
143
+ }
144
+ }
145
+
146
+ // MARK: - CGPoint + SpatialInterpolatable
147
+
148
+ extension CGPoint: SpatialInterpolatable {
149
+ public func interpolate(
150
+ to: CGPoint,
151
+ amount: CGFloat,
152
+ spatialOutTangent: CGPoint?,
153
+ spatialInTangent: CGPoint?)
154
+ -> CGPoint
155
+ {
156
+ guard
157
+ let outTan = spatialOutTangent,
158
+ let inTan = spatialInTangent
159
+ else {
160
+ return CGPoint(
161
+ x: x.interpolate(to: to.x, amount: amount),
162
+ y: y.interpolate(to: to.y, amount: amount))
163
+ }
164
+
165
+ let cp1 = self + outTan
166
+ let cp2 = to + inTan
167
+ return interpolate(to, outTangent: cp1, inTangent: cp2, amount: amount)
168
+ }
169
+ }
170
+
171
+ // MARK: - Color + Interpolatable
172
+
173
+ extension Color: Interpolatable {
174
+ public func interpolate(to: Color, amount: CGFloat) -> Color {
175
+ Color(
176
+ r: r.interpolate(to: to.r, amount: amount),
177
+ g: g.interpolate(to: to.g, amount: amount),
178
+ b: b.interpolate(to: to.b, amount: amount),
179
+ a: a.interpolate(to: to.a, amount: amount))
180
+ }
181
+ }
182
+
183
+ // MARK: - Vector1D + Interpolatable
184
+
185
+ extension Vector1D: Interpolatable {
186
+ public func interpolate(to: Vector1D, amount: CGFloat) -> Vector1D {
187
+ value.interpolate(to: to.value, amount: amount).vectorValue
188
+ }
189
+ }
190
+
191
+ // MARK: - Vector2D + SpatialInterpolatable
192
+
193
+ extension Vector2D: SpatialInterpolatable {
194
+ public func interpolate(
195
+ to: Vector2D,
196
+ amount: CGFloat,
197
+ spatialOutTangent: CGPoint?,
198
+ spatialInTangent: CGPoint?)
199
+ -> Vector2D
200
+ {
201
+ pointValue.interpolate(
202
+ to: to.pointValue,
203
+ amount: amount,
204
+ spatialOutTangent: spatialOutTangent,
205
+ spatialInTangent: spatialInTangent)
206
+ .vector2dValue
207
+ }
208
+ }
209
+
210
+ // MARK: - Vector3D + SpatialInterpolatable
211
+
212
+ extension Vector3D: SpatialInterpolatable {
213
+ public func interpolate(
214
+ to: Vector3D,
215
+ amount: CGFloat,
216
+ spatialOutTangent: CGPoint?,
217
+ spatialInTangent: CGPoint?)
218
+ -> Vector3D
219
+ {
220
+ if spatialInTangent != nil || spatialOutTangent != nil {
221
+ // TODO Support third dimension spatial interpolation
222
+ let point = pointValue.interpolate(
223
+ to: to.pointValue,
224
+ amount: amount,
225
+ spatialOutTangent: spatialOutTangent,
226
+ spatialInTangent: spatialInTangent)
227
+
228
+ return Vector3D(
229
+ x: point.x,
230
+ y: point.y,
231
+ z: CGFloat(z.interpolate(to: to.z, amount: amount)))
232
+ }
233
+
234
+ return Vector3D(
235
+ x: x.interpolate(to: to.x, amount: amount),
236
+ y: y.interpolate(to: to.y, amount: amount),
237
+ z: z.interpolate(to: to.z, amount: amount))
238
+ }
239
+ }
240
+
241
+ // MARK: - Array + Interpolatable, AnyInterpolatable
242
+
243
+ extension Array: Interpolatable, AnyInterpolatable where Element: Interpolatable {
244
+ public func interpolate(to: [Element], amount: CGFloat) -> [Element] {
245
+ LottieLogger.shared.assert(
246
+ count == to.count,
247
+ "When interpolating Arrays, both array sound have the same element count.")
248
+
249
+ return zip(self, to).map { lhs, rhs in
250
+ lhs.interpolate(to: rhs, amount: amount)
251
+ }
252
+ }
253
+ }