view usr/src/cmd/krb5/kadmin/gui/visualrt/sunsoft/jws/visual/rt/type/ColorStore.java @ 4:1a15d5aaf794

synchronized with onnv_86 (6202) in onnv-gate
author Koji Uno <koji.uno@sun.com>
date Mon, 31 Aug 2009 14:38:03 +0900
parents c9caec207d52
children
line wrap: on
line source

/*
 * 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");
    }
}