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.
- package/.github/actions/setup/action.yml +32 -0
- package/.github/issue_template.md +6 -23
- package/.github/workflows/main.yml +98 -0
- package/.github/workflows/stale_issues.yml +17 -0
- package/.spi.yml +6 -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/package.xcworkspace/xcuserdata/calstephens.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 +2011 -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_tvOS.xcscheme → Lottie (macOS).xcscheme } +5 -18
- package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.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 +34 -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 +22 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +138 -0
- package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
- package/Package.swift +5 -15
- package/README.md +40 -60
- package/Rakefile +160 -0
- package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
- package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +447 -0
- package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +81 -0
- package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
- package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +55 -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 +58 -0
- package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +257 -0
- package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +124 -0
- package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +73 -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 +497 -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 +154 -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 +88 -0
- package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +167 -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 +64 -0
- package/Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +138 -0
- package/Sources/Private/CoreAnimation/Layers/PreCompLayer.swift +140 -0
- package/Sources/Private/CoreAnimation/Layers/RepeaterLayer.swift +85 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +315 -0
- package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +390 -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 +94 -86
- 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 +59 -43
- 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} +149 -106
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +26 -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 +9 -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/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 +247 -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 +57 -42
- package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +66 -58
- package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +169 -0
- 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 +222 -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 +74 -0
- package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
- package/Sources/Private/Model/ShapeItems/GradientFill.swift +137 -0
- package/Sources/Private/Model/ShapeItems/GradientStroke.swift +185 -0
- package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
- package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -12
- package/Sources/Private/Model/ShapeItems/Rectangle.swift +72 -0
- package/Sources/Private/Model/ShapeItems/Repeater.swift +135 -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 +135 -0
- package/Sources/Private/Model/ShapeItems/Star.swift +131 -0
- package/Sources/Private/Model/ShapeItems/Stroke.swift +101 -0
- package/Sources/Private/Model/ShapeItems/Trim.swift +77 -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/Private/NodeRenderSystem/NodeProperties/ValueProviders → Sources/Private/Utility/Interpolatable}/KeyframeInterpolator.swift +125 -108
- 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 +103 -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 +214 -0
- package/Tests/Samples/9squares_AlBoardman.json +1 -0
- package/Tests/Samples/Boat_Loader.json +1 -0
- package/Tests/Samples/HamburgerArrow.json +1 -0
- package/Tests/Samples/IconTransitions.json +1 -0
- package/Tests/Samples/Images/dog.png +0 -0
- package/Tests/Samples/Issues/issue_1125.json +1 -0
- package/Tests/Samples/Issues/issue_1260.json +1 -0
- package/Tests/Samples/Issues/issue_1403.json +1 -0
- package/Tests/Samples/Issues/issue_1407.json +1 -0
- package/Tests/Samples/Issues/issue_1460.json +1 -0
- package/Tests/Samples/Issues/issue_1488.json +1 -0
- package/Tests/Samples/Issues/issue_1505.json +1 -0
- package/Tests/Samples/Issues/issue_1541.json +1 -0
- package/Tests/Samples/Issues/issue_1557.json +1 -0
- package/Tests/Samples/Issues/issue_1603.json +1 -0
- package/Tests/Samples/Issues/issue_1628.json +1 -0
- package/Tests/Samples/Issues/issue_1636.json +1 -0
- package/Tests/Samples/Issues/issue_1643.json +1 -0
- package/Tests/Samples/Issues/issue_1655.json +1 -0
- package/Tests/Samples/Issues/issue_1664.json +1 -0
- package/Tests/Samples/Issues/issue_1683.json +1 -0
- package/Tests/Samples/Issues/issue_1687.json +1 -0
- package/Tests/Samples/Issues/issue_1711.json +1 -0
- package/Tests/Samples/Issues/issue_1717.json +1 -0
- package/Tests/Samples/Issues/issue_769.json +1 -0
- package/Tests/Samples/Issues/issue_885.json +1 -0
- package/Tests/Samples/Issues/issue_965.json +1 -0
- package/Tests/Samples/Issues/pr_1536.json +1 -0
- package/Tests/Samples/Issues/pr_1563.json +8439 -0
- package/Tests/Samples/Issues/pr_1592.json +5527 -0
- package/Tests/Samples/Issues/pr_1599.json +738 -0
- package/Tests/Samples/Issues/pr_1604_1.json +1 -0
- package/Tests/Samples/Issues/pr_1604_2.json +1 -0
- package/Tests/Samples/Issues/pr_1632_1.json +1 -0
- package/Tests/Samples/Issues/pr_1632_2.json +1 -0
- package/Tests/Samples/Issues/pr_1686.json +513 -0
- package/Tests/Samples/Issues/pr_1698.json +1 -0
- package/Tests/Samples/Issues/pr_1699.json +1 -0
- package/Tests/Samples/LottieFiles/LICENSE.md +14 -0
- package/Tests/Samples/LottieFiles/bounce_strokes.json +1 -0
- package/Tests/Samples/LottieFiles/cactus.json +1 -0
- package/Tests/Samples/LottieFiles/dog_car_ride.json +1 -0
- package/Tests/Samples/LottieFiles/draft_icon.json +1 -0
- package/Tests/Samples/LottieFiles/fireworks.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_1.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_2.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_pill.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_shapes.json +1 -0
- package/Tests/Samples/LottieFiles/gradient_square.json +1 -0
- package/Tests/Samples/LottieFiles/growth.json +1 -0
- package/Tests/Samples/LottieFiles/infinity_loader.json +1 -0
- package/Tests/Samples/LottieFiles/loading_dots_1.json +1 -0
- package/Tests/Samples/LottieFiles/loading_dots_2.json +1 -0
- package/Tests/Samples/LottieFiles/loading_dots_3.json +1 -0
- package/Tests/Samples/LottieFiles/loading_gradient_strokes.json +1 -0
- package/Tests/Samples/LottieFiles/settings_slider.json +1 -0
- package/Tests/Samples/LottieFiles/shop.json +1 -0
- package/Tests/Samples/LottieFiles/step_loader.json +1 -0
- package/Tests/Samples/LottieLogo1.json +1 -0
- package/Tests/Samples/LottieLogo1_masked.json +1 -0
- package/Tests/Samples/LottieLogo2.json +1 -0
- package/Tests/Samples/MotionCorpse_Jrcanest.json +1 -0
- package/Tests/Samples/Nonanimating/BasicLayers.json +1 -0
- package/Tests/Samples/Nonanimating/DisableNodesTest.json +1 -0
- package/Tests/Samples/Nonanimating/FirstText.json +1 -0
- package/Tests/Samples/Nonanimating/GeometryTransformTest.json +1 -0
- package/Tests/Samples/Nonanimating/Text_AnimatedProperties.json +1 -0
- package/Tests/Samples/Nonanimating/Text_Glyph.json +1 -0
- package/Tests/Samples/Nonanimating/Text_NoAnimation.json +1 -0
- package/Tests/Samples/Nonanimating/Text_NoGlyph.json +1 -0
- package/Tests/Samples/Nonanimating/Zoom.json +1 -0
- package/Tests/Samples/Nonanimating/_dog.json +1 -0
- package/Tests/Samples/Nonanimating/base64Test.json +1 -0
- package/Tests/Samples/Nonanimating/blend_mode_test.json +1 -0
- package/Tests/Samples/Nonanimating/keypathTest.json +1 -0
- package/Tests/Samples/Nonanimating/verifyLineHeight.json +1 -0
- package/Tests/Samples/PinJump.json +1 -0
- package/Tests/Samples/Switch.json +1 -0
- package/Tests/Samples/Switch_States.json +1 -0
- package/Tests/Samples/TwitterHeart.json +1 -0
- package/Tests/Samples/TwitterHeartButton.json +1 -0
- package/Tests/Samples/TypeFace/A.json +1 -0
- package/Tests/Samples/TypeFace/Apostrophe.json +1 -0
- package/Tests/Samples/TypeFace/B.json +1 -0
- package/Tests/Samples/TypeFace/BlinkingCursor.json +1 -0
- package/Tests/Samples/TypeFace/C.json +1 -0
- package/Tests/Samples/TypeFace/Colon.json +1 -0
- package/Tests/Samples/TypeFace/Comma.json +1 -0
- package/Tests/Samples/TypeFace/D.json +1 -0
- package/Tests/Samples/TypeFace/E.json +1 -0
- package/Tests/Samples/TypeFace/F.json +1 -0
- package/Tests/Samples/TypeFace/G.json +1 -0
- package/Tests/Samples/TypeFace/H.json +1 -0
- package/Tests/Samples/TypeFace/I.json +1 -0
- package/Tests/Samples/TypeFace/J.json +1 -0
- package/Tests/Samples/TypeFace/K.json +1 -0
- package/Tests/Samples/TypeFace/L.json +1 -0
- package/Tests/Samples/TypeFace/M.json +1 -0
- package/Tests/Samples/TypeFace/N.json +1 -0
- package/Tests/Samples/TypeFace/O.json +1 -0
- package/Tests/Samples/TypeFace/P.json +1 -0
- package/Tests/Samples/TypeFace/Q.json +1 -0
- package/Tests/Samples/TypeFace/R.json +1 -0
- package/Tests/Samples/TypeFace/S.json +1 -0
- package/Tests/Samples/TypeFace/T.json +1 -0
- package/Tests/Samples/TypeFace/U.json +1 -0
- package/Tests/Samples/TypeFace/V.json +1 -0
- package/Tests/Samples/TypeFace/W.json +1 -0
- package/Tests/Samples/TypeFace/X.json +1 -0
- package/Tests/Samples/TypeFace/Y.json +1 -0
- package/Tests/Samples/TypeFace/Z.json +1 -0
- package/Tests/Samples/Watermelon.json +1 -0
- package/Tests/Samples/setValueTest.json +1 -0
- package/Tests/Samples/timeremap.json +1 -0
- package/Tests/Samples/vcTransition1.json +1 -0
- package/Tests/Samples/vcTransition2.json +1 -0
- package/Tests/SnapshotConfiguration.swift +158 -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 +12 -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/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +0 -127
- 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,50 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Rectangle.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 Rectangle: ShapeItem {
|
|
12
|
-
|
|
13
|
-
/// The direction of the rect.
|
|
14
|
-
let direction: PathDirection
|
|
15
|
-
|
|
16
|
-
/// The position
|
|
17
|
-
let position: KeyframeGroup<Vector3D>
|
|
18
|
-
|
|
19
|
-
/// The size
|
|
20
|
-
let size: KeyframeGroup<Vector3D>
|
|
21
|
-
|
|
22
|
-
/// The Corner radius of the rectangle
|
|
23
|
-
let cornerRadius: KeyframeGroup<Vector1D>
|
|
24
|
-
|
|
25
|
-
private enum CodingKeys : String, CodingKey {
|
|
26
|
-
case direction = "d"
|
|
27
|
-
case position = "p"
|
|
28
|
-
case size = "s"
|
|
29
|
-
case cornerRadius = "r"
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
required init(from decoder: Decoder) throws {
|
|
33
|
-
let container = try decoder.container(keyedBy: Rectangle.CodingKeys.self)
|
|
34
|
-
self.direction = try container.decodeIfPresent(PathDirection.self, forKey: .direction) ?? .clockwise
|
|
35
|
-
self.position = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .position)
|
|
36
|
-
self.size = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .size)
|
|
37
|
-
self.cornerRadius = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .cornerRadius)
|
|
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(direction, forKey: .direction)
|
|
45
|
-
try container.encode(position, forKey: .position)
|
|
46
|
-
try container.encode(size, forKey: .size)
|
|
47
|
-
try container.encode(cornerRadius, forKey: .cornerRadius)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Repeater.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 Repeater: ShapeItem {
|
|
12
|
-
|
|
13
|
-
/// The number of copies to repeat
|
|
14
|
-
let copies: KeyframeGroup<Vector1D>
|
|
15
|
-
|
|
16
|
-
/// The offset of each copy
|
|
17
|
-
let offset: KeyframeGroup<Vector1D>
|
|
18
|
-
|
|
19
|
-
/// Start Opacity
|
|
20
|
-
let startOpacity: KeyframeGroup<Vector1D>
|
|
21
|
-
|
|
22
|
-
/// End opacity
|
|
23
|
-
let endOpacity: KeyframeGroup<Vector1D>
|
|
24
|
-
|
|
25
|
-
/// The rotation
|
|
26
|
-
let rotation: KeyframeGroup<Vector1D>
|
|
27
|
-
|
|
28
|
-
/// Anchor Point
|
|
29
|
-
let anchorPoint: KeyframeGroup<Vector3D>
|
|
30
|
-
|
|
31
|
-
/// Position
|
|
32
|
-
let position: KeyframeGroup<Vector3D>
|
|
33
|
-
|
|
34
|
-
/// Scale
|
|
35
|
-
let scale: KeyframeGroup<Vector3D>
|
|
36
|
-
|
|
37
|
-
private enum CodingKeys : String, CodingKey {
|
|
38
|
-
case copies = "c"
|
|
39
|
-
case offset = "o"
|
|
40
|
-
case transform = "tr"
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
private enum TransformKeys : String, CodingKey {
|
|
44
|
-
case rotation = "r"
|
|
45
|
-
case startOpacity = "so"
|
|
46
|
-
case endOpacity = "eo"
|
|
47
|
-
case anchorPoint = "a"
|
|
48
|
-
case position = "p"
|
|
49
|
-
case scale = "s"
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
required init(from decoder: Decoder) throws {
|
|
53
|
-
let container = try decoder.container(keyedBy: Repeater.CodingKeys.self)
|
|
54
|
-
self.copies = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .copies) ?? KeyframeGroup(Vector1D(0))
|
|
55
|
-
self.offset = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .offset) ?? KeyframeGroup(Vector1D(0))
|
|
56
|
-
let transformContainer = try container.nestedContainer(keyedBy: TransformKeys.self, forKey: .transform)
|
|
57
|
-
self.startOpacity = try transformContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .startOpacity) ?? KeyframeGroup(Vector1D(100))
|
|
58
|
-
self.endOpacity = try transformContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .endOpacity) ?? KeyframeGroup(Vector1D(100))
|
|
59
|
-
self.rotation = try transformContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .rotation) ?? KeyframeGroup(Vector1D(0))
|
|
60
|
-
self.position = try transformContainer.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .position) ?? KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
|
|
61
|
-
self.anchorPoint = try transformContainer.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .anchorPoint) ?? KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
|
|
62
|
-
self.scale = try transformContainer.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .scale) ?? KeyframeGroup(Vector3D(x: Double(100), y: 100, z: 100))
|
|
63
|
-
try super.init(from: decoder)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
override func encode(to encoder: Encoder) throws {
|
|
67
|
-
try super.encode(to: encoder)
|
|
68
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
69
|
-
try container.encode(copies, forKey: .copies)
|
|
70
|
-
try container.encode(offset, forKey: .offset)
|
|
71
|
-
var transformContainer = container.nestedContainer(keyedBy: TransformKeys.self, forKey: .transform)
|
|
72
|
-
try transformContainer.encode(startOpacity, forKey: .startOpacity)
|
|
73
|
-
try transformContainer.encode(endOpacity, forKey: .endOpacity)
|
|
74
|
-
try transformContainer.encode(rotation, forKey: .rotation)
|
|
75
|
-
try transformContainer.encode(position, forKey: .position)
|
|
76
|
-
try transformContainer.encode(anchorPoint, forKey: .anchorPoint)
|
|
77
|
-
try transformContainer.encode(scale, forKey: .scale)
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// VectorShape.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 Shape: ShapeItem {
|
|
12
|
-
|
|
13
|
-
/// The Path
|
|
14
|
-
let path: KeyframeGroup<BezierPath>
|
|
15
|
-
|
|
16
|
-
let direction: PathDirection?
|
|
17
|
-
|
|
18
|
-
private enum CodingKeys : String, CodingKey {
|
|
19
|
-
case path = "ks"
|
|
20
|
-
case direction = "d"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
required init(from decoder: Decoder) throws {
|
|
24
|
-
let container = try decoder.container(keyedBy: Shape.CodingKeys.self)
|
|
25
|
-
self.path = try container.decode(KeyframeGroup<BezierPath>.self, forKey: .path)
|
|
26
|
-
self.direction = try container.decodeIfPresent(PathDirection.self, forKey: .direction)
|
|
27
|
-
try super.init(from: decoder)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
override func encode(to encoder: Encoder) throws {
|
|
31
|
-
try super.encode(to: encoder)
|
|
32
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
33
|
-
try container.encode(path, forKey: .path)
|
|
34
|
-
try container.encodeIfPresent(direction, forKey: .direction)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// ShapeItem.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
/// Used for mapping a heterogeneous list to classes for parsing.
|
|
11
|
-
extension ShapeType: ClassFamily {
|
|
12
|
-
|
|
13
|
-
static var discriminator: Discriminator = .type
|
|
14
|
-
|
|
15
|
-
func getType() -> AnyObject.Type {
|
|
16
|
-
switch self {
|
|
17
|
-
case .ellipse:
|
|
18
|
-
return Ellipse.self
|
|
19
|
-
case .fill:
|
|
20
|
-
return Fill.self
|
|
21
|
-
case .gradientFill:
|
|
22
|
-
return GradientFill.self
|
|
23
|
-
case .group:
|
|
24
|
-
return Group.self
|
|
25
|
-
case .gradientStroke:
|
|
26
|
-
return GradientStroke.self
|
|
27
|
-
case .merge:
|
|
28
|
-
return Merge.self
|
|
29
|
-
case .rectangle:
|
|
30
|
-
return Rectangle.self
|
|
31
|
-
case .repeater:
|
|
32
|
-
return Repeater.self
|
|
33
|
-
case .shape:
|
|
34
|
-
return Shape.self
|
|
35
|
-
case .star:
|
|
36
|
-
return Star.self
|
|
37
|
-
case .stroke:
|
|
38
|
-
return Stroke.self
|
|
39
|
-
case .trim:
|
|
40
|
-
return Trim.self
|
|
41
|
-
case .transform:
|
|
42
|
-
return ShapeTransform.self
|
|
43
|
-
default:
|
|
44
|
-
return ShapeItem.self
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
enum ShapeType: String, Codable {
|
|
50
|
-
case ellipse = "el"
|
|
51
|
-
case fill = "fl"
|
|
52
|
-
case gradientFill = "gf"
|
|
53
|
-
case group = "gr"
|
|
54
|
-
case gradientStroke = "gs"
|
|
55
|
-
case merge = "mm"
|
|
56
|
-
case rectangle = "rc"
|
|
57
|
-
case repeater = "rp"
|
|
58
|
-
case round = "rd"
|
|
59
|
-
case shape = "sh"
|
|
60
|
-
case star = "sr"
|
|
61
|
-
case stroke = "st"
|
|
62
|
-
case trim = "tm"
|
|
63
|
-
case transform = "tr"
|
|
64
|
-
case unknown
|
|
65
|
-
|
|
66
|
-
public init(from decoder: Decoder) throws {
|
|
67
|
-
self = try ShapeType(rawValue: decoder.singleValueContainer().decode(RawValue.self)) ?? .unknown
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/// An item belonging to a Shape Layer
|
|
72
|
-
class ShapeItem: Codable {
|
|
73
|
-
|
|
74
|
-
/// The name of the shape
|
|
75
|
-
let name: String
|
|
76
|
-
|
|
77
|
-
/// The type of shape
|
|
78
|
-
let type: ShapeType
|
|
79
|
-
|
|
80
|
-
let hidden: Bool
|
|
81
|
-
|
|
82
|
-
private enum CodingKeys : String, CodingKey {
|
|
83
|
-
case name = "nm"
|
|
84
|
-
case type = "ty"
|
|
85
|
-
case hidden = "hd"
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
required init(from decoder: Decoder) throws {
|
|
89
|
-
let container = try decoder.container(keyedBy: ShapeItem.CodingKeys.self)
|
|
90
|
-
self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? "Layer"
|
|
91
|
-
self.type = try container.decode(ShapeType.self, forKey: .type)
|
|
92
|
-
self.hidden = try container.decodeIfPresent(Bool.self, forKey: .hidden) ?? false
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// TransformItem.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 ShapeTransform: ShapeItem {
|
|
12
|
-
|
|
13
|
-
/// Anchor Point
|
|
14
|
-
let anchor: KeyframeGroup<Vector3D>
|
|
15
|
-
|
|
16
|
-
/// Position
|
|
17
|
-
let position: KeyframeGroup<Vector3D>
|
|
18
|
-
|
|
19
|
-
/// Scale
|
|
20
|
-
let scale: KeyframeGroup<Vector3D>
|
|
21
|
-
|
|
22
|
-
/// Rotation
|
|
23
|
-
let rotation: KeyframeGroup<Vector1D>
|
|
24
|
-
|
|
25
|
-
/// opacity
|
|
26
|
-
let opacity: KeyframeGroup<Vector1D>
|
|
27
|
-
|
|
28
|
-
/// Skew
|
|
29
|
-
let skew: KeyframeGroup<Vector1D>
|
|
30
|
-
|
|
31
|
-
/// Skew Axis
|
|
32
|
-
let skewAxis: KeyframeGroup<Vector1D>
|
|
33
|
-
|
|
34
|
-
private enum CodingKeys : String, CodingKey {
|
|
35
|
-
case anchor = "a"
|
|
36
|
-
case position = "p"
|
|
37
|
-
case scale = "s"
|
|
38
|
-
case rotation = "r"
|
|
39
|
-
case opacity = "o"
|
|
40
|
-
case skew = "sk"
|
|
41
|
-
case skewAxis = "sa"
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
required init(from decoder: Decoder) throws {
|
|
45
|
-
let container = try decoder.container(keyedBy: ShapeTransform.CodingKeys.self)
|
|
46
|
-
self.anchor = try container.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .anchor) ?? KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
|
|
47
|
-
self.position = try container.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .position) ?? KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
|
|
48
|
-
self.scale = try container.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .scale) ?? KeyframeGroup(Vector3D(x: Double(100), y: 100, z: 100))
|
|
49
|
-
self.rotation = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .rotation) ?? KeyframeGroup(Vector1D(0))
|
|
50
|
-
self.opacity = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .opacity) ?? KeyframeGroup(Vector1D(100))
|
|
51
|
-
self.skew = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .skew) ?? KeyframeGroup(Vector1D(0))
|
|
52
|
-
self.skewAxis = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .skewAxis) ?? KeyframeGroup(Vector1D(0))
|
|
53
|
-
try super.init(from: decoder)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
override func encode(to encoder: Encoder) throws {
|
|
57
|
-
try super.encode(to: encoder)
|
|
58
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
59
|
-
try container.encode(anchor, forKey: .anchor)
|
|
60
|
-
try container.encode(position, forKey: .position)
|
|
61
|
-
try container.encode(scale, forKey: .scale)
|
|
62
|
-
try container.encode(rotation, forKey: .rotation)
|
|
63
|
-
try container.encode(opacity, forKey: .opacity)
|
|
64
|
-
try container.encode(skew, forKey: .skew)
|
|
65
|
-
try container.encode(skewAxis, forKey: .skewAxis)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Star.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum StarType: Int, Codable {
|
|
11
|
-
case none
|
|
12
|
-
case star
|
|
13
|
-
case polygon
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/// An item that define an ellipse shape
|
|
17
|
-
final class Star: ShapeItem {
|
|
18
|
-
|
|
19
|
-
/// The direction of the star.
|
|
20
|
-
let direction: PathDirection
|
|
21
|
-
|
|
22
|
-
/// The position of the star
|
|
23
|
-
let position: KeyframeGroup<Vector3D>
|
|
24
|
-
|
|
25
|
-
/// The outer radius of the star
|
|
26
|
-
let outerRadius: KeyframeGroup<Vector1D>
|
|
27
|
-
|
|
28
|
-
/// The outer roundness of the star
|
|
29
|
-
let outerRoundness: KeyframeGroup<Vector1D>
|
|
30
|
-
|
|
31
|
-
/// The outer radius of the star
|
|
32
|
-
let innerRadius: KeyframeGroup<Vector1D>?
|
|
33
|
-
|
|
34
|
-
/// The outer roundness of the star
|
|
35
|
-
let innerRoundness: KeyframeGroup<Vector1D>?
|
|
36
|
-
|
|
37
|
-
/// The rotation of the star
|
|
38
|
-
let rotation: KeyframeGroup<Vector1D>
|
|
39
|
-
|
|
40
|
-
/// The number of points on the star
|
|
41
|
-
let points: KeyframeGroup<Vector1D>
|
|
42
|
-
|
|
43
|
-
/// The type of star
|
|
44
|
-
let starType: StarType
|
|
45
|
-
|
|
46
|
-
private enum CodingKeys : String, CodingKey {
|
|
47
|
-
case direction = "d"
|
|
48
|
-
case position = "p"
|
|
49
|
-
case outerRadius = "or"
|
|
50
|
-
case outerRoundness = "os"
|
|
51
|
-
case innerRadius = "ir"
|
|
52
|
-
case innerRoundness = "is"
|
|
53
|
-
case rotation = "r"
|
|
54
|
-
case points = "pt"
|
|
55
|
-
case starType = "sy"
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
required init(from decoder: Decoder) throws {
|
|
59
|
-
let container = try decoder.container(keyedBy: Star.CodingKeys.self)
|
|
60
|
-
self.direction = try container.decodeIfPresent(PathDirection.self, forKey: .direction) ?? .clockwise
|
|
61
|
-
self.position = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .position)
|
|
62
|
-
self.outerRadius = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .outerRadius)
|
|
63
|
-
self.outerRoundness = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .outerRoundness)
|
|
64
|
-
self.innerRadius = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .innerRadius)
|
|
65
|
-
self.innerRoundness = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .innerRoundness)
|
|
66
|
-
self.rotation = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .rotation)
|
|
67
|
-
self.points = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .points)
|
|
68
|
-
self.starType = try container.decode(StarType.self, forKey: .starType)
|
|
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(direction, forKey: .direction)
|
|
76
|
-
try container.encode(position, forKey: .position)
|
|
77
|
-
try container.encode(outerRadius, forKey: .outerRadius)
|
|
78
|
-
try container.encode(outerRoundness, forKey: .outerRoundness)
|
|
79
|
-
try container.encode(innerRadius, forKey: .innerRadius)
|
|
80
|
-
try container.encode(innerRoundness, forKey: .innerRoundness)
|
|
81
|
-
try container.encode(rotation, forKey: .rotation)
|
|
82
|
-
try container.encode(points, forKey: .points)
|
|
83
|
-
try container.encode(starType, forKey: .starType)
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Stroke.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 Stroke: ShapeItem {
|
|
12
|
-
|
|
13
|
-
/// The opacity of the stroke
|
|
14
|
-
let opacity: KeyframeGroup<Vector1D>
|
|
15
|
-
|
|
16
|
-
/// The Color of the stroke
|
|
17
|
-
let color: KeyframeGroup<Color>
|
|
18
|
-
|
|
19
|
-
/// The width of the stroke
|
|
20
|
-
let width: KeyframeGroup<Vector1D>
|
|
21
|
-
|
|
22
|
-
/// Line Cap
|
|
23
|
-
let lineCap: LineCap
|
|
24
|
-
|
|
25
|
-
/// Line Join
|
|
26
|
-
let lineJoin: LineJoin
|
|
27
|
-
|
|
28
|
-
/// Miter Limit
|
|
29
|
-
let miterLimit: Double
|
|
30
|
-
|
|
31
|
-
/// The dash pattern of the stroke
|
|
32
|
-
let dashPattern: [DashElement]?
|
|
33
|
-
|
|
34
|
-
private enum CodingKeys : String, CodingKey {
|
|
35
|
-
case opacity = "o"
|
|
36
|
-
case color = "c"
|
|
37
|
-
case width = "w"
|
|
38
|
-
case lineCap = "lc"
|
|
39
|
-
case lineJoin = "lj"
|
|
40
|
-
case miterLimit = "ml"
|
|
41
|
-
case dashPattern = "d"
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
required init(from decoder: Decoder) throws {
|
|
45
|
-
let container = try decoder.container(keyedBy: Stroke.CodingKeys.self)
|
|
46
|
-
self.opacity = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .opacity)
|
|
47
|
-
self.color = try container.decode(KeyframeGroup<Color>.self, forKey: .color)
|
|
48
|
-
self.width = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .width)
|
|
49
|
-
self.lineCap = try container.decodeIfPresent(LineCap.self, forKey: .lineCap) ?? .round
|
|
50
|
-
self.lineJoin = try container.decodeIfPresent(LineJoin.self, forKey: .lineJoin) ?? .round
|
|
51
|
-
self.miterLimit = try container.decodeIfPresent(Double.self, forKey: .miterLimit) ?? 4
|
|
52
|
-
self.dashPattern = try container.decodeIfPresent([DashElement].self, forKey: .dashPattern)
|
|
53
|
-
try super.init(from: decoder)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
override func encode(to encoder: Encoder) throws {
|
|
57
|
-
try super.encode(to: encoder)
|
|
58
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
59
|
-
try container.encode(opacity, forKey: .opacity)
|
|
60
|
-
try container.encode(color, forKey: .color)
|
|
61
|
-
try container.encode(width, forKey: .width)
|
|
62
|
-
try container.encode(lineCap, forKey: .lineCap)
|
|
63
|
-
try container.encode(lineJoin, forKey: .lineJoin)
|
|
64
|
-
try container.encode(miterLimit, forKey: .miterLimit)
|
|
65
|
-
try container.encodeIfPresent(dashPattern, forKey: .dashPattern)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Trim.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/8/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
enum TrimType: Int, Codable {
|
|
11
|
-
case simultaneously = 1
|
|
12
|
-
case individually = 2
|
|
13
|
-
}
|
|
14
|
-
/// An item that define an ellipse shape
|
|
15
|
-
final class Trim: ShapeItem {
|
|
16
|
-
|
|
17
|
-
/// The start of the trim
|
|
18
|
-
let start: KeyframeGroup<Vector1D>
|
|
19
|
-
|
|
20
|
-
/// The end of the trim
|
|
21
|
-
let end: KeyframeGroup<Vector1D>
|
|
22
|
-
|
|
23
|
-
/// The offset of the trim
|
|
24
|
-
let offset: KeyframeGroup<Vector1D>
|
|
25
|
-
|
|
26
|
-
let trimType: TrimType
|
|
27
|
-
|
|
28
|
-
private enum CodingKeys : String, CodingKey {
|
|
29
|
-
case start = "s"
|
|
30
|
-
case end = "e"
|
|
31
|
-
case offset = "o"
|
|
32
|
-
case trimType = "m"
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
required init(from decoder: Decoder) throws {
|
|
36
|
-
let container = try decoder.container(keyedBy: Trim.CodingKeys.self)
|
|
37
|
-
self.start = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .start)
|
|
38
|
-
self.end = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .end)
|
|
39
|
-
self.offset = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .offset)
|
|
40
|
-
self.trimType = try container.decode(TrimType.self, forKey: .trimType)
|
|
41
|
-
try super.init(from: decoder)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
override func encode(to encoder: Encoder) throws {
|
|
45
|
-
try super.encode(to: encoder)
|
|
46
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
47
|
-
try container.encode(start, forKey: .start)
|
|
48
|
-
try container.encode(end, forKey: .end)
|
|
49
|
-
try container.encode(offset, forKey: .offset)
|
|
50
|
-
try container.encode(trimType, forKey: .trimType)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Font.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/9/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
final class Font: Codable {
|
|
11
|
-
|
|
12
|
-
let name: String
|
|
13
|
-
let familyName: String
|
|
14
|
-
let style: String
|
|
15
|
-
let ascent: Double
|
|
16
|
-
|
|
17
|
-
private enum CodingKeys: String, CodingKey {
|
|
18
|
-
case name = "fName"
|
|
19
|
-
case familyName = "fFamily"
|
|
20
|
-
case style = "fStyle"
|
|
21
|
-
case ascent = "ascent"
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/// A list of fonts
|
|
27
|
-
final class FontList: Codable {
|
|
28
|
-
|
|
29
|
-
let fonts: [Font]
|
|
30
|
-
|
|
31
|
-
enum CodingKeys : String, CodingKey {
|
|
32
|
-
case fonts = "list"
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// TextAnimator.swift
|
|
3
|
-
// lottie-swift
|
|
4
|
-
//
|
|
5
|
-
// Created by Brandon Withrow on 1/9/19.
|
|
6
|
-
//
|
|
7
|
-
|
|
8
|
-
import Foundation
|
|
9
|
-
|
|
10
|
-
final class TextAnimator: Codable {
|
|
11
|
-
|
|
12
|
-
let name: String
|
|
13
|
-
|
|
14
|
-
/// Anchor
|
|
15
|
-
let anchor: KeyframeGroup<Vector3D>?
|
|
16
|
-
|
|
17
|
-
/// Position
|
|
18
|
-
let position: KeyframeGroup<Vector3D>?
|
|
19
|
-
|
|
20
|
-
/// Scale
|
|
21
|
-
let scale: KeyframeGroup<Vector3D>?
|
|
22
|
-
|
|
23
|
-
/// Skew
|
|
24
|
-
let skew: KeyframeGroup<Vector1D>?
|
|
25
|
-
|
|
26
|
-
/// Skew Axis
|
|
27
|
-
let skewAxis: KeyframeGroup<Vector1D>?
|
|
28
|
-
|
|
29
|
-
/// Rotation
|
|
30
|
-
let rotation: KeyframeGroup<Vector1D>?
|
|
31
|
-
|
|
32
|
-
/// Opacity
|
|
33
|
-
let opacity: KeyframeGroup<Vector1D>?
|
|
34
|
-
|
|
35
|
-
/// Stroke Color
|
|
36
|
-
let strokeColor: KeyframeGroup<Color>?
|
|
37
|
-
|
|
38
|
-
/// Fill Color
|
|
39
|
-
let fillColor: KeyframeGroup<Color>?
|
|
40
|
-
|
|
41
|
-
/// Stroke Width
|
|
42
|
-
let strokeWidth: KeyframeGroup<Vector1D>?
|
|
43
|
-
|
|
44
|
-
/// Tracking
|
|
45
|
-
let tracking: KeyframeGroup<Vector1D>?
|
|
46
|
-
|
|
47
|
-
private enum CodingKeys: String, CodingKey {
|
|
48
|
-
// case textSelector = "s" TODO
|
|
49
|
-
case textAnimator = "a"
|
|
50
|
-
case name = "nm"
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
private enum TextSelectorKeys: String, CodingKey {
|
|
54
|
-
case start = "s"
|
|
55
|
-
case end = "e"
|
|
56
|
-
case offset = "o"
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
private enum TextAnimatorKeys: String, CodingKey {
|
|
60
|
-
case fillColor = "fc"
|
|
61
|
-
case strokeColor = "sc"
|
|
62
|
-
case strokeWidth = "sw"
|
|
63
|
-
case tracking = "t"
|
|
64
|
-
case anchor = "a"
|
|
65
|
-
case position = "p"
|
|
66
|
-
case scale = "s"
|
|
67
|
-
case skew = "sk"
|
|
68
|
-
case skewAxis = "sa"
|
|
69
|
-
case rotation = "r"
|
|
70
|
-
case opacity = "o"
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
required init(from decoder: Decoder) throws {
|
|
74
|
-
let container = try decoder.container(keyedBy: TextAnimator.CodingKeys.self)
|
|
75
|
-
self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? ""
|
|
76
|
-
let animatorContainer = try container.nestedContainer(keyedBy: TextAnimatorKeys.self, forKey: .textAnimator)
|
|
77
|
-
self.fillColor = try animatorContainer.decodeIfPresent(KeyframeGroup<Color>.self, forKey: .fillColor)
|
|
78
|
-
self.strokeColor = try animatorContainer.decodeIfPresent(KeyframeGroup<Color>.self, forKey: .strokeColor)
|
|
79
|
-
self.strokeWidth = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .strokeWidth)
|
|
80
|
-
self.tracking = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .tracking)
|
|
81
|
-
self.anchor = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .anchor)
|
|
82
|
-
self.position = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .position)
|
|
83
|
-
self.scale = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .scale)
|
|
84
|
-
self.skew = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .skew)
|
|
85
|
-
self.skewAxis = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .skewAxis)
|
|
86
|
-
self.rotation = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .rotation)
|
|
87
|
-
self.opacity = try animatorContainer.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .opacity)
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
func encode(to encoder: Encoder) throws {
|
|
92
|
-
var container = encoder.container(keyedBy: CodingKeys.self)
|
|
93
|
-
var animatorContainer = container.nestedContainer(keyedBy: TextAnimatorKeys.self, forKey: .textAnimator)
|
|
94
|
-
try animatorContainer.encodeIfPresent(fillColor, forKey: .fillColor)
|
|
95
|
-
try animatorContainer.encodeIfPresent(strokeColor, forKey: .strokeColor)
|
|
96
|
-
try animatorContainer.encodeIfPresent(strokeWidth, forKey: .strokeWidth)
|
|
97
|
-
try animatorContainer.encodeIfPresent(tracking, forKey: .tracking)
|
|
98
|
-
}
|
|
99
|
-
}
|