From a0fe9700ab01e18aa65930de9361383a7c0c27cf Mon Sep 17 00:00:00 2001 From: Cal Stephens <cal.stephens@airbnb.com> Date: Tue, 12 Sep 2023 10:46:29 -0700 Subject: [PATCH] Add support for customizing stroke width values --- .../CoreAnimation/Animations/LayerProperty.swift | 12 +++++++++++- .../Nodes/RenderNodes/GradientStrokeNode.swift | 2 +- .../Nodes/RenderNodes/StrokeNode.swift | 2 +- .../Nodes/Text/TextAnimatorNode.swift | 2 +- Tests/Samples/Issues/issue_2094.json | 1 + Tests/SnapshotConfiguration.swift | 4 ++++ ...ionEngineKeypathLogging.Issues-issue_1664.txt | 6 ++++++ ...tCoreAnimationEngineKeypathLogging.Switch.txt | 3 +++ ...utomaticEngineDetection.Issues-issue_2094.txt | 1 + ...mationRenderingEngine.Issues-issue_2094-0.png | Bin 0 -> 1772 bytes ...tionRenderingEngine.Issues-issue_2094-100.png | Bin 0 -> 1774 bytes ...ationRenderingEngine.Issues-issue_2094-25.png | Bin 0 -> 2930 bytes ...ationRenderingEngine.Issues-issue_2094-50.png | Bin 0 -> 3346 bytes ...ationRenderingEngine.Issues-issue_2094-75.png | Bin 0 -> 2947 bytes ...ThreadRenderingEngine.Issues-issue_2094-0.png | Bin 0 -> 1772 bytes ...readRenderingEngine.Issues-issue_2094-100.png | Bin 0 -> 1774 bytes ...hreadRenderingEngine.Issues-issue_2094-25.png | Bin 0 -> 2901 bytes ...hreadRenderingEngine.Issues-issue_2094-50.png | Bin 0 -> 3334 bytes ...hreadRenderingEngine.Issues-issue_2094-75.png | Bin 0 -> 2908 bytes 19 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 Tests/Samples/Issues/issue_2094.json create mode 100644 Tests/__Snapshots__/AutomaticEngineTests/testAutomaticEngineDetection.Issues-issue_2094.txt create mode 100644 Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-0.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-100.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-25.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-50.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-75.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-0.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-100.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-25.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-50.png create mode 100644 Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-75.png diff --git a/Sources/Private/CoreAnimation/Animations/LayerProperty.swift b/Sources/Private/CoreAnimation/Animations/LayerProperty.swift index dc80f99e0f..d2ee60b839 100644 --- a/Sources/Private/CoreAnimation/Animations/LayerProperty.swift +++ b/Sources/Private/CoreAnimation/Animations/LayerProperty.swift @@ -76,6 +76,7 @@ enum PropertyName: String, CaseIterable { case scale = "Scale" case position = "Position" case rotation = "Rotation" + case strokeWidth = "Stroke Width" } // MARK: CALayer properties @@ -220,7 +221,7 @@ extension LayerProperty { .init( caLayerKeypath: #keyPath(CAShapeLayer.lineWidth), defaultValue: 1, - customizableProperty: nil /* currently unsupported */ ) + customizableProperty: .floatValue(.strokeWidth)) } static var lineDashPhase: LayerProperty<CGFloat> { @@ -356,4 +357,13 @@ extension CustomizableProperty { name: [.position], conversion: { ($0 as? LottieVector3D)?.pointValue }) } + + static func floatValue(_ name: PropertyName...) -> CustomizableProperty<CGFloat> { + .init( + name: name, + conversion: { typeErasedValue in + guard let vector = typeErasedValue as? LottieVector1D else { return nil } + return vector.cgFloatValue + }) + } } diff --git a/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift b/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift index 3b02dc246a..bcb808e223 100644 --- a/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +++ b/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift @@ -48,7 +48,7 @@ final class GradientStrokeProperties: NodePropertyMap, KeypathSearchable { "Start Point" : startPoint, "End Point" : endPoint, "Colors" : colors, - "Stroke Width" : width, + PropertyName.strokeWidth.rawValue : width, "Dashes" : dashPattern, "Dash Phase" : dashPhase, ] diff --git a/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift b/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift index bc61fcb7f5..6037522bbe 100644 --- a/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +++ b/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift @@ -38,7 +38,7 @@ final class StrokeNodeProperties: NodePropertyMap, KeypathSearchable { keypathProperties = [ PropertyName.opacity.rawValue : opacity, PropertyName.color.rawValue : color, - "Stroke Width" : width, + PropertyName.strokeWidth.rawValue : width, "Dashes" : dashPattern, "Dash Phase" : dashPhase, ] diff --git a/Sources/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift b/Sources/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift index 467b70fd24..4d2af08f2e 100644 --- a/Sources/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +++ b/Sources/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift @@ -99,7 +99,7 @@ final class TextAnimatorNodeProperties: NodePropertyMap, KeypathSearchable { if let keyframeGroup = textAnimator.strokeWidth { strokeWidth = NodeProperty(provider: KeyframeInterpolator(keyframes: keyframeGroup.keyframes)) - properties["Stroke Width"] = strokeWidth + properties[PropertyName.strokeWidth.rawValue] = strokeWidth } else { strokeWidth = nil } diff --git a/Tests/Samples/Issues/issue_2094.json b/Tests/Samples/Issues/issue_2094.json new file mode 100644 index 0000000000..197d96dded --- /dev/null +++ b/Tests/Samples/Issues/issue_2094.json @@ -0,0 +1 @@ +{"v":"5.7.1","fr":60,"ip":0,"op":110,"w":64,"h":64,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"outer circle","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[180]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[450]},{"t":110,"s":[540]}],"ix":10},"p":{"a":0,"k":[32,32,0],"ix":2},"a":{"a":0,"k":[-0.205,-0.041,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[40,40],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.666666666667,0.8,0.988235294118,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.205,-0.041],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[1]},{"t":50,"s":[100]}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"t":110,"s":[99]}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[-2]},{"t":110,"s":[2]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"inner circle 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[180]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[450]},{"t":110,"s":[540]}],"ix":10},"p":{"a":0,"k":[32,32,0],"ix":2},"a":{"a":0,"k":[-7.528,-5.028,0],"ix":1},"s":{"a":0,"k":[-100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[16,16],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.333333333333,0.450980392157,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-7.528,-5.028],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[100]},{"t":50,"s":[1]}],"ix":1},"e":{"a":0,"k":0,"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"t":50,"s":[-2]}],"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"inner circle 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[180]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[450]},{"t":110,"s":[540]}],"ix":10},"p":{"a":0,"k":[32,32,0],"ix":2},"a":{"a":0,"k":[-7.528,-5.028,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[16,16],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.333333333333,0.450980392157,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":8,"ix":5},"lc":2,"lj":1,"ml":4,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-7.528,-5.028],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[0]},{"t":110,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1800,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/Tests/SnapshotConfiguration.swift b/Tests/SnapshotConfiguration.swift index 76735d510f..1edc7e3909 100644 --- a/Tests/SnapshotConfiguration.swift +++ b/Tests/SnapshotConfiguration.swift @@ -105,6 +105,10 @@ extension SnapshotConfiguration { AnimationKeypath(keypath: "**.Color"): ColorValueProvider(.red), ]), + "Issues/issue_2094": .customValueProviders([ + AnimationKeypath(keypath: "**.Stroke Width"): FloatValueProvider(2), + ]), + // Test cases for `AnimatedImageProvider` // - These snapshots are pretty large (2 MB) by default, so we limit their number and size. "Nonanimating/dog": .customImageProvider(HardcodedImageProvider(imageName: "Samples/Images/dog.png")) diff --git a/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Issues-issue_1664.txt b/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Issues-issue_1664.txt index 8afbf59086..4236eb0409 100644 --- a/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Issues-issue_1664.txt +++ b/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Issues-issue_1664.txt @@ -12,6 +12,7 @@ card_depth.base_color.card_depth.Fill 1.Color card_depth.base_color.card_depth.Fill 1.Opacity card_depth.base_color.card_depth.Stroke 1.Color card_depth.base_color.card_depth.Stroke 1.Opacity +card_depth.base_color.card_depth.Stroke 1.Stroke Width card_depth.base_color.card_depth.Transform.Opacity card_depth.base_color.card_depth.Transform.Position card_depth.base_color.card_depth.Transform.Rotation @@ -48,6 +49,7 @@ card_front.base_color.graph.Transform.Scale card_front.base_color.graph.Transform.Scale card_front.base_color.lines.Stroke 1.Color card_front.base_color.lines.Stroke 1.Opacity +card_front.base_color.lines.Stroke 1.Stroke Width card_front.base_color.lines.Transform.Opacity card_front.base_color.lines.Transform.Position card_front.base_color.lines.Transform.Rotation @@ -90,6 +92,7 @@ finger_L.accent_color.circle_fade.Transform.Scale finger_L.accent_color.circle_fade.Transform.Scale finger_L.accent_color.ring_fade.Stroke 1.Color finger_L.accent_color.ring_fade.Stroke 1.Opacity +finger_L.accent_color.ring_fade.Stroke 1.Stroke Width finger_L.accent_color.ring_fade.Transform.Opacity finger_L.accent_color.ring_fade.Transform.Position finger_L.accent_color.ring_fade.Transform.Rotation @@ -102,6 +105,7 @@ finger_L.base_color.Transform.Scale finger_L.base_color.Transform.Scale finger_L.base_color.ring.Stroke 1.Color finger_L.base_color.ring.Stroke 1.Opacity +finger_L.base_color.ring.Stroke 1.Stroke Width finger_L.base_color.ring.Transform.Opacity finger_L.base_color.ring.Transform.Position finger_L.base_color.ring.Transform.Rotation @@ -132,6 +136,7 @@ finger_R.accent_color.circle_fade.Transform.Scale finger_R.accent_color.circle_fade.Transform.Scale finger_R.accent_color.ring_fade.Stroke 1.Color finger_R.accent_color.ring_fade.Stroke 1.Opacity +finger_R.accent_color.ring_fade.Stroke 1.Stroke Width finger_R.accent_color.ring_fade.Transform.Opacity finger_R.accent_color.ring_fade.Transform.Position finger_R.accent_color.ring_fade.Transform.Rotation @@ -144,6 +149,7 @@ finger_R.base_color.Transform.Scale finger_R.base_color.Transform.Scale finger_R.base_color.ring.Stroke 1.Color finger_R.base_color.ring.Stroke 1.Opacity +finger_R.base_color.ring.Stroke 1.Stroke Width finger_R.base_color.ring.Transform.Opacity finger_R.base_color.ring.Transform.Position finger_R.base_color.ring.Transform.Rotation diff --git a/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Switch.txt b/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Switch.txt index 2747a174c4..78ac3bcb51 100644 --- a/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Switch.txt +++ b/Tests/__Snapshots__/AnimationKeypathTests/testCoreAnimationEngineKeypathLogging.Switch.txt @@ -1,5 +1,6 @@ Checkmark Outlines 2.Group 1.Stroke 1.Color Checkmark Outlines 2.Group 1.Stroke 1.Opacity +Checkmark Outlines 2.Group 1.Stroke 1.Stroke Width Checkmark Outlines 2.Group 1.Transform.Opacity Checkmark Outlines 2.Group 1.Transform.Position Checkmark Outlines 2.Group 1.Transform.Rotation @@ -12,6 +13,7 @@ Checkmark Outlines 2.Transform.Scale Checkmark Outlines 2.Transform.Scale Checkmark Outlines.Group 1.Stroke 1.Color Checkmark Outlines.Group 1.Stroke 1.Opacity +Checkmark Outlines.Group 1.Stroke 1.Stroke Width Checkmark Outlines.Group 1.Transform.Opacity Checkmark Outlines.Group 1.Transform.Position Checkmark Outlines.Group 1.Transform.Rotation @@ -60,6 +62,7 @@ White BG Outlines.Transform.Scale White BG Outlines.Transform.Scale X Outlines.Group 1.Stroke 1.Color X Outlines.Group 1.Stroke 1.Opacity +X Outlines.Group 1.Stroke 1.Stroke Width X Outlines.Group 1.Transform.Opacity X Outlines.Group 1.Transform.Position X Outlines.Group 1.Transform.Rotation diff --git a/Tests/__Snapshots__/AutomaticEngineTests/testAutomaticEngineDetection.Issues-issue_2094.txt b/Tests/__Snapshots__/AutomaticEngineTests/testAutomaticEngineDetection.Issues-issue_2094.txt new file mode 100644 index 0000000000..4b816d7353 --- /dev/null +++ b/Tests/__Snapshots__/AutomaticEngineTests/testAutomaticEngineDetection.Issues-issue_2094.txt @@ -0,0 +1 @@ +Supports Core Animation engine \ No newline at end of file diff --git a/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-0.png b/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-0.png new file mode 100644 index 0000000000000000000000000000000000000000..96fc6b34cf74fe1e273104275565e7ccbc65e220 GIT binary patch literal 1772 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 literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-100.png b/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-100.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6781b6cc04bbb8cc40483c5140af709aebc51c GIT binary patch literal 1774 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 Hb|Udl_(;oD literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-25.png b/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-25.png new file mode 100644 index 0000000000000000000000000000000000000000..7a1860d77113ab2c1d19c9ee86bb17840d28c21b GIT binary patch literal 2930 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 Mf8I#1RL3#=-;bXJ+yDRo literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-50.png b/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-50.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab2ce487903556a536848ce20ed46256a3a1cf3 GIT binary patch literal 3346 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 literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-75.png b/Tests/__Snapshots__/SnapshotTests/testCoreAnimationRenderingEngine.Issues-issue_2094-75.png new file mode 100644 index 0000000000000000000000000000000000000000..cc32555b76624c2d7cf4b84d56ac905f1b0ee7e2 GIT binary patch literal 2947 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 literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-0.png b/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-0.png new file mode 100644 index 0000000000000000000000000000000000000000..96fc6b34cf74fe1e273104275565e7ccbc65e220 GIT binary patch literal 1772 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 literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-100.png b/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-100.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6781b6cc04bbb8cc40483c5140af709aebc51c GIT binary patch literal 1774 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 Hb|Udl_(;oD literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-25.png b/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-25.png new file mode 100644 index 0000000000000000000000000000000000000000..546231594b7e15ef8c1de45e88acbb8eafce0581 GIT binary patch literal 2901 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 Ak^lez literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-50.png b/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-50.png new file mode 100644 index 0000000000000000000000000000000000000000..e43a279bde84587a793f49a36fb615d5d12b3394 GIT binary patch literal 3334 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 a%TH)^SXk{VQGIa$IS?8K>gB4A(f<NoQ}GZ0 literal 0 HcmV?d00001 diff --git a/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-75.png b/Tests/__Snapshots__/SnapshotTests/testMainThreadRenderingEngine.Issues-issue_2094-75.png new file mode 100644 index 0000000000000000000000000000000000000000..376d7e177742c19d152f1077c89e00d2fbbe696b GIT binary patch literal 2908 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 literal 0 HcmV?d00001