ColorStore.java revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* ident "%Z%%M% %I% %E% SMI"
*
* Copyright (c) 2000 by Sun Microsystems, Inc.
* All rights reserved.
*/
/*
* Copyright (C) 1996 Active Software, Inc.
* All rights reserved.
*
* @(#) ColorStore.java 1.15 - last change made 07/10/97
*/
package sunsoft.jws.visual.rt.type;
import sunsoft.jws.visual.rt.base.Global;
import java.awt.Color;
import java.util.Hashtable;
import java.util.Enumeration;
/**
* Stores colors by name and rgb value. Names are always stored in
* lower case, and searches are done after converting the search key
* into lower case. Two hashtables are used so colors can be accessed
* efficiently either by color or name.
*
* @version 1.15, 07/10/97
*/
public class ColorStore {
// COLOR <-> NAME HASHTABLES
/**
* Storage place for Color RGB values and named colors.
* It's like a two-way hashtable.
*/
private static ColorStore defaultColorStore;
/**
* Returns a reference to the single global instance of ColorStore.
*/
public static ColorStore getDefaultColorStore() {
initColorStore();
return (defaultColorStore);
}
private static void initColorStore() {
if (defaultColorStore != null)
return;
defaultColorStore = new ColorStore();
defaultColorStore.initDefaultColorList();
}
/**
* Storage place for Color RGB values (keys) and named colors (values)
*/
private Hashtable rgbkeys;
/**
* Storage place for named colors (keys) Color RGB values (values)
*/
private Hashtable namekeys;
/**
* A list sorted by colorName (a-z)
*/
private String[] colorNameArray;
public ColorStore() {
rgbkeys = new Hashtable();
namekeys = new Hashtable();
}
/**
* Returns the name of a color. If the color name is not in
* our table, return #RRGGBB (a string of hex numbers).
*/
public String getColorName(Color c) {
return (String) rgbkeys.get(c);
}
/**
* Given the name of a color, return the Color corresponding to it.
*/
public Color getColor(String name) {
if (name == null) {
return null;
} else {
return ((Color) namekeys.get(name.toLowerCase()));
}
}
/**
* Given a Color, return the name of the color listed in the
* ColorStore closest to that color.
*/
public String getClosestColorName(Color c) {
Enumeration e;
int difference = 255*3, newDifference;
Color bestColor = null, cKey;
if (rgbkeys.containsKey(c)) {
return (getColorName(c));
}
e = rgbkeys.keys();
while (e.hasMoreElements()) {
cKey = (Color) e.nextElement();
if ((newDifference =
(Math.abs(cKey.getRed() - c.getRed())) +
(Math.abs(cKey.getGreen() - c.getGreen())) +
(Math.abs(cKey.getBlue() - c.getBlue()))) <=
difference)
{
difference = newDifference;
bestColor = cKey;
}
}
return getColorName(bestColor);
}
/**
* Adds the color/name pair to the color store is it is not already
* there and returns the name of the color. If the color is already
* registered, the previous name of the color is returned.
*/
public String add(Color c, String name) {
if (rgbkeys.containsKey(c)) {
return (getColorName(c));
} else {
rgbkeys.put(c, name.toLowerCase());
namekeys.put(name, c);
colorNameArray = null;
return (name);
}
}
/**
* Returns the list of Colors named in the ColorStore.
*/
public String[] getColorList() {
int index;
if (colorNameArray == null) {
colorNameArray = new String[rgbkeys.size()];
index = 0;
Enumeration e = namekeys.keys();
while (e.hasMoreElements()) {
String colorName = (String)(e.nextElement());
colorNameArray[index] = colorName;
index++;
}
Global.util.qsort(colorNameArray);
}
return colorNameArray;
}
private void initDefaultColorList() {
// Java.awt.Color constants:
add(Color.black, /* NOI18N */"black");
add(Color.blue, /* NOI18N */"blue");
add(Color.cyan, /* NOI18N */"cyan");
add(Color.darkGray, "darkgray");
add(Color.gray, /* NOI18N */"gray");
add(Color.green, /* NOI18N */"green");
add(Color.lightGray, "lightgray");
add(Color.magenta, /* NOI18N */"magenta");
add(Color.orange, /* NOI18N */"orange");
add(Color.pink, /* NOI18N */"pink");
add(Color.red, /* NOI18N */"red");
add(Color.white, /* NOI18N */"white");
add(Color.yellow, /* NOI18N */"yellow");
// Colors from rgb.txt:
add(new Color(133, 133, 133), /* NOI18N */"gray52");
add(new Color(122, 122, 122), /* NOI18N */"gray48");
add(new Color(186, 186, 186), /* NOI18N */"gray73");
add(new Color(94, 94, 94), /* NOI18N */"gray37");
add(new Color(196, 196, 196), /* NOI18N */"gray77");
add(new Color(84, 84, 84), /* NOI18N */"gray33");
add(new Color(66, 66, 66), /* NOI18N */"gray26");
add(new Color(48, 48, 48), /* NOI18N */"gray19");
add(new Color(92, 92, 92), /* NOI18N */"gray36");
add(new Color(74, 74, 74), /* NOI18N */"gray29");
add(new Color(163, 163, 163), /* NOI18N */"gray64");
add(new Color(28, 28, 28), /* NOI18N */"gray11");
add(new Color(46, 46, 46), /* NOI18N */"gray18");
add(new Color(173, 173, 173), /* NOI18N */"gray68");
add(new Color(36, 36, 36), /* NOI18N */"gray14");
add(new Color(54, 54, 54), /* NOI18N */"gray21");
add(new Color(194, 194, 194), /* NOI18N */"gray76");
add(new Color(150, 150, 150), /* NOI18N */"gray59");
add(new Color(171, 171, 171), /* NOI18N */"gray67");
add(new Color(3, 3, 3), /* NOI18N */"gray1");
add(new Color(181, 181, 181), /* NOI18N */"gray71");
add(new Color(20, 20, 20), /* NOI18N */"gray8");
add(new Color(10, 10, 10), /* NOI18N */"gray4");
add(new Color(207, 207, 207), /* NOI18N */"gray81");
add(new Color(99, 99, 99), /* NOI18N */"gray39");
add(new Color(237, 237, 237), /* NOI18N */"gray93");
add(new Color(79, 79, 79), /* NOI18N */"gray31");
add(new Color(87, 87, 87), /* NOI18N */"gray34");
add(new Color(204, 204, 204), /* NOI18N */"gray80");
add(new Color(214, 214, 214), /* NOI18N */"gray84");
add(new Color(235, 235, 235), /* NOI18N */"gray92");
add(new Color(245, 245, 245), /* NOI18N */"gray96");
add(new Color(8, 8, 8), /* NOI18N */"gray3");
add(new Color(71, 71, 71), /* NOI18N */"gray28");
add(new Color(201, 201, 201), /* NOI18N */"gray79");
add(new Color(61, 61, 61), /* NOI18N */"gray24");
add(new Color(51, 51, 51), /* NOI18N */"gray20");
add(new Color(33, 33, 33), /* NOI18N */"gray13");
add(new Color(15, 15, 15), /* NOI18N */"gray6");
add(new Color(117, 117, 117), /* NOI18N */"gray46");
add(new Color(31, 31, 31), /* NOI18N */"gray12");
add(new Color(13, 13, 13), /* NOI18N */"gray5");
add(new Color(105, 105, 105), /* NOI18N */"gray41");
add(new Color(148, 148, 148), /* NOI18N */"gray58");
add(new Color(252, 252, 252), /* NOI18N */"gray99");
add(new Color(115, 115, 115), /* NOI18N */"gray45");
add(new Color(158, 158, 158), /* NOI18N */"gray62");
add(new Color(179, 179, 179), /* NOI18N */"gray70");
add(new Color(240, 240, 240), /* NOI18N */"gray94");
add(new Color(189, 189, 189), /* NOI18N */"gray74");
add(new Color(250, 250, 250), /* NOI18N */"gray98");
add(new Color(199, 199, 199), /* NOI18N */"gray78");
add(new Color(145, 145, 145), /* NOI18N */"gray57");
add(new Color(70, 130, 180), /* NOI18N */"steel blue");
add(new Color(233, 150, 122), /* NOI18N */"darksalmon");
add(new Color(100, 149, 237), /* NOI18N */"cornflowerblue");
add(new Color(30, 144, 255), /* NOI18N */"dodgerblue");
add(new Color(238, 221, 130), /* NOI18N */"lightgoldenrod");
add(new Color(205, 133, 63), /* NOI18N */"peru");
add(new Color(154, 205, 50), /* NOI18N */"yellow green");
add(new Color(175, 238, 238), /* NOI18N */"paleturquoise");
add(new Color(0, 100, 0), /* NOI18N */"darkgreen");
add(new Color(160, 82, 45), /* NOI18N */"sienna");
add(new Color(143, 188, 143), /* NOI18N */"darkseagreen");
add(new Color(255, 228, 196), /* NOI18N */"bisque");
add(new Color(147, 112, 219), /* NOI18N */"mediumpurple");
add(new Color(148, 0, 211), /* NOI18N */"dark violet");
add(new Color(124, 252, 0), /* NOI18N */"lawn green");
add(new Color(119, 136, 153), /* NOI18N */"lightslategray");
add(new Color(230, 230, 250), /* NOI18N */"lavender");
add(new Color(248, 248, 255), /* NOI18N */"ghostwhite");
add(new Color(176, 224, 230), /* NOI18N */"powderblue");
add(new Color(218, 165, 32), /* NOI18N */"goldenrod");
add(new Color(255, 228, 181), /* NOI18N */"moccasin");
add(new Color(255, 228, 225), /* NOI18N */"mistyrose");
add(new Color(255, 255, 224), /* NOI18N */"light yellow");
add(new Color(255, 99, 71), /* NOI18N */"tomato");
add(new Color(245, 255, 250), /* NOI18N */"mintcream");
add(new Color(138, 43, 226), /* NOI18N */"blueviolet");
add(new Color(32, 178, 170), /* NOI18N */"light sea green");
add(new Color(255, 240, 245), /* NOI18N */"lavender blush");
add(new Color(127, 255, 212), /* NOI18N */"aquamarine");
add(new Color(165, 42, 42), /* NOI18N */"brown");
add(new Color(219, 112, 147), /* NOI18N */"pale violet red");
add(new Color(240, 255, 255), /* NOI18N */"azure");
add(new Color(107, 142, 35), /* NOI18N */"olivedrab");
add(new Color(47, 79, 79), /* NOI18N */"darkslategray");
add(new Color(139, 69, 19), /* NOI18N */"saddle brown");
add(new Color(160, 32, 240), /* NOI18N */"purple");
add(new Color(186, 85, 211), /* NOI18N */"medium orchid");
add(new Color(240, 255, 240), /* NOI18N */"honeydew");
add(new Color(176, 196, 222), /* NOI18N */"lightsteelblue");
add(new Color(64, 224, 208), /* NOI18N */"turquoise");
add(new Color(255, 127, 80), /* NOI18N */"coral");
add(new Color(184, 134, 11), /* NOI18N */"darkgoldenrod");
add(new Color(60, 179, 113), /* NOI18N */"mediumseagreen");
add(new Color(210, 180, 140), /* NOI18N */"tan");
add(new Color(255, 222, 173), /* NOI18N */"navajo white");
add(new Color(46, 139, 87), /* NOI18N */"sea green");
add(new Color(123, 104, 238), /* NOI18N */"mediumslateblue");
add(new Color(250, 250, 210), /* NOI18N */
"light goldenrod yellow");
add(new Color(135, 206, 235), /* NOI18N */"sky blue");
add(new Color(132, 112, 255), /* NOI18N */"lightslateblue");
add(new Color(250, 240, 230), /* NOI18N */"linen");
add(new Color(218, 112, 214), /* NOI18N */"orchid");
add(new Color(0, 0, 128), /* NOI18N */"navy blue");
add(new Color(253, 245, 230), /* NOI18N */"old lace");
add(new Color(240, 248, 255), /* NOI18N */"aliceblue");
add(new Color(72, 209, 204), /* NOI18N */"mediumturquoise");
add(new Color(255, 140, 0), /* NOI18N */"dark orange");
add(new Color(72, 61, 139), /* NOI18N */"dark slate blue");
add(new Color(255, 160, 122), /* NOI18N */"light salmon");
add(new Color(221, 160, 221), /* NOI18N */"plum");
add(new Color(238, 130, 238), /* NOI18N */"violet");
add(new Color(34, 139, 34), /* NOI18N */"forest green");
add(new Color(0, 255, 127), /* NOI18N */"springgreen");
add(new Color(85, 107, 47), /* NOI18N */"darkolivegreen");
add(new Color(238, 232, 170), /* NOI18N */"pale goldenrod");
add(new Color(245, 245, 220), /* NOI18N */"beige");
add(new Color(255, 250, 240), /* NOI18N */"floralwhite");
add(new Color(255, 218, 185), /* NOI18N */"peach puff");
add(new Color(50, 205, 50), /* NOI18N */"limegreen");
add(new Color(152, 251, 152), /* NOI18N */"palegreen");
add(new Color(240, 230, 140), /* NOI18N */"khaki");
add(new Color(188, 143, 143), /* NOI18N */"rosybrown");
add(new Color(244, 164, 96), /* NOI18N */"sandybrown");
add(new Color(189, 183, 107), /* NOI18N */"darkkhaki");
add(new Color(25, 25, 112), /* NOI18N */"midnight blue");
add(new Color(255, 235, 205), /* NOI18N */"blanched almond");
add(new Color(224, 255, 255), /* NOI18N */"light cyan");
add(new Color(255, 182, 193), /* NOI18N */"lightpink");
add(new Color(95, 158, 160), /* NOI18N */"cadetblue");
add(new Color(106, 90, 205), /* NOI18N */"slate blue");
add(new Color(245, 222, 179), /* NOI18N */"wheat");
add(new Color(255, 69, 0), /* NOI18N */"orangered");
add(new Color(127, 255, 0), /* NOI18N */"chartreuse");
add(new Color(255, 255, 255), /* NOI18N */"white");
add(new Color(65, 105, 225), /* NOI18N */"royalblue");
add(new Color(173, 216, 230), /* NOI18N */"light blue");
add(new Color(255, 250, 250), /* NOI18N */"snow");
add(new Color(255, 245, 238), /* NOI18N */"seashell");
add(new Color(250, 128, 114), /* NOI18N */"salmon");
add(new Color(255, 255, 240), /* NOI18N */"ivory");
add(new Color(255, 239, 213), /* NOI18N */"papaya whip");
add(new Color(153, 50, 204), /* NOI18N */"dark orchid");
add(new Color(208, 32, 144), /* NOI18N */"violet red");
add(new Color(255, 248, 220), /* NOI18N */"cornsilk");
add(new Color(255, 105, 180), /* NOI18N */"hotpink");
add(new Color(176, 48, 96), /* NOI18N */"maroon");
add(new Color(178, 34, 34), /* NOI18N */"firebrick");
add(new Color(240, 128, 128), /* NOI18N */"lightcoral");
add(new Color(220, 220, 220), /* NOI18N */"gainsboro");
add(new Color(216, 191, 216), /* NOI18N */"thistle");
add(new Color(135, 206, 250), /* NOI18N */"light sky blue");
add(new Color(210, 105, 30), /* NOI18N */"chocolate");
add(new Color(173, 255, 47), /* NOI18N */"green yellow");
add(new Color(112, 128, 144), /* NOI18N */"slate gray");
add(new Color(0, 191, 255), /* NOI18N */"deepskyblue");
add(new Color(255, 250, 205), /* NOI18N */"lemon chiffon");
add(new Color(0, 206, 209), /* NOI18N */"dark turquoise");
add(new Color(222, 184, 135), /* NOI18N */"burlywood");
add(new Color(199, 21, 133), /* NOI18N */"mediumvioletred");
add(new Color(250, 235, 215), /* NOI18N */"antique white");
add(new Color(255, 215, 0), /* NOI18N */"gold");
add(new Color(255, 20, 147), /* NOI18N */"deep pink");
add(new Color(205, 92, 92), /* NOI18N */"indianred");
add(new Color(0, 250, 154), /* NOI18N */"medium spring green");
}
}