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
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
//
|
|
2
|
+
// TextDocument.swift
|
|
3
|
+
// lottie-swift
|
|
4
|
+
//
|
|
5
|
+
// Created by Brandon Withrow on 1/9/19.
|
|
6
|
+
//
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
|
|
10
|
+
// MARK: - TextJustification
|
|
11
|
+
|
|
12
|
+
enum TextJustification: Int, Codable {
|
|
13
|
+
case left
|
|
14
|
+
case right
|
|
15
|
+
case center
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// MARK: - TextDocument
|
|
19
|
+
|
|
20
|
+
final class TextDocument: Codable, DictionaryInitializable, AnyInitializable {
|
|
21
|
+
|
|
22
|
+
// MARK: Lifecycle
|
|
23
|
+
|
|
24
|
+
init(dictionary: [String: Any]) throws {
|
|
25
|
+
text = try dictionary.value(for: CodingKeys.text)
|
|
26
|
+
fontSize = try dictionary.value(for: CodingKeys.fontSize)
|
|
27
|
+
fontFamily = try dictionary.value(for: CodingKeys.fontFamily)
|
|
28
|
+
let justificationValue: Int = try dictionary.value(for: CodingKeys.justification)
|
|
29
|
+
guard let justification = TextJustification(rawValue: justificationValue) else {
|
|
30
|
+
throw InitializableError.invalidInput
|
|
31
|
+
}
|
|
32
|
+
self.justification = justification
|
|
33
|
+
tracking = try dictionary.value(for: CodingKeys.tracking)
|
|
34
|
+
lineHeight = try dictionary.value(for: CodingKeys.lineHeight)
|
|
35
|
+
baseline = try dictionary.value(for: CodingKeys.baseline)
|
|
36
|
+
if let fillColorRawValue = dictionary[CodingKeys.fillColorData.rawValue] {
|
|
37
|
+
fillColorData = try? Color(value: fillColorRawValue)
|
|
38
|
+
} else {
|
|
39
|
+
fillColorData = nil
|
|
40
|
+
}
|
|
41
|
+
if let strokeColorRawValue = dictionary[CodingKeys.strokeColorData.rawValue] {
|
|
42
|
+
strokeColorData = try? Color(value: strokeColorRawValue)
|
|
43
|
+
} else {
|
|
44
|
+
strokeColorData = nil
|
|
45
|
+
}
|
|
46
|
+
strokeWidth = try? dictionary.value(for: CodingKeys.strokeWidth)
|
|
47
|
+
strokeOverFill = try? dictionary.value(for: CodingKeys.strokeOverFill)
|
|
48
|
+
if let textFramePositionRawValue = dictionary[CodingKeys.textFramePosition.rawValue] {
|
|
49
|
+
textFramePosition = try? Vector3D(value: textFramePositionRawValue)
|
|
50
|
+
} else {
|
|
51
|
+
textFramePosition = nil
|
|
52
|
+
}
|
|
53
|
+
if let textFrameSizeRawValue = dictionary[CodingKeys.textFrameSize.rawValue] {
|
|
54
|
+
textFrameSize = try? Vector3D(value: textFrameSizeRawValue)
|
|
55
|
+
} else {
|
|
56
|
+
textFrameSize = nil
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
convenience init(value: Any) throws {
|
|
61
|
+
guard let dictionary = value as? [String: Any] else {
|
|
62
|
+
throw InitializableError.invalidInput
|
|
63
|
+
}
|
|
64
|
+
try self.init(dictionary: dictionary)
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// MARK: Internal
|
|
68
|
+
|
|
69
|
+
/// The Text
|
|
70
|
+
let text: String
|
|
71
|
+
|
|
72
|
+
/// The Font size
|
|
73
|
+
let fontSize: Double
|
|
74
|
+
|
|
75
|
+
/// The Font Family
|
|
76
|
+
let fontFamily: String
|
|
77
|
+
|
|
78
|
+
/// Justification
|
|
79
|
+
let justification: TextJustification
|
|
80
|
+
|
|
81
|
+
/// Tracking
|
|
82
|
+
let tracking: Int
|
|
83
|
+
|
|
84
|
+
/// Line Height
|
|
85
|
+
let lineHeight: Double
|
|
86
|
+
|
|
87
|
+
/// Baseline
|
|
88
|
+
let baseline: Double?
|
|
89
|
+
|
|
90
|
+
/// Fill Color data
|
|
91
|
+
let fillColorData: Color?
|
|
92
|
+
|
|
93
|
+
/// Scroke Color data
|
|
94
|
+
let strokeColorData: Color?
|
|
95
|
+
|
|
96
|
+
/// Stroke Width
|
|
97
|
+
let strokeWidth: Double?
|
|
98
|
+
|
|
99
|
+
/// Stroke Over Fill
|
|
100
|
+
let strokeOverFill: Bool?
|
|
101
|
+
|
|
102
|
+
let textFramePosition: Vector3D?
|
|
103
|
+
|
|
104
|
+
let textFrameSize: Vector3D?
|
|
105
|
+
|
|
106
|
+
// MARK: Private
|
|
107
|
+
|
|
108
|
+
private enum CodingKeys: String, CodingKey {
|
|
109
|
+
case text = "t"
|
|
110
|
+
case fontSize = "s"
|
|
111
|
+
case fontFamily = "f"
|
|
112
|
+
case justification = "j"
|
|
113
|
+
case tracking = "tr"
|
|
114
|
+
case lineHeight = "lh"
|
|
115
|
+
case baseline = "ls"
|
|
116
|
+
case fillColorData = "fc"
|
|
117
|
+
case strokeColorData = "sc"
|
|
118
|
+
case strokeWidth = "sw"
|
|
119
|
+
case strokeOverFill = "of"
|
|
120
|
+
case textFramePosition = "ps"
|
|
121
|
+
case textFrameSize = "sz"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Created by Cal Stephens on 12/13/21.
|
|
2
|
+
// Copyright © 2021 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
import QuartzCore
|
|
5
|
+
|
|
6
|
+
// MARK: - RootAnimationLayer
|
|
7
|
+
|
|
8
|
+
/// A root `CALayer` responsible for playing a Lottie animation
|
|
9
|
+
protocol RootAnimationLayer: CALayer {
|
|
10
|
+
var currentFrame: AnimationFrameTime { get set }
|
|
11
|
+
var renderScale: CGFloat { get set }
|
|
12
|
+
var respectAnimationFrameRate: Bool { get set }
|
|
13
|
+
|
|
14
|
+
var _animationLayers: [CALayer] { get }
|
|
15
|
+
var imageProvider: AnimationImageProvider { get set }
|
|
16
|
+
var textProvider: AnimationTextProvider { get set }
|
|
17
|
+
var fontProvider: AnimationFontProvider { get set }
|
|
18
|
+
|
|
19
|
+
/// The `CAAnimation` key corresponding to the primary animation.
|
|
20
|
+
/// - `AnimationView` uses this key to check if the animation is still active
|
|
21
|
+
var primaryAnimationKey: AnimationKey { get }
|
|
22
|
+
|
|
23
|
+
/// Whether or not this layer is currently playing an animation
|
|
24
|
+
/// - If the layer returns `nil`, `AnimationView` determines if an animation
|
|
25
|
+
/// is playing by checking if there is an active animation for `primaryAnimationKey`
|
|
26
|
+
var isAnimationPlaying: Bool? { get }
|
|
27
|
+
|
|
28
|
+
/// Instructs this layer to remove all `CAAnimation`s,
|
|
29
|
+
/// other than the `CAAnimation` managed by `AnimationView` (if applicable)
|
|
30
|
+
func removeAnimations()
|
|
31
|
+
|
|
32
|
+
func reloadImages()
|
|
33
|
+
func forceDisplayUpdate()
|
|
34
|
+
func logHierarchyKeypaths()
|
|
35
|
+
|
|
36
|
+
func setValueProvider(_ valueProvider: AnyValueProvider, keypath: AnimationKeypath)
|
|
37
|
+
func getValue(for keypath: AnimationKeypath, atFrame: AnimationFrameTime?) -> Any?
|
|
38
|
+
func getOriginalValue(for keypath: AnimationKeypath, atFrame: AnimationFrameTime?) -> Any?
|
|
39
|
+
|
|
40
|
+
func layer(for keypath: AnimationKeypath) -> CALayer?
|
|
41
|
+
func animatorNodes(for keypath: AnimationKeypath) -> [AnimatorNode]?
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// MARK: - AnimationKey
|
|
45
|
+
|
|
46
|
+
enum AnimationKey {
|
|
47
|
+
/// The primary animation and its key should be managed by `AnimationView`
|
|
48
|
+
case managed
|
|
49
|
+
/// The primary animation always uses the given key
|
|
50
|
+
case specific(String)
|
|
51
|
+
}
|
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
import Foundation
|
|
9
9
|
|
|
10
10
|
extension AnimatorNode {
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
func printNodeTree() {
|
|
13
13
|
parentNode?.printNodeTree()
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
LottieLogger.shared.info(String(describing: type(of: self)))
|
|
15
|
+
|
|
16
16
|
if let group = self as? GroupNode {
|
|
17
|
-
|
|
17
|
+
LottieLogger.shared.info("* |Children")
|
|
18
18
|
group.rootNode?.printNodeTree()
|
|
19
|
-
|
|
19
|
+
LottieLogger.shared.info("*")
|
|
20
20
|
} else {
|
|
21
|
-
|
|
21
|
+
LottieLogger.shared.info("|")
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
}
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
import Foundation
|
|
9
9
|
import QuartzCore
|
|
10
10
|
|
|
11
|
+
// MARK: - LayerDebugStyle
|
|
12
|
+
|
|
11
13
|
struct LayerDebugStyle {
|
|
12
14
|
let anchorColor: CGColor
|
|
13
15
|
let boundsColor: CGColor
|
|
@@ -15,14 +17,20 @@ struct LayerDebugStyle {
|
|
|
15
17
|
let boundsWidth: CGFloat
|
|
16
18
|
}
|
|
17
19
|
|
|
20
|
+
// MARK: - LayerDebugging
|
|
21
|
+
|
|
18
22
|
protocol LayerDebugging {
|
|
19
23
|
var debugStyle: LayerDebugStyle { get }
|
|
20
24
|
}
|
|
21
25
|
|
|
26
|
+
// MARK: - CustomLayerDebugging
|
|
27
|
+
|
|
22
28
|
protocol CustomLayerDebugging {
|
|
23
29
|
func layerForDebugging() -> CALayer
|
|
24
30
|
}
|
|
25
31
|
|
|
32
|
+
// MARK: - DebugLayer
|
|
33
|
+
|
|
26
34
|
class DebugLayer: CALayer {
|
|
27
35
|
init(style: LayerDebugStyle) {
|
|
28
36
|
super.init()
|
|
@@ -30,45 +38,48 @@ class DebugLayer: CALayer {
|
|
|
30
38
|
bounds = CGRect(x: 0, y: 0, width: style.anchorWidth, height: style.anchorWidth)
|
|
31
39
|
backgroundColor = style.anchorColor
|
|
32
40
|
}
|
|
33
|
-
|
|
34
|
-
required init?(coder
|
|
41
|
+
|
|
42
|
+
required init?(coder _: NSCoder) {
|
|
35
43
|
fatalError("init(coder:) has not been implemented")
|
|
36
44
|
}
|
|
37
45
|
}
|
|
38
46
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
47
|
+
extension CALayer {
|
|
48
|
+
|
|
49
|
+
@nonobjc
|
|
50
|
+
public func logLayerTree(withIndent: Int = 0) {
|
|
42
51
|
var string = ""
|
|
43
52
|
for _ in 0...withIndent {
|
|
44
53
|
string = string + " "
|
|
45
54
|
}
|
|
46
55
|
string = string + "|_" + String(describing: self)
|
|
47
|
-
|
|
56
|
+
LottieLogger.shared.info(string)
|
|
48
57
|
if let sublayers = sublayers {
|
|
49
58
|
for sublayer in sublayers {
|
|
50
59
|
sublayer.logLayerTree(withIndent: withIndent + 1)
|
|
51
60
|
}
|
|
52
61
|
}
|
|
53
62
|
}
|
|
54
|
-
|
|
63
|
+
|
|
55
64
|
}
|
|
56
65
|
|
|
66
|
+
// MARK: - CompositionLayer + CustomLayerDebugging
|
|
67
|
+
|
|
57
68
|
extension CompositionLayer: CustomLayerDebugging {
|
|
58
69
|
func layerForDebugging() -> CALayer {
|
|
59
|
-
|
|
70
|
+
contentsLayer
|
|
60
71
|
}
|
|
61
72
|
}
|
|
62
73
|
|
|
63
74
|
extension CALayer {
|
|
64
75
|
|
|
76
|
+
@nonobjc
|
|
65
77
|
func setDebuggingState(visible: Bool) {
|
|
66
|
-
|
|
67
78
|
var sublayers = self.sublayers
|
|
68
79
|
if let cust = self as? CustomLayerDebugging {
|
|
69
80
|
sublayers = cust.layerForDebugging().sublayers
|
|
70
81
|
}
|
|
71
|
-
|
|
82
|
+
|
|
72
83
|
if let sublayers = sublayers {
|
|
73
84
|
for i in 0..<sublayers.count {
|
|
74
85
|
if let debugLayer = sublayers[i] as? DebugLayer {
|
|
@@ -77,11 +88,11 @@ extension CALayer {
|
|
|
77
88
|
}
|
|
78
89
|
}
|
|
79
90
|
}
|
|
80
|
-
|
|
91
|
+
|
|
81
92
|
if let sublayers = sublayers {
|
|
82
93
|
sublayers.forEach({ $0.setDebuggingState(visible: visible) })
|
|
83
94
|
}
|
|
84
|
-
|
|
95
|
+
|
|
85
96
|
if visible {
|
|
86
97
|
let style: LayerDebugStyle
|
|
87
98
|
if let layerDebugging = self as? LayerDebugging {
|
|
@@ -105,89 +116,102 @@ extension CALayer {
|
|
|
105
116
|
}
|
|
106
117
|
}
|
|
107
118
|
|
|
108
|
-
|
|
119
|
+
// MARK: - MainThreadAnimationLayer + LayerDebugging
|
|
120
|
+
|
|
121
|
+
extension MainThreadAnimationLayer: LayerDebugging {
|
|
109
122
|
var debugStyle: LayerDebugStyle {
|
|
110
|
-
|
|
123
|
+
LayerDebugStyle.topLayerStyle()
|
|
111
124
|
}
|
|
112
125
|
}
|
|
113
126
|
|
|
127
|
+
// MARK: - NullCompositionLayer + LayerDebugging
|
|
128
|
+
|
|
114
129
|
extension NullCompositionLayer: LayerDebugging {
|
|
115
130
|
var debugStyle: LayerDebugStyle {
|
|
116
|
-
|
|
131
|
+
LayerDebugStyle.nullLayerStyle()
|
|
117
132
|
}
|
|
118
133
|
}
|
|
119
134
|
|
|
135
|
+
// MARK: - ShapeCompositionLayer + LayerDebugging
|
|
136
|
+
|
|
120
137
|
extension ShapeCompositionLayer: LayerDebugging {
|
|
121
138
|
var debugStyle: LayerDebugStyle {
|
|
122
|
-
|
|
139
|
+
LayerDebugStyle.shapeLayerStyle()
|
|
123
140
|
}
|
|
124
141
|
}
|
|
125
142
|
|
|
143
|
+
// MARK: - ShapeRenderLayer + LayerDebugging
|
|
144
|
+
|
|
126
145
|
extension ShapeRenderLayer: LayerDebugging {
|
|
127
146
|
var debugStyle: LayerDebugStyle {
|
|
128
|
-
|
|
147
|
+
LayerDebugStyle.shapeRenderLayerStyle()
|
|
129
148
|
}
|
|
130
149
|
}
|
|
131
150
|
|
|
132
151
|
extension LayerDebugStyle {
|
|
133
152
|
static func defaultStyle() -> LayerDebugStyle {
|
|
134
153
|
let colorSpace = CGColorSpaceCreateDeviceRGB()
|
|
135
|
-
|
|
154
|
+
|
|
136
155
|
let anchorColor = CGColor(colorSpace: colorSpace, components: [1, 0, 0, 1])!
|
|
137
156
|
let boundsColor = CGColor(colorSpace: colorSpace, components: [1, 1, 0, 1])!
|
|
138
|
-
return LayerDebugStyle(
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
157
|
+
return LayerDebugStyle(
|
|
158
|
+
anchorColor: anchorColor,
|
|
159
|
+
boundsColor: boundsColor,
|
|
160
|
+
anchorWidth: 10,
|
|
161
|
+
boundsWidth: 2)
|
|
142
162
|
}
|
|
143
|
-
|
|
163
|
+
|
|
144
164
|
static func topLayerStyle() -> LayerDebugStyle {
|
|
145
165
|
let colorSpace = CGColorSpaceCreateDeviceRGB()
|
|
146
166
|
let anchorColor = CGColor(colorSpace: colorSpace, components: [1, 0.5, 0, 0])!
|
|
147
167
|
let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
|
|
148
|
-
|
|
149
|
-
return LayerDebugStyle(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
168
|
+
|
|
169
|
+
return LayerDebugStyle(
|
|
170
|
+
anchorColor: anchorColor,
|
|
171
|
+
boundsColor: boundsColor,
|
|
172
|
+
anchorWidth: 10,
|
|
173
|
+
boundsWidth: 2)
|
|
153
174
|
}
|
|
154
|
-
|
|
175
|
+
|
|
155
176
|
static func nullLayerStyle() -> LayerDebugStyle {
|
|
156
177
|
let colorSpace = CGColorSpaceCreateDeviceRGB()
|
|
157
178
|
let anchorColor = CGColor(colorSpace: colorSpace, components: [0, 0, 1, 0])!
|
|
158
179
|
let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
|
|
159
|
-
|
|
160
|
-
return LayerDebugStyle(
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
180
|
+
|
|
181
|
+
return LayerDebugStyle(
|
|
182
|
+
anchorColor: anchorColor,
|
|
183
|
+
boundsColor: boundsColor,
|
|
184
|
+
anchorWidth: 10,
|
|
185
|
+
boundsWidth: 2)
|
|
164
186
|
}
|
|
165
|
-
|
|
187
|
+
|
|
166
188
|
static func shapeLayerStyle() -> LayerDebugStyle {
|
|
167
189
|
let colorSpace = CGColorSpaceCreateDeviceRGB()
|
|
168
190
|
let anchorColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 0])!
|
|
169
191
|
let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
|
|
170
|
-
|
|
171
|
-
return LayerDebugStyle(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
192
|
+
|
|
193
|
+
return LayerDebugStyle(
|
|
194
|
+
anchorColor: anchorColor,
|
|
195
|
+
boundsColor: boundsColor,
|
|
196
|
+
anchorWidth: 10,
|
|
197
|
+
boundsWidth: 2)
|
|
175
198
|
}
|
|
176
|
-
|
|
199
|
+
|
|
177
200
|
static func shapeRenderLayerStyle() -> LayerDebugStyle {
|
|
178
201
|
let colorSpace = CGColorSpaceCreateDeviceRGB()
|
|
179
202
|
let anchorColor = CGColor(colorSpace: colorSpace, components: [0, 1, 1, 0])!
|
|
180
203
|
let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
|
|
181
|
-
|
|
182
|
-
return LayerDebugStyle(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
204
|
+
|
|
205
|
+
return LayerDebugStyle(
|
|
206
|
+
anchorColor: anchorColor,
|
|
207
|
+
boundsColor: boundsColor,
|
|
208
|
+
anchorWidth: 10,
|
|
209
|
+
boundsWidth: 2)
|
|
186
210
|
}
|
|
187
211
|
}
|
|
188
212
|
|
|
189
213
|
extension Array where Element == LayerModel {
|
|
190
|
-
|
|
214
|
+
|
|
191
215
|
var parents: [Int] {
|
|
192
216
|
var array = [Int]()
|
|
193
217
|
for layer in self {
|
|
@@ -199,5 +223,5 @@ extension Array where Element == LayerModel {
|
|
|
199
223
|
}
|
|
200
224
|
return array
|
|
201
225
|
}
|
|
202
|
-
|
|
226
|
+
|
|
203
227
|
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Created by Cal Stephens on 1/28/22.
|
|
2
|
+
// Copyright © 2022 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
enum TestHelpers {
|
|
5
|
+
/// Whether or not snapshot tests are currently running in a test target
|
|
6
|
+
static var snapshotTestsAreRunning = false
|
|
7
|
+
|
|
8
|
+
/// Whether or not performance tests are currently running in a test target
|
|
9
|
+
static var performanceTestsAreRunning = false
|
|
10
|
+
}
|