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