lottie-ios 3.2.2 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/actions/setup/action.yml +32 -0
- package/.github/issue_template.md +6 -23
- package/.github/workflows/main.yml +98 -0
- package/.spi.yml +6 -0
- package/.swift-version +1 -0
- package/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +7 -0
- package/.swiftpm/xcode/package.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/.swiftpm/xcode/xcuserdata/{brandonwithrow.xcuserdatad → cal.xcuserdatad}/xcschemes/xcschememanagement.plist +25 -15
- package/.swiftpm/xcode/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/Gemfile +4 -0
- package/Gemfile.lock +102 -0
- package/Lottie.xcodeproj/project.pbxproj +2003 -1972
- package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
- package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_iOS.xcscheme → Lottie (iOS).xcscheme } +15 -18
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.xcscheme → Lottie (macOS).xcscheme } +7 -20
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.xcscheme → Lottie (tvOS).xcscheme } +5 -18
- package/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
- package/Lottie.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +24 -0
- package/Lottie.xcworkspace/contents.xcworkspacedata +10 -0
- package/Lottie.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/Lottie.xcworkspace/xcshareddata/swiftpm/Package.resolved +115 -0
- package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/{Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad → Lottie.xcworkspace/xcuserdata/cal.xcuserdatad}/xcdebugger/Breakpoints_v2.xcbkptlist +2 -2
- package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/xcdebugger/Expressions.xcexplist +153 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +39 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +25 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
- package/Package.resolved +88 -0
- package/Package.swift +10 -15
- package/README.md +40 -60
- package/Rakefile +121 -0
- package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
- package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +448 -0
- package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +53 -0
- package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
- package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +28 -0
- package/Sources/Private/CoreAnimation/Animations/GradientAnimations.swift +210 -0
- package/Sources/Private/CoreAnimation/Animations/LayerProperty.swift +229 -0
- package/Sources/Private/CoreAnimation/Animations/OpacityAnimation.swift +52 -0
- package/Sources/Private/CoreAnimation/Animations/RectangleAnimation.swift +31 -0
- package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +246 -0
- package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +95 -0
- package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +70 -0
- package/Sources/Private/CoreAnimation/Animations/TransformAnimations.swift +205 -0
- package/Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift +37 -0
- package/Sources/Private/CoreAnimation/CompatibilityTracker.swift +130 -0
- package/Sources/Private/CoreAnimation/CoreAnimationLayer.swift +492 -0
- package/Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift +35 -0
- package/Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift +37 -0
- package/Sources/Private/CoreAnimation/Extensions/Keyframes+combinedIfPossible.swift +73 -0
- package/Sources/Private/CoreAnimation/Layers/AnimationLayer.swift +83 -0
- package/Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +33 -0
- package/Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +87 -0
- package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +131 -0
- package/Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift +94 -0
- package/Sources/Private/CoreAnimation/Layers/ImageLayer.swift +79 -0
- package/Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +60 -0
- package/Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +138 -0
- package/Sources/Private/CoreAnimation/Layers/PreCompLayer.swift +140 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +302 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +319 -0
- package/Sources/Private/CoreAnimation/Layers/SolidLayer.swift +47 -0
- package/Sources/Private/CoreAnimation/Layers/TextLayer.swift +91 -0
- package/Sources/Private/CoreAnimation/Layers/TransformLayer.swift +11 -0
- package/Sources/Private/CoreAnimation/ValueProviderStore.swift +139 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/CompositionLayer.swift +93 -85
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ImageCompositionLayer.swift +24 -21
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/MaskContainerLayer.swift +75 -54
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/NullCompositionLayer.swift +5 -5
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/PreCompositionLayer.swift +61 -44
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ShapeCompositionLayer.swift +22 -20
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/SolidCompositionLayer.swift +26 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/TextCompositionLayer.swift +42 -36
- package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +200 -140
- package/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +47 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/CompositionLayersInitializer.swift +33 -24
- package/{lottie-swift/src/Private/LayerContainers/Utility/TextLayer.swift → Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift} +120 -106
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +25 -24
- package/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +41 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerImageProvider.swift +20 -16
- package/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +40 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerTransformNode.swift +82 -67
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +4 -4
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/NodeProperty.swift +29 -21
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +16 -10
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +6 -6
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +5 -5
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +10 -8
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueContainer.swift +25 -21
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +23 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/KeyframeInterpolator.swift +125 -108
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift +22 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift +110 -79
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift +22 -16
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift +19 -15
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift +22 -20
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift +22 -23
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift +242 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +30 -24
- package/{lottie-swift/src/Private/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift → Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift} +93 -66
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +23 -19
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +139 -0
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +170 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/RectNode.swift +95 -58
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift +42 -29
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/StarNode.swift +108 -69
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +155 -0
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift +51 -37
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift +54 -42
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +65 -57
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +84 -58
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +138 -119
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/AnimatorNode.swift +80 -79
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/PathNode.swift +5 -3
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/RenderNode.swift +22 -17
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift +27 -24
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +34 -25
- package/Sources/Private/Model/Animation.swift +160 -0
- package/Sources/Private/Model/Assets/Asset.swift +43 -0
- package/{lottie-swift/src → Sources}/Private/Model/Assets/AssetLibrary.swift +40 -13
- package/Sources/Private/Model/Assets/ImageAsset.swift +112 -0
- package/{lottie-swift/src → Sources}/Private/Model/Assets/PrecompAsset.swift +20 -10
- package/Sources/Private/Model/DictionaryInitializable.swift +67 -0
- package/Sources/Private/Model/Extensions/Bundle.swift +34 -0
- package/{lottie-swift/src → Sources}/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift +8 -4
- package/Sources/Private/Model/Keyframes/KeyframeData.swift +113 -0
- package/Sources/Private/Model/Keyframes/KeyframeGroup.swift +197 -0
- package/{lottie-swift/src → Sources}/Private/Model/Layers/ImageLayerModel.swift +21 -11
- package/Sources/Private/Model/Layers/LayerModel.swift +228 -0
- package/{lottie-swift/src → Sources}/Private/Model/Layers/PreCompLayerModel.swift +39 -22
- package/{lottie-swift/src → Sources}/Private/Model/Layers/ShapeLayerModel.swift +23 -12
- package/{lottie-swift/src → Sources}/Private/Model/Layers/SolidLayerModel.swift +31 -19
- package/{lottie-swift/src → Sources}/Private/Model/Layers/TextLayerModel.swift +33 -19
- package/Sources/Private/Model/Objects/DashPattern.swift +44 -0
- package/Sources/Private/Model/Objects/Marker.swift +33 -0
- package/Sources/Private/Model/Objects/Mask.swift +80 -0
- package/Sources/Private/Model/Objects/Transform.swift +179 -0
- package/Sources/Private/Model/ShapeItems/Ellipse.swift +75 -0
- package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
- package/Sources/Private/Model/ShapeItems/GradientFill.swift +124 -0
- package/Sources/Private/Model/ShapeItems/GradientStroke.swift +186 -0
- package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
- package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -11
- package/Sources/Private/Model/ShapeItems/Rectangle.swift +73 -0
- package/Sources/Private/Model/ShapeItems/Repeater.swift +136 -0
- package/Sources/Private/Model/ShapeItems/Shape.swift +56 -0
- package/Sources/Private/Model/ShapeItems/ShapeItem.swift +163 -0
- package/Sources/Private/Model/ShapeItems/ShapeTransform.swift +136 -0
- package/Sources/Private/Model/ShapeItems/Star.swift +132 -0
- package/Sources/Private/Model/ShapeItems/Stroke.swift +102 -0
- package/Sources/Private/Model/ShapeItems/Trim.swift +78 -0
- package/Sources/Private/Model/Text/Font.swift +61 -0
- package/{lottie-swift/src → Sources}/Private/Model/Text/Glyph.swift +63 -39
- package/Sources/Private/Model/Text/TextAnimator.swift +164 -0
- package/Sources/Private/Model/Text/TextDocument.swift +123 -0
- package/Sources/Private/RootAnimationLayer.swift +51 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Debugging/AnimatorNodeDebugging.swift +7 -7
- package/{lottie-swift/src → Sources}/Private/Utility/Debugging/LayerDebugging.swift +72 -48
- package/Sources/Private/Utility/Debugging/TestHelpers.swift +10 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Extensions/AnimationKeypathExtension.swift +69 -59
- package/Sources/Private/Utility/Extensions/BlendMode+Filter.swift +31 -0
- package/Sources/Private/Utility/Extensions/CGColor+RGB.swift +22 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Extensions/CGFloatExtensions.swift +70 -67
- package/Sources/Private/Utility/Extensions/DataExtension.swift +27 -0
- package/Sources/Private/Utility/Extensions/MathKit.swift +450 -0
- package/Sources/Private/Utility/Extensions/StringExtensions.swift +38 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Helpers/AnimationContext.swift +42 -16
- package/Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift +134 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Interpolatable/KeyframeExtensions.swift +13 -10
- package/Sources/Private/Utility/Interpolatable/KeyframeGroup+Extensions.swift +59 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -143
- package/Sources/Private/Utility/Primitives/CGPointExtension.swift +35 -0
- package/{lottie-swift/src → Sources}/Private/Utility/Primitives/ColorExtension.swift +46 -14
- package/{lottie-swift/src → Sources}/Private/Utility/Primitives/CompoundBezierPath.swift +58 -49
- package/Sources/Private/Utility/Primitives/CurveVertex.swift +184 -0
- package/Sources/Private/Utility/Primitives/PathElement.swift +75 -0
- package/Sources/Private/Utility/Primitives/UnitBezier.swift +115 -0
- package/Sources/Private/Utility/Primitives/VectorsExtensions.swift +341 -0
- package/Sources/Public/Animation/AnimationPublic.swift +266 -0
- package/Sources/Public/Animation/AnimationView.swift +1335 -0
- package/Sources/Public/Animation/AnimationViewInitializers.swift +109 -0
- package/Sources/Public/AnimationCache/AnimationCacheProvider.swift +22 -0
- package/{lottie-swift/src → Sources}/Public/AnimationCache/LRUAnimationCache.swift +22 -18
- package/Sources/Public/DynamicProperties/AnimationKeypath.swift +49 -0
- package/Sources/Public/DynamicProperties/AnyValueProvider.swift +132 -0
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +54 -36
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +40 -36
- package/Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +123 -0
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +40 -35
- package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +40 -35
- package/{lottie-swift/src → Sources}/Public/FontProvider/AnimationFontProvider.swift +15 -8
- package/Sources/Public/ImageProvider/AnimationImageProvider.swift +21 -0
- package/Sources/Public/Keyframes/Interpolatable.swift +253 -0
- package/Sources/Public/Keyframes/Keyframe.swift +92 -0
- package/Sources/Public/Logging/LottieLogger.swift +137 -0
- package/Sources/Public/LottieConfiguration.swift +143 -0
- package/{lottie-swift/src → Sources}/Public/Primitives/AnimationTime.swift +1 -1
- package/{lottie-swift/src → Sources}/Public/Primitives/Color.swift +10 -6
- package/{lottie-swift/src → Sources}/Public/Primitives/Vectors.swift +13 -12
- package/Sources/Public/TextProvider/AnimationTextProvider.swift +53 -0
- package/{lottie-swift/src → Sources}/Public/iOS/AnimatedButton.swift +42 -26
- package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +100 -91
- package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +128 -94
- package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +3 -3
- package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
- package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +36 -34
- package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +4 -0
- package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +38 -29
- package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +24 -21
- package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +4 -4
- package/{lottie-swift/src/Public/MacOS/AnimationSubview.swift → Sources/Public/macOS/AnimationSubview.macOS.swift} +4 -5
- package/{lottie-swift/src/Public/MacOS/LottieView.swift → Sources/Public/macOS/AnimationViewBase.macOS.swift} +58 -50
- package/{lottie-swift/src/Public/MacOS/BundleImageProvider.swift → Sources/Public/macOS/BundleImageProvider.macOS.swift} +31 -32
- package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +67 -0
- package/Tests/AnimationKeypathTests.swift +94 -0
- package/Tests/AutomaticEngineTests.swift +57 -0
- package/Tests/BundleTests.swift +25 -0
- package/Tests/DataURLTests.swift +64 -0
- package/Tests/ParsingTests.swift +43 -0
- package/Tests/PerformanceTests.swift +215 -0
- package/Tests/SnapshotConfiguration.swift +153 -0
- package/Tests/SnapshotTests.swift +265 -0
- package/Tests/Utils/Bundle+Module.swift +30 -0
- package/Tests/Utils/HardcodedFontProvider.swift +19 -0
- package/Tests/Utils/HardcodedImageProvider.swift +23 -0
- package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
- package/Tests/ValueProvidersTests.swift +27 -0
- package/lottie-ios.podspec +11 -12
- package/package.json +1 -1
- package/script/test-carthage/Cartfile +1 -0
- package/script/test-carthage/Cartfile.resolved +1 -0
- package/script/test-carthage/CarthageTest/AppDelegate.swift +26 -0
- package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
- package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
- package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
- package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
- package/script/test-carthage/CarthageTest/Info.plist +66 -0
- package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
- package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
- package/script/test-carthage/CarthageTest-macOS/AppDelegate.swift +7 -0
- package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
- package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
- package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/Contents.json +6 -0
- package/script/test-carthage/CarthageTest-macOS/Base.lproj/Main.storyboard +717 -0
- package/script/test-carthage/CarthageTest-macOS/CarthageTest_macOS.entitlements +10 -0
- package/script/test-carthage/CarthageTest-macOS/ViewController.swift +15 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +532 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
- package/script/test-carthage/Mintfile +1 -0
- package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
- package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/script/test-spm/Mintfile +1 -0
- package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie/Info.plist +0 -22
- package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
- package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
- package/lottie-swift/Assets/.gitkeep +0 -0
- package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
- package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
- package/lottie-swift/src/Private/Model/Animation.swift +0 -107
- package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
- package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
- package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
- package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
- package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
- package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
- package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
- package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
- package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
- package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
- package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
- package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
- package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
- package/lottie-swift/src/Private/Model/ShapeItems/Group.swift +0 -32
- package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
- package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
- package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
- package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
- package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
- package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
- package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
- package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
- package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
- package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
- package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
- package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
- package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
- package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
- package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
- package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
- package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
- package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
- package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
- package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
- package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
- package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
- package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1006
- package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
- package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
- package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
- package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
- package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
- package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
- package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
- package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
- package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
- package/lottie-swift-testing.podspec +0 -32
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Layer.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/7/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
/// Used for mapping a heterogeneous list to classes for parsing.
|
|
11
|
-
extension LayerType: ClassFamily {
|
|
12
|
-
static var discriminator: Discriminator = .type
|
|
13
|
-
|
|
14
|
-
func getType() -> AnyObject.Type {
|
|
15
|
-
switch self {
|
|
16
|
-
case .precomp:
|
|
17
|
-
return PreCompLayerModel.self
|
|
18
|
-
case .solid:
|
|
19
|
-
return SolidLayerModel.self
|
|
20
|
-
case .image:
|
|
21
|
-
return ImageLayerModel.self
|
|
22
|
-
case .null:
|
|
23
|
-
return LayerModel.self
|
|
24
|
-
case .shape:
|
|
25
|
-
return ShapeLayerModel.self
|
|
26
|
-
case .text:
|
|
27
|
-
return TextLayerModel.self
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
public enum LayerType: Int, Codable {
|
|
33
|
-
case precomp
|
|
34
|
-
case solid
|
|
35
|
-
case image
|
|
36
|
-
case null
|
|
37
|
-
case shape
|
|
38
|
-
case text
|
|
39
|
-
|
|
40
|
-
public init(from decoder: Decoder) throws {
|
|
41
|
-
self = try LayerType(rawValue: decoder.singleValueContainer().decode(RawValue.self)) ?? .null
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public enum MatteType: Int, Codable {
|
|
46
|
-
case none
|
|
47
|
-
case add
|
|
48
|
-
case invert
|
|
49
|
-
case unknown
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
public enum BlendMode: Int, Codable {
|
|
53
|
-
case normal
|
|
54
|
-
case multiply
|
|
55
|
-
case screen
|
|
56
|
-
case overlay
|
|
57
|
-
case darken
|
|
58
|
-
case lighten
|
|
59
|
-
case colorDodge
|
|
60
|
-
case colorBurn
|
|
61
|
-
case hardLight
|
|
62
|
-
case softLight
|
|
63
|
-
case difference
|
|
64
|
-
case exclusion
|
|
65
|
-
case hue
|
|
66
|
-
case saturation
|
|
67
|
-
case color
|
|
68
|
-
case luminosity
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
A base top container for shapes, images, and other view objects.
|
|
73
|
-
*/
|
|
74
|
-
class LayerModel: Codable {
|
|
75
|
-
|
|
76
|
-
/// The readable name of the layer
|
|
77
|
-
let name: String
|
|
78
|
-
|
|
79
|
-
/// The index of the layer
|
|
80
|
-
let index: Int
|
|
81
|
-
|
|
82
|
-
/// The type of the layer.
|
|
83
|
-
let type: LayerType
|
|
84
|
-
|
|
85
|
-
/// The coordinate space
|
|
86
|
-
let coordinateSpace: CoordinateSpace
|
|
87
|
-
|
|
88
|
-
/// The in time of the layer in frames.
|
|
89
|
-
let inFrame: Double
|
|
90
|
-
/// The out time of the layer in frames.
|
|
91
|
-
let outFrame: Double
|
|
92
|
-
|
|
93
|
-
/// The start time of the layer in frames.
|
|
94
|
-
let startTime: Double
|
|
95
|
-
|
|
96
|
-
/// The transform of the layer
|
|
97
|
-
let transform: Transform
|
|
98
|
-
|
|
99
|
-
/// The index of the parent layer, if applicable.
|
|
100
|
-
let parent: Int?
|
|
101
|
-
|
|
102
|
-
/// The blending mode for the layer
|
|
103
|
-
let blendMode: BlendMode
|
|
104
|
-
|
|
105
|
-
/// An array of masks for the layer.
|
|
106
|
-
let masks: [Mask]?
|
|
107
|
-
|
|
108
|
-
/// A number that stretches time by a multiplier
|
|
109
|
-
let timeStretch: Double
|
|
110
|
-
|
|
111
|
-
/// The type of matte if any.
|
|
112
|
-
let matte: MatteType?
|
|
113
|
-
|
|
114
|
-
let hidden: Bool
|
|
115
|
-
|
|
116
|
-
private enum CodingKeys : String, CodingKey {
|
|
117
|
-
case name = "nm"
|
|
118
|
-
case index = "ind"
|
|
119
|
-
case type = "ty"
|
|
120
|
-
case coordinateSpace = "ddd"
|
|
121
|
-
case inFrame = "ip"
|
|
122
|
-
case outFrame = "op"
|
|
123
|
-
case startTime = "st"
|
|
124
|
-
case transform = "ks"
|
|
125
|
-
case parent = "parent"
|
|
126
|
-
case blendMode = "bm"
|
|
127
|
-
case masks = "masksProperties"
|
|
128
|
-
case timeStretch = "sr"
|
|
129
|
-
case matte = "tt"
|
|
130
|
-
case hidden = "hd"
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
required init(from decoder: Decoder) throws {
|
|
134
|
-
let container = try decoder.container(keyedBy: LayerModel.CodingKeys.self)
|
|
135
|
-
self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? "Layer"
|
|
136
|
-
self.index = try container.decode(Int.self, forKey: .index)
|
|
137
|
-
self.type = try container.decode(LayerType.self, forKey: .type)
|
|
138
|
-
self.coordinateSpace = try container.decodeIfPresent(CoordinateSpace.self, forKey: .coordinateSpace) ?? .type2d
|
|
139
|
-
self.inFrame = try container.decode(Double.self, forKey: .inFrame)
|
|
140
|
-
self.outFrame = try container.decode(Double.self, forKey: .outFrame)
|
|
141
|
-
self.startTime = try container.decode(Double.self, forKey: .startTime)
|
|
142
|
-
self.transform = try container.decode(Transform.self, forKey: .transform)
|
|
143
|
-
self.parent = try container.decodeIfPresent(Int.self, forKey: .parent)
|
|
144
|
-
self.blendMode = try container.decodeIfPresent(BlendMode.self, forKey: .blendMode) ?? .normal
|
|
145
|
-
self.masks = try container.decodeIfPresent([Mask].self, forKey: .masks)
|
|
146
|
-
self.timeStretch = try container.decodeIfPresent(Double.self, forKey: .timeStretch) ?? 1
|
|
147
|
-
self.matte = try container.decodeIfPresent(MatteType.self, forKey: .matte)
|
|
148
|
-
self.hidden = try container.decodeIfPresent(Bool.self, forKey: .hidden) ?? false
|
|
149
|
-
}
|
|
150
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// DashPattern.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/22/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum DashElementType: String, Codable {
|
|
11
|
-
case offset = "o"
|
|
12
|
-
case dash = "d"
|
|
13
|
-
case gap = "g"
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
final class DashElement: Codable {
|
|
17
|
-
let type: DashElementType
|
|
18
|
-
let value: KeyframeGroup<Vector1D>
|
|
19
|
-
|
|
20
|
-
enum CodingKeys : String, CodingKey {
|
|
21
|
-
case type = "n"
|
|
22
|
-
case value = "v"
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Marker.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/9/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
/// A time marker
|
|
11
|
-
final class Marker: Codable {
|
|
12
|
-
|
|
13
|
-
/// The Marker Name
|
|
14
|
-
let name: String
|
|
15
|
-
|
|
16
|
-
/// The Frame time of the marker
|
|
17
|
-
let frameTime: AnimationFrameTime
|
|
18
|
-
|
|
19
|
-
enum CodingKeys : String, CodingKey {
|
|
20
|
-
case name = "cm"
|
|
21
|
-
case frameTime = "tm"
|
|
22
|
-
}
|
|
23
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Mask.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum MaskMode: String, Codable {
|
|
11
|
-
case add = "a"
|
|
12
|
-
case subtract = "s"
|
|
13
|
-
case intersect = "i"
|
|
14
|
-
case lighten = "l"
|
|
15
|
-
case darken = "d"
|
|
16
|
-
case difference = "f"
|
|
17
|
-
case none = "n"
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
final class Mask: Codable {
|
|
21
|
-
|
|
22
|
-
let mode: MaskMode
|
|
23
|
-
|
|
24
|
-
let opacity: KeyframeGroup<Vector1D>
|
|
25
|
-
|
|
26
|
-
let shape: KeyframeGroup<BezierPath>
|
|
27
|
-
|
|
28
|
-
let inverted: Bool
|
|
29
|
-
|
|
30
|
-
let expansion: KeyframeGroup<Vector1D>
|
|
31
|
-
|
|
32
|
-
enum CodingKeys : String, CodingKey {
|
|
33
|
-
case mode = "mode"
|
|
34
|
-
case opacity = "o"
|
|
35
|
-
case inverted = "inv"
|
|
36
|
-
case shape = "pt"
|
|
37
|
-
case expansion = "x"
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
required init(from decoder: Decoder) throws {
|
|
41
|
-
let container = try decoder.container(keyedBy: Mask.CodingKeys.self)
|
|
42
|
-
self.mode = try container.decodeIfPresent(MaskMode.self, forKey: .mode) ?? .add
|
|
43
|
-
self.opacity = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .opacity) ?? KeyframeGroup(Vector1D(100))
|
|
44
|
-
self.shape = try container.decode(KeyframeGroup<BezierPath>.self, forKey: .shape)
|
|
45
|
-
self.inverted = try container.decodeIfPresent(Bool.self, forKey: .inverted) ?? false
|
|
46
|
-
self.expansion = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .expansion) ?? KeyframeGroup(Vector1D(0))
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Transform.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/7/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
/// The animatable transform for a layer. Controls position, rotation, scale, and opacity.
|
|
11
|
-
final class Transform: Codable {
|
|
12
|
-
|
|
13
|
-
/// The anchor point of the transform.
|
|
14
|
-
let anchorPoint: KeyframeGroup<Vector3D>
|
|
15
|
-
|
|
16
|
-
/// The position of the transform. This is nil if the position data was split.
|
|
17
|
-
let position: KeyframeGroup<Vector3D>?
|
|
18
|
-
|
|
19
|
-
/// The positionX of the transform. This is nil if the position property is set.
|
|
20
|
-
let positionX: KeyframeGroup<Vector1D>?
|
|
21
|
-
|
|
22
|
-
/// The positionY of the transform. This is nil if the position property is set.
|
|
23
|
-
let positionY: KeyframeGroup<Vector1D>?
|
|
24
|
-
|
|
25
|
-
/// The scale of the transform
|
|
26
|
-
let scale: KeyframeGroup<Vector3D>
|
|
27
|
-
|
|
28
|
-
/// The rotation of the transform. Note: This is single dimensional rotation.
|
|
29
|
-
let rotation: KeyframeGroup<Vector1D>
|
|
30
|
-
|
|
31
|
-
/// The opacity of the transform.
|
|
32
|
-
let opacity: KeyframeGroup<Vector1D>
|
|
33
|
-
|
|
34
|
-
/// Should always be nil.
|
|
35
|
-
let rotationZ: KeyframeGroup<Vector1D>?
|
|
36
|
-
|
|
37
|
-
enum CodingKeys : String, CodingKey {
|
|
38
|
-
case anchorPoint = "a"
|
|
39
|
-
case position = "p"
|
|
40
|
-
case positionX = "px"
|
|
41
|
-
case positionY = "py"
|
|
42
|
-
case scale = "s"
|
|
43
|
-
case rotation = "r"
|
|
44
|
-
case rotationZ = "rz"
|
|
45
|
-
case opacity = "o"
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
enum PositionCodingKeys : String, CodingKey {
|
|
49
|
-
case split = "s"
|
|
50
|
-
case positionX = "x"
|
|
51
|
-
case positionY = "y"
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
required init(from decoder: Decoder) throws {
|
|
56
|
-
/**
|
|
57
|
-
This manual override of decode is required because we want to throw an error
|
|
58
|
-
in the case that there is not position data.
|
|
59
|
-
*/
|
|
60
|
-
let container = try decoder.container(keyedBy: Transform.CodingKeys.self)
|
|
61
|
-
|
|
62
|
-
// AnchorPoint
|
|
63
|
-
self.anchorPoint = try container.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .anchorPoint) ?? KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
|
|
64
|
-
|
|
65
|
-
// Position
|
|
66
|
-
if container.contains(.positionX), container.contains(.positionY) {
|
|
67
|
-
// Position dimensions are split into two keyframe groups
|
|
68
|
-
self.positionX = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .positionX)
|
|
69
|
-
self.positionY = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .positionY)
|
|
70
|
-
self.position = nil
|
|
71
|
-
} else if let positionKeyframes = try? container.decode(KeyframeGroup<Vector3D>.self, forKey: .position) {
|
|
72
|
-
// Position dimensions are a single keyframe group.
|
|
73
|
-
self.position = positionKeyframes
|
|
74
|
-
self.positionX = nil
|
|
75
|
-
self.positionY = nil
|
|
76
|
-
} else if let positionContainer = try? container.nestedContainer(keyedBy: PositionCodingKeys.self, forKey: .position),
|
|
77
|
-
let positionX = try? positionContainer.decode(KeyframeGroup<Vector1D>.self, forKey: .positionX),
|
|
78
|
-
let positionY = try? positionContainer.decode(KeyframeGroup<Vector1D>.self, forKey: .positionY) {
|
|
79
|
-
/// Position keyframes are split and nested.
|
|
80
|
-
self.positionX = positionX
|
|
81
|
-
self.positionY = positionY
|
|
82
|
-
self.position = nil
|
|
83
|
-
} else {
|
|
84
|
-
/// Default value.
|
|
85
|
-
self.position = KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
|
|
86
|
-
self.positionX = nil
|
|
87
|
-
self.positionY = nil
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
// Scale
|
|
92
|
-
self.scale = try container.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .scale) ?? KeyframeGroup(Vector3D(x: Double(100), y: 100, z: 100))
|
|
93
|
-
|
|
94
|
-
// Rotation
|
|
95
|
-
if let rotationZ = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .rotationZ) {
|
|
96
|
-
self.rotation = rotationZ
|
|
97
|
-
} else {
|
|
98
|
-
self.rotation = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .rotation) ?? KeyframeGroup(Vector1D(0))
|
|
99
|
-
}
|
|
100
|
-
self.rotationZ = nil
|
|
101
|
-
|
|
102
|
-
// Opacity
|
|
103
|
-
self.opacity = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .opacity) ?? KeyframeGroup(Vector1D(100))
|
|
104
|
-
}
|
|
105
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// EllipseItem.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum PathDirection: Int, Codable {
|
|
11
|
-
case clockwise = 1
|
|
12
|
-
case userSetClockwise = 2
|
|
13
|
-
case counterClockwise = 3
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/// An item that define an ellipse shape
|
|
17
|
-
final class Ellipse: ShapeItem {
|
|
18
|
-
|
|
19
|
-
/// The direction of the ellipse.
|
|
20
|
-
let direction: PathDirection
|
|
21
|
-
|
|
22
|
-
/// The position of the ellipse
|
|
23
|
-
let position: KeyframeGroup<Vector3D>
|
|
24
|
-
|
|
25
|
-
/// The size of the ellipse
|
|
26
|
-
let size: KeyframeGroup<Vector3D>
|
|
27
|
-
|
|
28
|
-
private enum CodingKeys : String, CodingKey {
|
|
29
|
-
case direction = "d"
|
|
30
|
-
case position = "p"
|
|
31
|
-
case size = "s"
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
required init(from decoder: Decoder) throws {
|
|
35
|
-
let container = try decoder.container(keyedBy: Ellipse.CodingKeys.self)
|
|
36
|
-
self.direction = try container.decodeIfPresent(PathDirection.self, forKey: .direction) ?? .clockwise
|
|
37
|
-
self.position = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .position)
|
|
38
|
-
self.size = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .size)
|
|
39
|
-
try super.init(from: decoder)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
override func encode(to encoder: Encoder) throws {
|
|
43
|
-
try super.encode(to: encoder)
|
|
44
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
45
|
-
try container.encode(direction, forKey: .direction)
|
|
46
|
-
try container.encode(position, forKey: .position)
|
|
47
|
-
try container.encode(size, forKey: .size)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// FillShape.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum FillRule: Int, Codable {
|
|
11
|
-
case none
|
|
12
|
-
case nonZeroWinding
|
|
13
|
-
case evenOdd
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/// An item that defines a fill render
|
|
17
|
-
final class Fill: ShapeItem {
|
|
18
|
-
|
|
19
|
-
/// The opacity of the fill
|
|
20
|
-
let opacity: KeyframeGroup<Vector1D>
|
|
21
|
-
|
|
22
|
-
/// The color keyframes for the fill
|
|
23
|
-
let color: KeyframeGroup<Color>
|
|
24
|
-
|
|
25
|
-
let fillRule: FillRule
|
|
26
|
-
|
|
27
|
-
private enum CodingKeys : String, CodingKey {
|
|
28
|
-
case opacity = "o"
|
|
29
|
-
case color = "c"
|
|
30
|
-
case fillRule = "r"
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
required init(from decoder: Decoder) throws {
|
|
34
|
-
let container = try decoder.container(keyedBy: Fill.CodingKeys.self)
|
|
35
|
-
self.opacity = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .opacity)
|
|
36
|
-
self.color = try container.decode(KeyframeGroup<Color>.self, forKey: .color)
|
|
37
|
-
self.fillRule = try container.decodeIfPresent(FillRule.self, forKey: .fillRule) ?? .nonZeroWinding
|
|
38
|
-
try super.init(from: decoder)
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
override func encode(to encoder: Encoder) throws {
|
|
42
|
-
try super.encode(to: encoder)
|
|
43
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
44
|
-
try container.encode(opacity, forKey: .opacity)
|
|
45
|
-
try container.encode(color, forKey: .color)
|
|
46
|
-
try container.encode(fillRule, forKey: .fillRule)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// GradientFill.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum GradientType: Int, Codable {
|
|
11
|
-
case none
|
|
12
|
-
case linear
|
|
13
|
-
case radial
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/// An item that define a gradient fill
|
|
17
|
-
final class GradientFill: ShapeItem {
|
|
18
|
-
|
|
19
|
-
/// The opacity of the fill
|
|
20
|
-
let opacity: KeyframeGroup<Vector1D>
|
|
21
|
-
|
|
22
|
-
/// The start of the gradient
|
|
23
|
-
let startPoint: KeyframeGroup<Vector3D>
|
|
24
|
-
|
|
25
|
-
/// The end of the gradient
|
|
26
|
-
let endPoint: KeyframeGroup<Vector3D>
|
|
27
|
-
|
|
28
|
-
/// The type of gradient
|
|
29
|
-
let gradientType: GradientType
|
|
30
|
-
|
|
31
|
-
/// Gradient Highlight Length. Only if type is Radial
|
|
32
|
-
let highlightLength: KeyframeGroup<Vector1D>?
|
|
33
|
-
|
|
34
|
-
/// Highlight Angle. Only if type is Radial
|
|
35
|
-
let highlightAngle: KeyframeGroup<Vector1D>?
|
|
36
|
-
|
|
37
|
-
/// The number of color points in the gradient
|
|
38
|
-
let numberOfColors: Int
|
|
39
|
-
|
|
40
|
-
/// The Colors of the gradient.
|
|
41
|
-
let colors: KeyframeGroup<[Double]>
|
|
42
|
-
|
|
43
|
-
private enum CodingKeys : String, CodingKey {
|
|
44
|
-
case opacity = "o"
|
|
45
|
-
case startPoint = "s"
|
|
46
|
-
case endPoint = "e"
|
|
47
|
-
case gradientType = "t"
|
|
48
|
-
case highlightLength = "h"
|
|
49
|
-
case highlightAngle = "a"
|
|
50
|
-
case colors = "g"
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
private enum GradientDataKeys : String, CodingKey {
|
|
54
|
-
case numberOfColors = "p"
|
|
55
|
-
case colors = "k"
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
required init(from decoder: Decoder) throws {
|
|
59
|
-
let container = try decoder.container(keyedBy: GradientFill.CodingKeys.self)
|
|
60
|
-
self.opacity = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .opacity)
|
|
61
|
-
self.startPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .startPoint)
|
|
62
|
-
self.endPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .endPoint)
|
|
63
|
-
self.gradientType = try container.decode(GradientType.self, forKey: .gradientType)
|
|
64
|
-
self.highlightLength = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightLength)
|
|
65
|
-
self.highlightAngle = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightAngle)
|
|
66
|
-
let colorsContainer = try container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
|
|
67
|
-
self.colors = try colorsContainer.decode(KeyframeGroup<[Double]>.self, forKey: .colors)
|
|
68
|
-
self.numberOfColors = try colorsContainer.decode(Int.self, forKey: .numberOfColors)
|
|
69
|
-
try super.init(from: decoder)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
override func encode(to encoder: Encoder) throws {
|
|
73
|
-
try super.encode(to: encoder)
|
|
74
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
75
|
-
try container.encode(opacity, forKey: .opacity)
|
|
76
|
-
try container.encode(startPoint, forKey: .startPoint)
|
|
77
|
-
try container.encode(endPoint, forKey: .endPoint)
|
|
78
|
-
try container.encode(gradientType, forKey: .gradientType)
|
|
79
|
-
try container.encodeIfPresent(highlightLength, forKey: .highlightLength)
|
|
80
|
-
try container.encodeIfPresent(highlightAngle, forKey: .highlightAngle)
|
|
81
|
-
var colorsContainer = container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
|
|
82
|
-
try colorsContainer.encode(numberOfColors, forKey: .numberOfColors)
|
|
83
|
-
try colorsContainer.encode(colors, forKey: .colors)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
}
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// GradientStroke.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum LineCap: Int, Codable {
|
|
11
|
-
case none
|
|
12
|
-
case butt
|
|
13
|
-
case round
|
|
14
|
-
case square
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
enum LineJoin: Int, Codable {
|
|
18
|
-
case none
|
|
19
|
-
case miter
|
|
20
|
-
case round
|
|
21
|
-
case bevel
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
/// An item that define an ellipse shape
|
|
25
|
-
final class GradientStroke: ShapeItem {
|
|
26
|
-
|
|
27
|
-
/// The opacity of the fill
|
|
28
|
-
let opacity: KeyframeGroup<Vector1D>
|
|
29
|
-
|
|
30
|
-
/// The start of the gradient
|
|
31
|
-
let startPoint: KeyframeGroup<Vector3D>
|
|
32
|
-
|
|
33
|
-
/// The end of the gradient
|
|
34
|
-
let endPoint: KeyframeGroup<Vector3D>
|
|
35
|
-
|
|
36
|
-
/// The type of gradient
|
|
37
|
-
let gradientType: GradientType
|
|
38
|
-
|
|
39
|
-
/// Gradient Highlight Length. Only if type is Radial
|
|
40
|
-
let highlightLength: KeyframeGroup<Vector1D>?
|
|
41
|
-
|
|
42
|
-
/// Highlight Angle. Only if type is Radial
|
|
43
|
-
let highlightAngle: KeyframeGroup<Vector1D>?
|
|
44
|
-
|
|
45
|
-
/// The number of color points in the gradient
|
|
46
|
-
let numberOfColors: Int
|
|
47
|
-
|
|
48
|
-
/// The Colors of the gradient.
|
|
49
|
-
let colors: KeyframeGroup<[Double]>
|
|
50
|
-
|
|
51
|
-
/// The width of the stroke
|
|
52
|
-
let width: KeyframeGroup<Vector1D>
|
|
53
|
-
|
|
54
|
-
/// Line Cap
|
|
55
|
-
let lineCap: LineCap
|
|
56
|
-
|
|
57
|
-
/// Line Join
|
|
58
|
-
let lineJoin: LineJoin
|
|
59
|
-
|
|
60
|
-
/// Miter Limit
|
|
61
|
-
let miterLimit: Double
|
|
62
|
-
|
|
63
|
-
/// The dash pattern of the stroke
|
|
64
|
-
let dashPattern: [DashElement]?
|
|
65
|
-
|
|
66
|
-
private enum CodingKeys : String, CodingKey {
|
|
67
|
-
case opacity = "o"
|
|
68
|
-
case startPoint = "s"
|
|
69
|
-
case endPoint = "e"
|
|
70
|
-
case gradientType = "t"
|
|
71
|
-
case highlightLength = "h"
|
|
72
|
-
case highlightAngle = "a"
|
|
73
|
-
case colors = "g"
|
|
74
|
-
case width = "w"
|
|
75
|
-
case lineCap = "lc"
|
|
76
|
-
case lineJoin = "lj"
|
|
77
|
-
case miterLimit = "ml"
|
|
78
|
-
case dashPattern = "d"
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
private enum GradientDataKeys : String, CodingKey {
|
|
82
|
-
case numberOfColors = "p"
|
|
83
|
-
case colors = "k"
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
required init(from decoder: Decoder) throws {
|
|
87
|
-
let container = try decoder.container(keyedBy: GradientStroke.CodingKeys.self)
|
|
88
|
-
self.opacity = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .opacity)
|
|
89
|
-
self.startPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .startPoint)
|
|
90
|
-
self.endPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .endPoint)
|
|
91
|
-
self.gradientType = try container.decode(GradientType.self, forKey: .gradientType)
|
|
92
|
-
self.highlightLength = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightLength)
|
|
93
|
-
self.highlightAngle = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightAngle)
|
|
94
|
-
self.width = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .width)
|
|
95
|
-
self.lineCap = try container.decodeIfPresent(LineCap.self, forKey: .lineCap) ?? .round
|
|
96
|
-
self.lineJoin = try container.decodeIfPresent(LineJoin.self, forKey: .lineJoin) ?? .round
|
|
97
|
-
self.miterLimit = try container.decodeIfPresent(Double.self, forKey: .miterLimit) ?? 4
|
|
98
|
-
// TODO Decode Color Objects instead of array.
|
|
99
|
-
let colorsContainer = try container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
|
|
100
|
-
self.colors = try colorsContainer.decode(KeyframeGroup<[Double]>.self, forKey: .colors)
|
|
101
|
-
self.numberOfColors = try colorsContainer.decode(Int.self, forKey: .numberOfColors)
|
|
102
|
-
self.dashPattern = try container.decodeIfPresent([DashElement].self, forKey: .dashPattern)
|
|
103
|
-
try super.init(from: decoder)
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
override func encode(to encoder: Encoder) throws {
|
|
107
|
-
try super.encode(to: encoder)
|
|
108
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
109
|
-
try container.encode(opacity, forKey: .opacity)
|
|
110
|
-
try container.encode(startPoint, forKey: .startPoint)
|
|
111
|
-
try container.encode(endPoint, forKey: .endPoint)
|
|
112
|
-
try container.encode(gradientType, forKey: .gradientType)
|
|
113
|
-
try container.encodeIfPresent(highlightLength, forKey: .highlightLength)
|
|
114
|
-
try container.encodeIfPresent(highlightAngle, forKey: .highlightAngle)
|
|
115
|
-
try container.encode(width, forKey: .width)
|
|
116
|
-
try container.encode(lineCap, forKey: .lineCap)
|
|
117
|
-
try container.encode(lineJoin, forKey: .lineJoin)
|
|
118
|
-
try container.encode(miterLimit, forKey: .miterLimit)
|
|
119
|
-
var colorsContainer = container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
|
|
120
|
-
try colorsContainer.encode(numberOfColors, forKey: .numberOfColors)
|
|
121
|
-
try colorsContainer.encode(colors, forKey: .colors)
|
|
122
|
-
try container.encodeIfPresent(dashPattern, forKey: .dashPattern)
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// GroupItem.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
/// An item that define an ellipse shape
|
|
11
|
-
final class Group: ShapeItem {
|
|
12
|
-
|
|
13
|
-
/// A list of shape items.
|
|
14
|
-
let items: [ShapeItem]
|
|
15
|
-
|
|
16
|
-
private enum CodingKeys : String, CodingKey {
|
|
17
|
-
case items = "it"
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
required init(from decoder: Decoder) throws {
|
|
21
|
-
let container = try decoder.container(keyedBy: Group.CodingKeys.self)
|
|
22
|
-
self.items = try container.decode([ShapeItem].self, ofFamily: ShapeType.self, forKey: .items)
|
|
23
|
-
try super.init(from: decoder)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
override func encode(to encoder: Encoder) throws {
|
|
27
|
-
try super.encode(to: encoder)
|
|
28
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
29
|
-
try container.encode(items, forKey: .items)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
}
|