JAL-3253-applet JAL-3383 Overview
[jalview.git] / src / jalview / util / ColorUtils.java
index 16ff259..a2d8d3e 100644 (file)
@@ -31,9 +31,6 @@ import java.util.Random;
 
 public class ColorUtils
 {
-  // constant borrowed from java.awt.Color
-  private static final float FACTOR = 0.7f;
-
   private static final int MAX_CACHE_SIZE = 1729;
   /*
    * a cache for colours generated from text strings
@@ -202,6 +199,42 @@ public class ColorUtils
     }
   }
 
+  public static int bleachColourInt(int colour, float bleachFactor)
+  {
+    if (bleachFactor >= 1f)
+    {
+      return -1;// Color.WHITE;
+    }
+    if (bleachFactor <= -1f)
+    {
+      return 0xFF000000;// Color.BLACK;
+    }
+    if (bleachFactor == 0f)
+    {
+      return colour;
+    }
+
+    int red = (colour >> 16) & 0xFF;// getRed();
+    int green = (colour >> 8) & 0xFF;// colour.getGreen();
+    int blue = colour & 0xFF;// .getBlue();
+
+    if (bleachFactor > 0)
+    {
+      red += (255 - red) * bleachFactor;
+      green += (255 - green) * bleachFactor;
+      blue += (255 - blue) * bleachFactor;
+    }
+    else
+    {
+      float factor = 1 + bleachFactor;
+      red *= factor;
+      green *= factor;
+      blue *= factor;
+    }
+    return 0xFF000000 | (red << 16) | (green << 8) | blue;// new Color(red,
+                                                          // green, blue);
+  }
+
   /**
    * Parses a string into a Color, where the accepted formats are
    * <ul>
@@ -228,6 +261,7 @@ public class ColorUtils
       col = new Color(value);
     } catch (NumberFormatException ex)
     {
+      col = Platform.getColorFromName(colour);
     }
 
     if (col == null)
@@ -322,116 +356,8 @@ public class ColorUtils
    */
   public static Color getAWTColorFromName(String name)
   {
-    if (name == null)
-    {
-      return null;
-    }
-    Color col = null;
-    name = name.toLowerCase();
-
-    // or make a static map; or use reflection on the field name
-    switch (name)
-    {
-    case "black":
-      col = Color.black;
-      break;
-    case "blue":
-      col = Color.blue;
-      break;
-    case "cyan":
-      col = Color.cyan;
-      break;
-    case "darkgray":
-      col = Color.darkGray;
-      break;
-    case "gray":
-      col = Color.gray;
-      break;
-    case "green":
-      col = Color.green;
-      break;
-    case "lightgray":
-      col = Color.lightGray;
-      break;
-    case "magenta":
-      col = Color.magenta;
-      break;
-    case "orange":
-      col = Color.orange;
-      break;
-    case "pink":
-      col = Color.pink;
-      break;
-    case "red":
-      col = Color.red;
-      break;
-    case "white":
-      col = Color.white;
-      break;
-    case "yellow":
-      col = Color.yellow;
-      break;
-    }
-
-    return col;
-  }
-
-  /**
-   * Generates a colour that is interpolated between
-   * <code>colour.darker()</code> and <code>colour.brighter()</code> in
-   * proportion as <code>value</code> is between <code>min</code> and
-   * <code>max</code>. Note that the 'neutral point' (unchanged colour) is
-   * closer to 'brighter' than to 'darker'as this is a geometric range.
-   * 
-   * @param value
-   * @param min
-   * @param max
-   * @param colour
-   * @return
-   */
-  public static Color getGraduatedColour(float value, float min, float max,
-          Color colour)
-  {
-    /*
-     * this computes the equivalent of
-     * getGraduatedColour(value, min, colour.darker(), max, colour.brighter())
-     * but avoiding object creation except for the return value
-     */
-    if (value < min)
-    {
-      value = min;
-    }
-    if (value > max)
-    {
-      value = max;
-    }
-
-    int r = colour.getRed();
-    int g = colour.getGreen();
-    int b = colour.getBlue();
-
-    /*
-     * rgb for colour.darker():
-     */
-    float minR = r * FACTOR;
-    float minG = g * FACTOR;
-    float minB = b * FACTOR;
-
-    /*
-     * rgb for colour.brighter():
-     */
-    float maxR = Math.min(255f, r / FACTOR);
-    float maxG = Math.min(255f, g / FACTOR);
-    float maxB = Math.min(255f, b / FACTOR);
-
-    /*
-     * interpolation
-     */
-    float p = (value - min) / (max - min);
-    int newR = (int) (minR + p * (maxR - minR));
-    int newG = (int) (minG + p * (maxG - minG));
-    int newB = (int) (minB + p * (maxB - minB));
-
-    return new Color(newR, newG, newB, colour.getAlpha());
+    return Platform.getColorFromName(name); // BH 2019 -- allows for wide range
+                                            // of JavaScript colors (for
+                                            // JavaScript only)
   }
 }