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
}
}
+ 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>
col = new Color(value);
} catch (NumberFormatException ex)
{
+ col = Platform.getColorFromName(colour);
}
if (col == null)
*/
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)
}
}