X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=unused%2Fjavajs%2Futil%2FCU.java;fp=unused%2Fjavajs%2Futil%2FCU.java;h=e46287eff4249ee24547230062cf04253571888d;hb=ec8f3cedf60fb1feed6d34de6b49f6bfa78b9dd8;hp=0000000000000000000000000000000000000000;hpb=056dad85a910551cc95e44d451a61f6b8c4dd35d;p=jalview.git diff --git a/unused/javajs/util/CU.java b/unused/javajs/util/CU.java new file mode 100644 index 0000000..e46287e --- /dev/null +++ b/unused/javajs/util/CU.java @@ -0,0 +1,555 @@ +package javajs.util; + +import java.util.Hashtable; +import java.util.Map; + +import javajs.api.GenericColor; + +/** + * ColorUtility + * + */ + +public class CU { + + public static String toRGBHexString(GenericColor c) { + int rgb = c.getRGB(); + if (rgb == 0) + return "000000"; + String r = "00" + Integer.toHexString((rgb >> 16) & 0xFF); + r = r.substring(r.length() - 2); + String g = "00" + Integer.toHexString((rgb >> 8) & 0xFF); + g = g.substring(g.length() - 2); + String b = "00" + Integer.toHexString(rgb & 0xFF); + b = b.substring(b.length() - 2); + return r + g + b; + } + + public static String toCSSString(GenericColor c) { + int opacity = c.getOpacity255(); + if (opacity == 255) + return "#" + toRGBHexString(c); + int rgb = c.getRGB(); + return "rgba(" + ((rgb>>16)&0xFF) + "," + ((rgb>>8)&0xff) + "," + (rgb&0xff) + "," + opacity/255f + ")"; + } + + private final static String[] colorNames = { + "black", // 000000 + "pewhite", // ffffff + "pecyan", // 00ffff + "pepurple", // d020ff + "pegreen", // 00ff00 + "peblue", // 6060ff + "peviolet", // ff80c0 + "pebrown", // a42028 + "pepink", // ffd8d8 + "peyellow", // ffff00 + "pedarkgreen", // 00c000 + "peorange", // ffb000 + "pelightblue", // b0b0ff + "pedarkcyan", // 00a0a0 + "pedarkgray", // 606060 + + "aliceblue", // F0F8FF + "antiquewhite", // FAEBD7 + "aqua", // 00FFFF + "aquamarine", // 7FFFD4 + "azure", // F0FFFF + "beige", // F5F5DC + "bisque", // FFE4C4 + "blanchedalmond", // FFEBCD + "blue", // 0000FF + "blueviolet", // 8A2BE2 + "brown", // A52A2A + "burlywood", // DEB887 + "cadetblue", // 5F9EA0 + "chartreuse", // 7FFF00 + "chocolate", // D2691E + "coral", // FF7F50 + "cornflowerblue", // 6495ED + "cornsilk", // FFF8DC + "crimson", // DC143C + "cyan", // 00FFFF + "darkblue", // 00008B + "darkcyan", // 008B8B + "darkgoldenrod", // B8860B + "darkgray", // A9A9A9 + "darkgreen", // 006400 + "darkkhaki", // BDB76B + "darkmagenta", // 8B008B + "darkolivegreen", // 556B2F + "darkorange", // FF8C00 + "darkorchid", // 9932CC + "darkred", // 8B0000 + "darksalmon", // E9967A + "darkseagreen", // 8FBC8F + "darkslateblue", // 483D8B + "darkslategray", // 2F4F4F + "darkturquoise", // 00CED1 + "darkviolet", // 9400D3 + "deeppink", // FF1493 + "deepskyblue", // 00BFFF + "dimgray", // 696969 + "dodgerblue", // 1E90FF + "firebrick", // B22222 + "floralwhite", // FFFAF0 16775920 + "forestgreen", // 228B22 + "fuchsia", // FF00FF + "gainsboro", // DCDCDC + "ghostwhite", // F8F8FF + "gold", // FFD700 + "goldenrod", // DAA520 + "gray", // 808080 + "green", // 008000 + "greenyellow", // ADFF2F + "honeydew", // F0FFF0 + "hotpink", // FF69B4 + "indianred", // CD5C5C + "indigo", // 4B0082 + "ivory", // FFFFF0 + "khaki", // F0E68C + "lavender", // E6E6FA + "lavenderblush", // FFF0F5 + "lawngreen", // 7CFC00 + "lemonchiffon", // FFFACD + "lightblue", // ADD8E6 + "lightcoral", // F08080 + "lightcyan", // E0FFFF + "lightgoldenrodyellow", // FAFAD2 + "lightgreen", // 90EE90 + "lightgrey", // D3D3D3 + "lightgray", // D3D3D3 + "lightpink", // FFB6C1 + "lightsalmon", // FFA07A + "lightseagreen", // 20B2AA + "lightskyblue", // 87CEFA + "lightslategray", // 778899 + "lightsteelblue", // B0C4DE + "lightyellow", // FFFFE0 + "lime", // 00FF00 + "limegreen", // 32CD32 + "linen", // FAF0E6 + "magenta", // FF00FF + "maroon", // 800000 + "mediumaquamarine", // 66CDAA + "mediumblue", // 0000CD + "mediumorchid", // BA55D3 + "mediumpurple", // 9370DB + "mediumseagreen", // 3CB371 + "mediumslateblue", // 7B68EE + "mediumspringgreen", // 00FA9A + "mediumturquoise", // 48D1CC + "mediumvioletred", // C71585 + "midnightblue", // 191970 + "mintcream", // F5FFFA + "mistyrose", // FFE4E1 + "moccasin", // FFE4B5 + "navajowhite", // FFDEAD + "navy", // 000080 + "oldlace", // FDF5E6 + "olive", // 808000 + "olivedrab", // 6B8E23 + "orange", // FFA500 + "orangered", // FF4500 + "orchid", // DA70D6 + "palegoldenrod", // EEE8AA + "palegreen", // 98FB98 + "paleturquoise", // AFEEEE + "palevioletred", // DB7093 + "papayawhip", // FFEFD5 + "peachpuff", // FFDAB9 + "peru", // CD853F + "pink", // FFC0CB + "plum", // DDA0DD + "powderblue", // B0E0E6 + "purple", // 800080 + "red", // FF0000 + "rosybrown", // BC8F8F + "royalblue", // 4169E1 + "saddlebrown", // 8B4513 + "salmon", // FA8072 + "sandybrown", // F4A460 + "seagreen", // 2E8B57 + "seashell", // FFF5EE + "sienna", // A0522D + "silver", // C0C0C0 + "skyblue", // 87CEEB + "slateblue", // 6A5ACD + "slategray", // 708090 + "snow", // FFFAFA 16775930 + "springgreen", // 00FF7F + "steelblue", // 4682B4 + "tan", // D2B48C + "teal", // 008080 + "thistle", // D8BFD8 + "tomato", // FF6347 + "turquoise", // 40E0D0 + "violet", // EE82EE + "wheat", // F5DEB3 + "white", // FFFFFF 16777215 + "whitesmoke", // F5F5F5 + "yellow", // FFFF00 + "yellowgreen", // 9ACD32 + // plus a few rasmol names/values + "bluetint", // AFD7FF + "greenblue", // 2E8B57 + "greentint", // 98FFB3 + "grey", // 808080 + "gray", + "pinktint", // FFABBB + "redorange", // FF4500 + "yellowtint", // F6F675 + }; + + private final static int[] colorArgbs = { + //#FFFFC3 hover + 0xFF000000, // black + // plus the PE chain colors + 0xFFffffff, // pewhite + 0xFF00ffff, // pecyan + 0xFFd020ff, // pepurple + 0xFF00ff00, // pegreen + 0xFF6060ff, // peblue + 0xFFff80c0, // peviolet + 0xFFa42028, // pebrown + 0xFFffd8d8, // pepink + 0xFFffff00, // peyellow + 0xFF00c000, // pedarkgreen + 0xFFffb000, // peorange + 0xFFb0b0ff, // pelightblue + 0xFF00a0a0, // pedarkcyan + 0xFF606060, // pedarkgray + // standard JavaScript + 0xFFF0F8FF, // aliceblue + 0xFFFAEBD7, // antiquewhite + 0xFF00FFFF, // aqua + 0xFF7FFFD4, // aquamarine + 0xFFF0FFFF, // azure + 0xFFF5F5DC, // beige + 0xFFFFE4C4, // bisque + 0xFFFFEBCD, // blanchedalmond + 0xFF0000FF, // blue + 0xFF8A2BE2, // blueviolet + 0xFFA52A2A, // brown + 0xFFDEB887, // burlywood + 0xFF5F9EA0, // cadetblue + 0xFF7FFF00, // chartreuse + 0xFFD2691E, // chocolate + 0xFFFF7F50, // coral + 0xFF6495ED, // cornflowerblue + 0xFFFFF8DC, // cornsilk + 0xFFDC143C, // crimson + 0xFF00FFFF, // cyan + 0xFF00008B, // darkblue + 0xFF008B8B, // darkcyan + 0xFFB8860B, // darkgoldenrod + 0xFFA9A9A9, // darkgray + 0xFF006400, // darkgreen + + 0xFFBDB76B, // darkkhaki + 0xFF8B008B, // darkmagenta + 0xFF556B2F, // darkolivegreen + 0xFFFF8C00, // darkorange + 0xFF9932CC, // darkorchid + 0xFF8B0000, // darkred + 0xFFE9967A, // darksalmon + 0xFF8FBC8F, // darkseagreen + 0xFF483D8B, // darkslateblue + 0xFF2F4F4F, // darkslategray + 0xFF00CED1, // darkturquoise + 0xFF9400D3, // darkviolet + 0xFFFF1493, // deeppink + 0xFF00BFFF, // deepskyblue + 0xFF696969, // dimgray + 0xFF1E90FF, // dodgerblue + 0xFFB22222, // firebrick + 0xFFFFFAF0, // floralwhite + 0xFF228B22, // forestgreen + 0xFFFF00FF, // fuchsia + 0xFFDCDCDC, // gainsboro + 0xFFF8F8FF, // ghostwhite + 0xFFFFD700, // gold + 0xFFDAA520, // goldenrod + 0xFF808080, // gray + 0xFF008000, // green + 0xFFADFF2F, // greenyellow + 0xFFF0FFF0, // honeydew + 0xFFFF69B4, // hotpink + 0xFFCD5C5C, // indianred + 0xFF4B0082, // indigo + 0xFFFFFFF0, // ivory + 0xFFF0E68C, // khaki + 0xFFE6E6FA, // lavender + 0xFFFFF0F5, // lavenderblush + 0xFF7CFC00, // lawngreen + 0xFFFFFACD, // lemonchiffon + 0xFFADD8E6, // lightblue + 0xFFF08080, // lightcoral + 0xFFE0FFFF, // lightcyan + 0xFFFAFAD2, // lightgoldenrodyellow + 0xFF90EE90, // lightgreen + 0xFFD3D3D3, // lightgrey + 0xFFD3D3D3, // lightgray + 0xFFFFB6C1, // lightpink + 0xFFFFA07A, // lightsalmon + 0xFF20B2AA, // lightseagreen + 0xFF87CEFA, // lightskyblue + 0xFF778899, // lightslategray + 0xFFB0C4DE, // lightsteelblue + 0xFFFFFFE0, // lightyellow + 0xFF00FF00, // lime + 0xFF32CD32, // limegreen + 0xFFFAF0E6, // linen + 0xFFFF00FF, // magenta + 0xFF800000, // maroon + 0xFF66CDAA, // mediumaquamarine + 0xFF0000CD, // mediumblue + 0xFFBA55D3, // mediumorchid + 0xFF9370DB, // mediumpurple + 0xFF3CB371, // mediumseagreen + 0xFF7B68EE, // mediumslateblue + 0xFF00FA9A, // mediumspringgreen + 0xFF48D1CC, // mediumturquoise + 0xFFC71585, // mediumvioletred + 0xFF191970, // midnightblue + 0xFFF5FFFA, // mintcream + 0xFFFFE4E1, // mistyrose + 0xFFFFE4B5, // moccasin + 0xFFFFDEAD, // navajowhite + 0xFF000080, // navy + 0xFFFDF5E6, // oldlace + 0xFF808000, // olive + 0xFF6B8E23, // olivedrab + 0xFFFFA500, // orange + 0xFFFF4500, // orangered + 0xFFDA70D6, // orchid + 0xFFEEE8AA, // palegoldenrod + 0xFF98FB98, // palegreen + 0xFFAFEEEE, // paleturquoise + 0xFFDB7093, // palevioletred + 0xFFFFEFD5, // papayawhip + 0xFFFFDAB9, // peachpuff + 0xFFCD853F, // peru + 0xFFFFC0CB, // pink + 0xFFDDA0DD, // plum + 0xFFB0E0E6, // powderblue + 0xFF800080, // purple + 0xFFFF0000, // red + 0xFFBC8F8F, // rosybrown + 0xFF4169E1, // royalblue + 0xFF8B4513, // saddlebrown + 0xFFFA8072, // salmon + 0xFFF4A460, // sandybrown + 0xFF2E8B57, // seagreen + 0xFFFFF5EE, // seashell + 0xFFA0522D, // sienna + 0xFFC0C0C0, // silver + 0xFF87CEEB, // skyblue + 0xFF6A5ACD, // slateblue + 0xFF708090, // slategray + 0xFFFFFAFA, // snow + 0xFF00FF7F, // springgreen + 0xFF4682B4, // steelblue + 0xFFD2B48C, // tan + 0xFF008080, // teal + 0xFFD8BFD8, // thistle + 0xFFFF6347, // tomato + 0xFF40E0D0, // turquoise + 0xFFEE82EE, // violet + 0xFFF5DEB3, // wheat + 0xFFFFFFFF, // white + 0xFFF5F5F5, // whitesmoke + 0xFFFFFF00, // yellow + 0xFF9ACD32, // yellowgreen + // plus a few rasmol names/values + 0xFFAFD7FF, // bluetint + 0xFF2E8B57, // greenblue + 0xFF98FFB3, // greentint + 0xFF808080, // grey + 0xFF808080, // gray + 0xFFFFABBB, // pinktint + 0xFFFF4500, // redorange + 0xFFF6F675, // yellowtint + }; + + private static final Map mapJavaScriptColors = new Hashtable(); + + static { + for (int i = colorNames.length; --i >= 0; ) + mapJavaScriptColors.put(colorNames[i], Integer.valueOf(colorArgbs[i])); + } + + /** + * accepts [xRRGGBB] or [0xRRGGBB] or [0xFFRRGGBB] or #RRGGBB or + * [red,green,blue] or a valid JavaScript color + * + * @param strColor + * @return 0 if invalid or integer color + */ + public static int getArgbFromString(String strColor) { + int len = 0; + if (strColor == null || (len = strColor.length()) == 0) + return 0; + strColor = strColor.toLowerCase(); + if (strColor.charAt(0) == '[' && strColor.charAt(len - 1) == ']') { + String check; + if (strColor.indexOf(",") >= 0) { + String[] tokens = PT.split(strColor.substring(1, strColor + .length() - 1), ","); + if (tokens.length != 3) + return 0; + float red = PT.parseFloat(tokens[0]); + float grn = PT.parseFloat(tokens[1]); + float blu = PT.parseFloat(tokens[2]); + return colorTriadToFFRGB(red, grn, blu); + } + switch (len) { + case 9: + check = "x"; + break; + case 10: + check = "0x"; + break; + default: + return 0; + } + if (strColor.indexOf(check) != 1) + return 0; + strColor = "#" + strColor.substring(len - 7, len - 1); + len = 7; + } + if (len == 7 && strColor.charAt(0) == '#') { + try { + return PT.parseIntRadix(strColor.substring(1, 7), 16) | 0xFF000000; + } catch (Exception e) { + return 0; + } + } + Integer boxedArgb = mapJavaScriptColors.get(strColor); + return (boxedArgb == null ? 0 : boxedArgb.intValue()); + } + + public static int colorTriadToFFRGB(float x, float y, float z) { + if (x <= 1 && y <= 1 && z <= 1) { + if (x > 0) + x = x * 256 - 1; + if (y > 0) + y = y * 256 - 1; + if (z > 0) + z = z * 256 - 1; + } + return rgb((int) x, (int) y, (int) z); + } + + public static int rgb(int red, int grn, int blu) { + return 0xFF000000 | (red << 16) | (grn << 8) | blu; + } + + public final static P3 colorPtFromString(String colorName) { + return colorPtFromInt(getArgbFromString(colorName), null); + } + + public final static P3 colorPtFromInt(int color, P3 pt) { + if (pt == null) + pt = new P3(); + pt.set((color >> 16) & 0xFF, (color >> 8) & 0xFF, color & 0xFF); + return pt; + } + + public static int colorPtToFFRGB(T3 pt) { + return colorTriadToFFRGB(pt.x, pt.y, pt.z); + } + + public static void toRGB3f(int c, float[] f) { + f[0] = ((c >> 16) & 0xFF) / 255f; // red + f[1] = ((c >> 8) & 0xFF) / 255f; + f[2] = (c & 0xFF) / 255f; + } + + /** + * Return a greyscale rgb value 0-FF using NTSC color lightness algorithm + *

+ * the alpha component is set to 0xFF. If you want a value in the + * range 0-255 then & the result with 0xFF; + * + * @param rgb the rgb value + * @return a grayscale value in the range 0 - 255 decimal + */ + public static int toFFGGGfromRGB(int rgb) { + int grey = (((2989 * ((rgb >> 16) & 0xFF)) + + (5870 * ((rgb >> 8) & 0xFF)) + + (1140 * (rgb & 0xFF)) + 5000) / 10000) & 0xFFFFFF; + return rgb(grey, grey, grey); + } + + + /** + * Convert RGB values to HSL (hue/saturation/lightness) + * + * @param rgb + * range 255 255 255 + * @param doRound + * set to false when just using this for + * for RGB -- HSL -- HSL' -- RGB' conversion + * + * @return the HSL as P3 range 360 100 100 + * @author hansonr + */ + + public static P3 rgbToHSL(P3 rgb, boolean doRound) { + // adapted from http://tips4java.wordpress.com/2009/07/05/hsl-color/ + // see http://en.wikipedia.org/wiki/HSL_color_space + float r = rgb.x / 255; + float g = rgb.y / 255; + float b = rgb.z / 255; + float min = Math.min(r, Math.min(g, b)); + float max = Math.max(r, Math.max(g, b)); + + // lightness is just p * 50 + + float p = (max + min); + float q = (max - min); + + float h = (60 * ((q == 0 ? 0 : max == r ? ((g - b) / q + 6) + : max == g ? (b - r) / q + 2 : (r - g) / q + 4))) % 360; + + float s = q / (q == 0 ? 1 : p <= 1 ? p : 2 - p); + + // we round to tenths for HSL so that we can return enough + // precision to get back 1-255 in RGB + return (doRound ? P3.new3(Math.round(h*10)/10f, Math.round(s * 1000)/10f, + Math.round(p * 500)/10f) : P3.new3(h, s * 100, p * 50)); + } + + /** + * Convert HSL (hue/saturation/luninance) values to RGB + * + * @param hsl in the range 360, 100, 100 + * @return the RGB as P3 range 0 to 255 + * @author hansonr + */ + public static P3 hslToRGB(P3 hsl) { + // adapted from http://tips4java.wordpress.com/2009/07/05/hsl-color/ + // see http://en.wikipedia.org/wiki/HSL_color_space + + // highly condensed + + float h = Math.max(0, Math.min(360, hsl.x)) / 60; + float s = Math.max(0, Math.min(100, hsl.y)) / 100; + float l = Math.max(0, Math.min(100, hsl.z)) / 100; + + float p = l - (l < 0.5 ? l : 1 - l) * s; + float q = 2 * (l - p); + + float r = toRGB(p, q, h + 2); + float g = toRGB(p, q, h); + float b = toRGB(p, q, h - 2); + return P3.new3(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)); + } + + private static float toRGB(float p, float q, float h) { + return ((h = (h + (h < 0 ? 6 : h > 6 ? -6 : 0))) < 1 ? p + q * h + : h < 3 ? p + q : h < 4 ? p + q * (4 - h) : p); + } + +}