Merge branch 'releases/Release_2_11_3_Branch'
[jalview.git] / src / jalview / util / ColorUtils.java
index d4be322..9ed98bd 100644 (file)
 
 package jalview.util;
 
+import java.util.Locale;
+
 import java.awt.Color;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.Random;
 
 public class ColorUtils
 {
+  private static final int MAX_CACHE_SIZE = 1729;
+
+  /*
+   * a cache for colours generated from text strings
+   */
+  static Map<String, Color> myColours = new HashMap<>();
 
   /**
    * Generates a random color, will mix with input color. Code taken from
@@ -60,6 +70,18 @@ public class ColorUtils
   }
 
   /**
+   * 
+   * @return random color
+   */
+  public static final Color getARandomColor()
+  {
+
+    Color col = new Color((int) (Math.random() * 255),
+            (int) (Math.random() * 255), (int) (Math.random() * 255));
+    return col;
+  }
+
+  /**
    * Convert to Tk colour code format
    * 
    * @param colour
@@ -260,6 +282,10 @@ public class ColorUtils
     {
       return Color.white;
     }
+    if (myColours.containsKey(name))
+    {
+      return myColours.get(name);
+    }
     int lsize = name.length();
     int start = 0;
     int end = lsize / 3;
@@ -291,6 +317,11 @@ public class ColorUtils
 
     Color color = new Color(r, g, b);
 
+    if (myColours.size() < MAX_CACHE_SIZE)
+    {
+      myColours.put(name, color);
+    }
+
     return color;
   }
 
@@ -308,7 +339,7 @@ public class ColorUtils
       return null;
     }
     Color col = null;
-    name = name.toLowerCase();
+    name = name.toLowerCase(Locale.ROOT);
 
     // or make a static map; or use reflection on the field name
     switch (name)