about summary refs log tree commit diff
path: root/patches/react-native-svg+15.12.0.patch
blob: 54540023f1ed6e8ca7d5196feb308500f637073e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
diff --git a/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java b/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java
index 06829bd..1b15818 100644
--- a/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java
+++ b/node_modules/react-native-svg/android/src/main/java/com/horcrux/svg/PathView.java
@@ -14,17 +14,33 @@ import android.graphics.Paint;
 import android.graphics.Path;
 import com.facebook.react.bridge.ReactContext;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+
+class ParsedPath {
+  final Path path;
+  final ArrayList<PathElement> elements;
+
+  ParsedPath(Path path, ArrayList<PathElement> elements) {
+    this.path = path;
+    this.elements = elements;
+  }
+}
+
 @SuppressLint("ViewConstructor")
 class PathView extends RenderableView {
   private Path mPath;
 
+  // This grows forever but for our use case (static icons) it's ok.
+  private static final HashMap<String, ParsedPath> sPathCache = new HashMap<>();
+
   public PathView(ReactContext reactContext) {
     super(reactContext);
     PathParser.mScale = mScale;
     mPath = new Path();
   }
 
-  public void setD(String d) {
+  void setDByParsing(String d) {
     mPath = PathParser.parse(d);
     elements = PathParser.elements;
     for (PathElement elem : elements) {
@@ -33,6 +49,17 @@ class PathView extends RenderableView {
         point.y *= mScale;
       }
     }
+  }
+
+  public void setD(String d) {
+    ParsedPath cached = sPathCache.get(d);
+    if (cached != null) {
+      mPath = cached.path;
+      elements = cached.elements;
+    } else {
+      setDByParsing(d);
+      sPathCache.put(d, new ParsedPath(mPath, elements));
+    }
     invalidate();
   }