Source code: com/arranger/jarl/util/PaintUtil.java
1 package com.arranger.jarl.util;
2
3 import org.w3c.dom.Element;
4
5 import java.awt.*;
6 import java.lang.reflect.Field;
7 import java.util.HashMap;
8 import java.util.Map;
9
10 /**
11 * PaintUtil created on Feb 21, 2003
12 */
13 public class PaintUtil {
14
15 public static String PRIMARY_NAME = "color";
16 public static String DATA_NAME = "colorData";
17
18 protected static boolean m_init = false;
19 protected static Map m_colorMap = new HashMap();
20 protected static Map m_nameColorMap = new HashMap();
21
22 public static class Colors {
23
24 public static final int OrangeRed = 0xFF2400;
25 public static final int MediumRed = 0xDB7093;
26 public static final int Red = 0xFF0000;
27 public static final int Scarlet = 0x8C1717;
28 public static final int VioletRed = 0xCC3299;
29 public static final int Orchid = 0xDB70DB;
30 public static final int MediumOrchid = 0x9370DB;
31 public static final int DarkOrchid = 0x9932CD;
32 public static final int DarkPlum = 0x871F78;
33 public static final int BlueViolet = 0x9F5F9F;
34 public static final int Fuchsia = 0xFF00FF;
35 public static final int Pink = 0xBC8F8F;
36 public static final int Plum = 0xEAADEA;
37 public static final int Violet = 0x4F2F4F;
38 public static final int SpicyPink = 0xFF1CAE;
39 public static final int DarkPurple = 0x871F78;
40 public static final int Purple = 0x8E236B;
41 public static final int MediumVioletRed = 0xDB7093;
42 public static final int NeonPink = 0xFF6E7C;
43 public static final int Salmon = 0x6F4242;
44 public static final int MidnightBlue = 0x2F2F4F;
45 public static final int DarkBlue = 0x23238E;
46 public static final int NewMidnightBlue = 0x00009C;
47 public static final int NeonBlue = 0x4DD4DFF;
48 public static final int RichBlue = 0x5959AB;
49 public static final int Sky = 0x3299CC;
50 public static final int SteelBlue = 0x236B8E;
51 public static final int SlateBlue = 0x007FFF;
52 public static final int Blue = 0x0000FF;
53 public static final int CadetBlue = 0x5F9F9F;
54 public static final int CornFlower = 0x42426F;
55 public static final int DarkSlate = 0x6B238E;
56 public static final int LightBlue = 0xC0D9D9;
57 public static final int DarkGreenCopper = 0x4A766E;
58 public static final int Firebrick = 0x8E2323;
59 public static final int Sienna = 0x8E6B23;
60 public static final int Orange = 0xFF7F00;
61 public static final int MediumGoldenrod = 0xEAEAAE;
62 public static final int MandarinOrange = 0xE47833;
63 public static final int Goldenrod = 0xDBDB70;
64 public static final int Coral = 0xFF7F00;
65 public static final int BrightGold = 0xD9D919;
66 public static final int Yellow = 0xFFFF00;
67 public static final int LimeGreen = 0x32CD32;
68 public static final int GreenYellow = 0x93DB70;
69 public static final int DarkOliveGreen = 0x4F4F2F;
70 public static final int YellowGreen = 0x99CC32;
71 public static final int SpringGreen = 0x00FF7F;
72 public static final int SeaGreen = 0x238E68;
73 public static final int LightGreen = 0x8FBC8F;
74 public static final int MediumSpringGreen = 0x7FFF00;
75 public static final int MediumSeaGreen = 0x426F42;
76 public static final int MediumForestGreen = 0x6B8E23;
77 public static final int ForestGreen = 0x238E23;
78 public static final int HunterGreen = 0x215EE21;
79 public static final int DarkGreen = 0x2F4F2F;
80 public static final int Green = 0x00FF00;
81 public static final int Aquamarine = 0x70DB93;
82 public static final int Aqua = 0x00FFFF;
83 public static final int MediumAquamarine = 0x32CD99;
84 public static final int MediumTurquoise = 0x70DBDB;
85 public static final int Turquoise = 0xADEAEA;
86 public static final int MediumSlateBlue = 0x7F00FF;
87 public static final int MediumBlue = 0x3232CD;
88 public static final int DarkTurquoise = 0x7093DB;
89 public static final int LightSteelBlue = 0x8F8FBD;
90 public static final int Brown = 0xA62A2A;
91 public static final int CoolCopper = 0xD98719;
92 public static final int Copper = 0xB87333;
93 public static final int Brass = 0xB5A642;
94 public static final int Bronze = 0x8C7853;
95 public static final int BronzeII = 0xA67D3D;
96 public static final int Gold = 0xCD7F32;
97 public static final int OldGold = 0xCFB53B;
98 public static final int Silver = 0xE6E8FA;
99 public static final int LightGray = 0xCDCDCD;
100 public static final int DustyRose = 0x856363;
101 public static final int DarkTan = 0x97694F;
102 public static final int Feldspar = 0xD19275;
103 public static final int Quartz = 0xD9D9F3;
104 public static final int NewTan = 0xEBC79E;
105 public static final int LightWood = 0xE9C2A6;
106 public static final int MediumWood = 0xA68064;
107 public static final int DarkWood = 0x855E42;
108 public static final int BakersChocolate = 0x5C3317;
109 public static final int DarkBrown = 0x5C4033;
110 public static final int GreenCopper = 0x527F76;
111 public static final int IndianRed = 0x215E21;
112 public static final int Khaki = 0x9F9F5F;
113 public static final int Chocolate = 0x6B4226;
114 public static final int Tan = 0xDB9370;
115 public static final int Thistle = 0xD8BFD8;
116 public static final int Wheat = 0xD8D8BF;
117 public static final int LightGrey = 0xA8A8A8;
118 public static final int DimGrey = 0x545454;
119 public static final int Grey = 0xC0C0C0;
120 public static final int DarkSlateGrey = 0x2F4F4F;
121 public static final int Black = 0x000000;
122 public static final int Gray = 0x08080;
123 public static final int Lime = 0x0FF00;
124 public static final int Maroon = 0x3F0000;
125 public static final int Navy = 0x00003F;
126 public static final int Olive = 0x008000;
127 public static final int White = 0xFFFFFF;
128 public static final int Teal = 0x000080;
129 }
130
131
132 /**
133 * Helper class for getting an instance of Paint
134 *
135 * @param element
136 * @param primaryName typically 'color'
137 * @param dataName typically 'colorData'
138 */
139 public static Paint getPaint(Element element, String primaryName, String dataName) {
140 Paint paint = null;
141 String colorName = element.getAttribute(primaryName);
142 if (!StringTools.isEmpty(colorName)) {
143 paint = getPaint(colorName);
144 } else {
145 String colorData = element.getAttribute(dataName);
146 if (!StringTools.isEmpty(colorData)) {
147 int[] colors = StringTools.getIntArrayFromDelimitedString(colorData, ",");
148 paint = new Color(colors[0], colors[1], colors[2]);
149 }
150 }
151 return paint;
152 }
153
154 /**
155 * This will either be the value of a color ('black') or an rgb ('25, 25, 25);
156 */
157 public static Paint getPaintFromValue(String value) {
158 Paint paint = null;
159 if (value.indexOf(',') == -1) {
160 paint = getPaint(value);
161 } else {
162 int[] colors = StringTools.getIntArrayFromDelimitedString(value, ",");
163 paint = new Color(colors[0], colors[1], colors[2]);
164 }
165 return paint;
166 }
167
168 /**
169 * Try to get a friendly name for this
170 * @param color
171 */
172 public static String getDisplayName(Color color) {
173 Object key = new Integer(color.getRed() << 16 | color.getGreen() << 8 | color.getBlue());
174 String name = (String) m_nameColorMap.get(key);
175 if (name != null) {
176 return name + " (" + color.getRed() + ", " + color.getGreen() + ", " + color.getBlue() + ")";
177 } else {
178 return color.toString();
179 }
180 }
181
182 /**
183 * Loads color based on name
184 * @param paintName
185 * @see PaintUtil.Colors
186 */
187 public static Paint getPaint(String paintName) {
188 checkInit();
189 return (Paint) m_colorMap.get(paintName.toLowerCase());
190 }
191
192 /**
193 * Smarter Interpolation of colors.
194 * @param startColor
195 * @param endColor
196 * @param pct the amount of time we are long from the start color to the end color
197 */
198 public static Color interpolatePaint(Color startColor, Color endColor, double pct) {
199 int red = (int) InterpolateUtil.interpolate(
200 0,
201 1,
202 startColor.getRed(),
203 endColor.getRed(),
204 pct);
205
206 int green = (int) InterpolateUtil.interpolate(
207 0,
208 1,
209 startColor.getGreen(),
210 endColor.getGreen(),
211 pct);
212
213 int blue = (int) InterpolateUtil.interpolate(
214 0,
215 1,
216 startColor.getBlue(),
217 endColor.getBlue(),
218 pct);
219
220 return new Color(red, green, blue);
221 }
222
223 protected static void checkInit() {
224 if (!m_init) {
225 //iterate through all the fields in Colors
226 Field[] fields = Colors.class.getFields();
227 for (int index = 0; index < fields.length; index++) {
228 Field field = fields[index];
229 try {
230 int rgb = field.getInt(Colors.class);
231 m_colorMap.put(field.getName().toLowerCase(), new Color(rgb));
232 m_nameColorMap.put(new Integer(rgb), field.getName().toLowerCase());
233 } catch (Exception e) {
234 e.printStackTrace();
235 }
236 }
237 m_init = true;
238 }
239 }
240 }