licensing cleanup (GPLv2)
[org.ibex.core.git] / src / org / ibex / graphics / Color.java
1 // Copyright 2000-2005 the Contributors, as shown in the revision logs.
2 // Licensed under the GNU General Public License version 2 ("the License").
3 // You may not use this file except in compliance with the License.
4
5 package org.ibex.graphics;
6 import java.util.*;
7 import org.ibex.util.*;
8
9 public class Color {
10     
11     public static int stringToColor(String s) {
12         // FIXME support three-char strings by doubling digits
13         if (s == null) return 0x00000000;
14         else if (standard.get(s) != null) return 0xFF000000 | ((Integer)standard.get(s)).intValue();
15         else if (s.length() == 7 && s.charAt(0) == '#') try {
16             // FEATURE  alpha
17             return 0xFF000000 |
18                 (Integer.parseInt(s.substring(1, 3), 16) << 16) |
19                 (Integer.parseInt(s.substring(3, 5), 16) << 8) |
20                 Integer.parseInt(s.substring(5, 7), 16);
21         } catch (NumberFormatException e) {
22             Log.info(Color.class, "invalid color " + s);
23             return 0;
24         }
25         else return 0; // FEATURE: error?
26     }
27
28     public static String colorToString(int argb) {
29         if ((argb & 0xFF000000) == 0) return null;
30         String red = Integer.toHexString((argb & 0x00FF0000) >> 16);
31         String green = Integer.toHexString((argb & 0x0000FF00) >> 8);
32         String blue = Integer.toHexString(argb & 0x000000FF);
33         if (red.length() < 2) red = "0" + red;
34         if (blue.length() < 2) blue = "0" + blue;
35         if (green.length() < 2) green = "0" + green;
36         return "#" + red + green + blue;
37     }
38
39     /** Copied verbatim from the SVG specification */
40     private static Hashtable standard = new Hashtable(400);
41     static {
42         standard.put("aliceblue", new Integer((240 << 16) | (248 << 8) | 255));
43         standard.put("antiquewhite", new Integer((250 << 16) | (235 << 8) | 215));
44         standard.put("aqua", new Integer((0 << 16) | (255 << 8) | 255));
45         standard.put("aquamarine", new Integer((127 << 16) | (255 << 8) | 212));
46         standard.put("azure", new Integer((240 << 16) | (255 << 8) | 255));
47         standard.put("beige", new Integer((245 << 16) | (245 << 8) | 220));
48         standard.put("bisque", new Integer((255 << 16) | (228 << 8) | 196));
49         standard.put("black", new Integer((0 << 16) | (0 << 8) | 0));
50         standard.put("blanchedalmond", new Integer((255 << 16) | (235 << 8) | 205));
51         standard.put("blue", new Integer((0 << 16) | (0 << 8) | 255));
52         standard.put("blueviolet", new Integer((138 << 16) | (43 << 8) | 226));
53         standard.put("brown", new Integer((165 << 16) | (42 << 8) | 42));
54         standard.put("burlywood", new Integer((222 << 16) | (184 << 8) | 135));
55         standard.put("cadetblue", new Integer((95 << 16) | (158 << 8) | 160));
56         standard.put("chartreuse", new Integer((127 << 16) | (255 << 8) | 0));
57         standard.put("chocolate", new Integer((210 << 16) | (105 << 8) | 30));
58         standard.put("coral", new Integer((255 << 16) | (127 << 8) | 80));
59         standard.put("cornflowerblue", new Integer((100 << 16) | (149 << 8) | 237));
60         standard.put("cornsilk", new Integer((255 << 16) | (248 << 8) | 220));
61         standard.put("crimson", new Integer((220 << 16) | (20 << 8) | 60));
62         standard.put("cyan", new Integer((0 << 16) | (255 << 8) | 255));
63         standard.put("darkblue", new Integer((0 << 16) | (0 << 8) | 139));
64         standard.put("darkcyan", new Integer((0 << 16) | (139 << 8) | 139));
65         standard.put("darkgoldenrod", new Integer((184 << 16) | (134 << 8) | 11));
66         standard.put("darkgray", new Integer((169 << 16) | (169 << 8) | 169));
67         standard.put("darkgreen", new Integer((0 << 16) | (100 << 8) | 0));
68         standard.put("darkgrey", new Integer((169 << 16) | (169 << 8) | 169));
69         standard.put("darkkhaki", new Integer((189 << 16) | (183 << 8) | 107));
70         standard.put("darkmagenta", new Integer((139 << 16) | (0 << 8) | 139));
71         standard.put("darkolivegreen", new Integer((85 << 16) | (107 << 8) | 47));
72         standard.put("darkorange", new Integer((255 << 16) | (140 << 8) | 0));
73         standard.put("darkorchid", new Integer((153 << 16) | (50 << 8) | 204));
74         standard.put("darkred", new Integer((139 << 16) | (0 << 8) | 0));
75         standard.put("darksalmon", new Integer((233 << 16) | (150 << 8) | 122));
76         standard.put("darkseagreen", new Integer((143 << 16) | (188 << 8) | 143));
77         standard.put("darkslateblue", new Integer((72 << 16) | (61 << 8) | 139));
78         standard.put("darkslategray", new Integer((47 << 16) | (79 << 8) | 79));
79         standard.put("darkslategrey", new Integer((47 << 16) | (79 << 8) | 79));
80         standard.put("darkturquoise", new Integer((0 << 16) | (206 << 8) | 209));
81         standard.put("darkviolet", new Integer((148 << 16) | (0 << 8) | 211));
82         standard.put("deeppink", new Integer((255 << 16) | (20 << 8) | 147));
83         standard.put("deepskyblue", new Integer((0 << 16) | (191 << 8) | 255));
84         standard.put("dimgray", new Integer((105 << 16) | (105 << 8) | 105));
85         standard.put("dimgrey", new Integer((105 << 16) | (105 << 8) | 105));
86         standard.put("dodgerblue", new Integer((30 << 16) | (144 << 8) | 255));
87         standard.put("firebrick", new Integer((178 << 16) | (34 << 8) | 34));
88         standard.put("floralwhite", new Integer((255 << 16) | (250 << 8) | 240));
89         standard.put("forestgreen", new Integer((34 << 16) | (139 << 8) | 34));
90         standard.put("fuchsia", new Integer((255 << 16) | (0 << 8) | 255));
91         standard.put("gainsboro", new Integer((220 << 16) | (220 << 8) | 220));
92         standard.put("ghostwhite", new Integer((248 << 16) | (248 << 8) | 255));
93         standard.put("gold", new Integer((255 << 16) | (215 << 8) | 0));
94         standard.put("goldenrod", new Integer((218 << 16) | (165 << 8) | 32));
95         standard.put("gray", new Integer((128 << 16) | (128 << 8) | 128));
96         standard.put("grey", new Integer((128 << 16) | (128 << 8) | 128));
97         standard.put("green", new Integer((0 << 16) | (128 << 8) | 0));
98         standard.put("greenyellow", new Integer((173 << 16) | (255 << 8) | 47));
99         standard.put("honeydew", new Integer((240 << 16) | (255 << 8) | 240));
100         standard.put("hotpink", new Integer((255 << 16) | (105 << 8) | 180));
101         standard.put("indianred", new Integer((205 << 16) | (92 << 8) | 92));
102         standard.put("indigo", new Integer((75 << 16) | (0 << 8) | 130));
103         standard.put("ivory", new Integer((255 << 16) | (255 << 8) | 240));
104         standard.put("khaki", new Integer((240 << 16) | (230 << 8) | 140));
105         standard.put("lavender", new Integer((230 << 16) | (230 << 8) | 250));
106         standard.put("lavenderblush", new Integer((255 << 16) | (240 << 8) | 245));
107         standard.put("lawngreen", new Integer((124 << 16) | (252 << 8) | 0));
108         standard.put("lemonchiffon", new Integer((255 << 16) | (250 << 8) | 205));
109         standard.put("lightblue", new Integer((173 << 16) | (216 << 8) | 230));
110         standard.put("lightcoral", new Integer((240 << 16) | (128 << 8) | 128));
111         standard.put("lightcyan", new Integer((224 << 16) | (255 << 8) | 255));
112         standard.put("lightgoldenrodyellow", new Integer((250 << 16) | (250 << 8) | 210));
113         standard.put("lightgray", new Integer((211 << 16) | (211 << 8) | 211));
114         standard.put("lightgreen", new Integer((144 << 16) | (238 << 8) | 144));
115         standard.put("lightgrey", new Integer((211 << 16) | (211 << 8) | 211));
116         standard.put("lightpink", new Integer((255 << 16) | (182 << 8) | 193));
117         standard.put("lightsalmon", new Integer((255 << 16) | (160 << 8) | 122));
118         standard.put("lightseagreen", new Integer((32 << 16) | (178 << 8) | 170));
119         standard.put("lightskyblue", new Integer((135 << 16) | (206 << 8) | 250));
120         standard.put("lightslategray", new Integer((119 << 16) | (136 << 8) | 153));
121         standard.put("lightslategrey", new Integer((119 << 16) | (136 << 8) | 153));
122         standard.put("lightsteelblue", new Integer((176 << 16) | (196 << 8) | 222));
123         standard.put("lightyellow", new Integer((255 << 16) | (255 << 8) | 224));
124         standard.put("lime", new Integer((0 << 16) | (255 << 8) | 0));
125         standard.put("limegreen", new Integer((50 << 16) | (205 << 8) | 50));
126         standard.put("linen", new Integer((250 << 16) | (240 << 8) | 230));
127         standard.put("magenta", new Integer((255 << 16) | (0 << 8) | 255));
128         standard.put("maroon", new Integer((128 << 16) | (0 << 8) | 0));
129         standard.put("mediumaquamarine", new Integer((102 << 16) | (205 << 8) | 170));
130         standard.put("mediumblue", new Integer((0 << 16) | (0 << 8) | 205));
131         standard.put("mediumorchid", new Integer((186 << 16) | (85 << 8) | 211));
132         standard.put("mediumpurple", new Integer((147 << 16) | (112 << 8) | 219));
133         standard.put("mediumseagreen", new Integer((60 << 16) | (179 << 8) | 113));
134         standard.put("mediumslateblue", new Integer((123 << 16) | (104 << 8) | 238));
135         standard.put("mediumspringgreen", new Integer((0 << 16) | (250 << 8) | 154));
136         standard.put("mediumturquoise", new Integer((72 << 16) | (209 << 8) | 204));
137         standard.put("mediumvioletred", new Integer((199 << 16) | (21 << 8) | 133));
138         standard.put("midnightblue", new Integer((25 << 16) | (25 << 8) | 112));
139         standard.put("mintcream", new Integer((245 << 16) | (255 << 8) | 250));
140         standard.put("mistyrose", new Integer((255 << 16) | (228 << 8) | 225));
141         standard.put("moccasin", new Integer((255 << 16) | (228 << 8) | 181));
142         standard.put("navajowhite", new Integer((255 << 16) | (222 << 8) | 173));
143         standard.put("navy", new Integer((0 << 16) | (0 << 8) | 128));
144         standard.put("oldlace", new Integer((253 << 16) | (245 << 8) | 230));
145         standard.put("olive", new Integer((128 << 16) | (128 << 8) | 0));
146         standard.put("olivedrab", new Integer((107 << 16) | (142 << 8) | 35));
147         standard.put("orange", new Integer((255 << 16) | (165 << 8) | 0));
148         standard.put("orangered", new Integer((255 << 16) | (69 << 8) | 0));
149         standard.put("orchid", new Integer((218 << 16) | (112 << 8) | 214));
150         standard.put("palegoldenrod", new Integer((238 << 16) | (232 << 8) | 170));
151         standard.put("palegreen", new Integer((152 << 16) | (251 << 8) | 152));
152         standard.put("paleturquoise", new Integer((175 << 16) | (238 << 8) | 238));
153         standard.put("palevioletred", new Integer((219 << 16) | (112 << 8) | 147));
154         standard.put("papayawhip", new Integer((255 << 16) | (239 << 8) | 213));
155         standard.put("peachpuff", new Integer((255 << 16) | (218 << 8) | 185));
156         standard.put("peru", new Integer((205 << 16) | (133 << 8) | 63));
157         standard.put("pink", new Integer((255 << 16) | (192 << 8) | 203));
158         standard.put("plum", new Integer((221 << 16) | (160 << 8) | 221));
159         standard.put("powderblue", new Integer((176 << 16) | (224 << 8) | 230));
160         standard.put("purple", new Integer((128 << 16) | (0 << 8) | 128));
161         standard.put("red", new Integer((255 << 16) | (0 << 8) | 0));
162         standard.put("rosybrown", new Integer((188 << 16) | (143 << 8) | 143));
163         standard.put("royalblue", new Integer((65 << 16) | (105 << 8) | 225));
164         standard.put("saddlebrown", new Integer((139 << 16) | (69 << 8) | 19));
165         standard.put("salmon", new Integer((250 << 16) | (128 << 8) | 114));
166         standard.put("sandybrown", new Integer((244 << 16) | (164 << 8) | 96));
167         standard.put("seagreen", new Integer((46 << 16) | (139 << 8) | 87));
168         standard.put("seashell", new Integer((255 << 16) | (245 << 8) | 238));
169         standard.put("sienna", new Integer((160 << 16) | (82 << 8) | 45));
170         standard.put("silver", new Integer((192 << 16) | (192 << 8) | 192));
171         standard.put("skyblue", new Integer((135 << 16) | (206 << 8) | 235));
172         standard.put("slateblue", new Integer((106 << 16) | (90 << 8) | 205));
173         standard.put("slategray", new Integer((112 << 16) | (128 << 8) | 144));
174         standard.put("slategrey", new Integer((112 << 16) | (128 << 8) | 144));
175         standard.put("snow", new Integer((255 << 16) | (250 << 8) | 250));
176         standard.put("springgreen", new Integer((0 << 16) | (255 << 8) | 127));
177         standard.put("steelblue", new Integer((70 << 16) | (130 << 8) | 180));
178         standard.put("tan", new Integer((210 << 16) | (180 << 8) | 140));
179         standard.put("teal", new Integer((0 << 16) | (128 << 8) | 128));
180         standard.put("thistle", new Integer((216 << 16) | (191 << 8) | 216));
181         standard.put("tomato", new Integer((255 << 16) | (99 << 8) | 71));
182         standard.put("turquoise", new Integer((64 << 16) | (224 << 8) | 208));
183         standard.put("violet", new Integer((238 << 16) | (130 << 8) | 238));
184         standard.put("wheat", new Integer((245 << 16) | (222 << 8) | 179));
185         standard.put("white", new Integer((255 << 16) | (255 << 8) | 255));
186         standard.put("whitesmoke", new Integer((245 << 16) | (245 << 8) | 245));
187         standard.put("yellow", new Integer((255 << 16) | (255 << 8) | 0));
188         standard.put("yellowgreen", new Integer((154 << 16) | (205 << 8) | 50));
189     }
190 }