/**
*
* The MIT License
*
* Copyright (c) 2011 the original author or authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.googlecode.charts4j;
import static com.googlecode.charts4j.collect.Preconditions.*;
import java.util.Locale;
/**
* RGB Color for all charts. There are many predefined colors defined herein
* (e.g. Color.AQUA). You can also construct a color with the usual hexdecimal
* notation (e.g. F0F8FF). You can also set the opacity.
*
* @author Julien Chastang (julien.c.chastang at gmail dot com)
*/
public class Color {
/** ALICEBLUE. */
public static final Color ALICEBLUE = new Color("F0F8FF");
/** ANTIQUEWHITE. */
public static final Color ANTIQUEWHITE = new Color("FAEBD7");
/** AQUA. */
public static final Color AQUA = new Color("00FFFF");
/** AQUAMARINE. */
public static final Color AQUAMARINE = new Color("7FFFD4");
/** AZURE. */
public static final Color AZURE = new Color("F0FFFF");
/** BEIGE. */
public static final Color BEIGE = new Color("F5F5DC");
/** BISQUE. */
public static final Color BISQUE = new Color("FFE4C4");
/** BLACK. */
public static final Color BLACK = new Color("000000");
/** BLANCHEDALMOND. */
public static final Color BLANCHEDALMOND = new Color("FFEBCD");
/** BLUE. */
public static final Color BLUE = new Color("0000FF");
/** BLUEVIOLET. */
public static final Color BLUEVIOLET = new Color("8A2BE2");
/** BROWN. */
public static final Color BROWN = new Color("A52A2A");
/** BURLYWOOD. */
public static final Color BURLYWOOD = new Color("DEB887");
/** CADETBLUE. */
public static final Color CADETBLUE = new Color("5F9EA0");
/** CHARTREUSE. */
public static final Color CHARTREUSE = new Color("7FFF00");
/** CHOCOLATE. */
public static final Color CHOCOLATE = new Color("D2691E");
/** CORAL. */
public static final Color CORAL = new Color("FF7F50");
/** CORNFLOWERBLUE. */
public static final Color CORNFLOWERBLUE = new Color("6495ED");
/** CORNSILK. */
public static final Color CORNSILK = new Color("FFF8DC");
/** CRIMSON. */
public static final Color CRIMSON = new Color("DC143C");
/** CYAN. */
public static final Color CYAN = new Color("00FFFF");
/** DARKBLUE. */
public static final Color DARKBLUE = new Color("00008B");
/** DARKCYAN. */
public static final Color DARKCYAN = new Color("008B8B");
/** DARKGOLDENROD. */
public static final Color DARKGOLDENROD = new Color("B8860B");
/** DARKGRAY. */
public static final Color DARKGRAY = new Color("A9A9A9");
/** DARKGREEN. */
public static final Color DARKGREEN = new Color("006400");
/** DARKKHAKI. */
public static final Color DARKKHAKI = new Color("BDB76B");
/** DARKMAGENTA. */
public static final Color DARKMAGENTA = new Color("8B008B");
/** DARKOLIVEGREEN. */
public static final Color DARKOLIVEGREEN = new Color("556B2F");
/** DARKORANGE. */
public static final Color DARKORANGE = new Color("FF8C00");
/** DARKORCHID. */
public static final Color DARKORCHID = new Color("9932CC");
/** DARKRED. */
public static final Color DARKRED = new Color("8B0000");
/** DARKSALMON. */
public static final Color DARKSALMON = new Color("E9967A");
/** DARKSEAGREEN. */
public static final Color DARKSEAGREEN = new Color("8FBC8F");
/** DARKSLATEBLUE. */
public static final Color DARKSLATEBLUE = new Color("483D8B");
/** DARKSLATEGRAY. */
public static final Color DARKSLATEGRAY = new Color("2F4F4F");
/** DARKTURQUOISE. */
public static final Color DARKTURQUOISE = new Color("00CED1");
/** DARKVIOLET. */
public static final Color DARKVIOLET = new Color("9400D3");
/** DEEPPINK. */
public static final Color DEEPPINK = new Color("FF1493");
/** DEEPSKYBLUE. */
public static final Color DEEPSKYBLUE = new Color("00BFFF");
/** DIMGRAY. */
public static final Color DIMGRAY = new Color("696969");
/** DODGERBLUE. */
public static final Color DODGERBLUE = new Color("1E90FF");
/** FIREBRICK. */
public static final Color FIREBRICK = new Color("B22222");
/** FLORALWHITE. */
public static final Color FLORALWHITE = new Color("FFFAF0");
/** FORESTGREEN. */
public static final Color FORESTGREEN = new Color("228B22");
/** FUCHSIA. */
public static final Color FUCHSIA = new Color("FF00FF");
/** GAINSBORO. */
public static final Color GAINSBORO = new Color("DCDCDC");
/** GHOSTWHITE. */
public static final Color GHOSTWHITE = new Color("F8F8FF");
/** GOLD. */
public static final Color GOLD = new Color("FFD700");
/** GOLDENROD. */
public static final Color GOLDENROD = new Color("DAA520");
/** GRAY. */
public static final Color GRAY = new Color("808080");
/** GREEN. */
public static final Color GREEN = new Color("008000");
/** GREENYELLOW. */
public static final Color GREENYELLOW = new Color("ADFF2F");
/** HONEYDEW. */
public static final Color HONEYDEW = new Color("F0FFF0");
/** HOTPINK. */
public static final Color HOTPINK = new Color("FF69B4");
/** INDIANRED. */
public static final Color INDIANRED = new Color("CD5C5C");
/** INDIGO. */
public static final Color INDIGO = new Color("4B0082");
/** IVORY. */
public static final Color IVORY = new Color("FFFFF0");
/** KHAKI. */
public static final Color KHAKI = new Color("F0E68C");
/** LAVENDER. */
public static final Color LAVENDER = new Color("E6E6FA");
/** LAVENDERBLUSH. */
public static final Color LAVENDERBLUSH = new Color("FFF0F5");
/** LAWNGREEN. */
public static final Color LAWNGREEN = new Color("7CFC00");
/** LEMONCHIFFON. */
public static final Color LEMONCHIFFON = new Color("FFFACD");
/** LIGHTBLUE. */
public static final Color LIGHTBLUE = new Color("ADD8E6");
/** LIGHTCORAL. */
public static final Color LIGHTCORAL = new Color("F08080");
/** LIGHTCYAN. */
public static final Color LIGHTCYAN = new Color("E0FFFF");
/** LIGHTGOLDENRODYELLOW. */
public static final Color LIGHTGOLDENRODYELLOW = new Color("FAFAD2");
/** LIGHTGREEN. */
public static final Color LIGHTGREEN = new Color("90EE90");
/** LIGHTGREY. */
public static final Color LIGHTGREY = new Color("D3D3D3");
/** LIGHTPINK. */
public static final Color LIGHTPINK = new Color("FFB6C1");
/** LIGHTSALMON. */
public static final Color LIGHTSALMON = new Color("FFA07A");
/** LIGHTSEAGREEN. */
public static final Color LIGHTSEAGREEN = new Color("20B2AA");
/** LIGHTSKYBLUE. */
public static final Color LIGHTSKYBLUE = new Color("87CEFA");
/** LIGHTSLATEGRAY. */
public static final Color LIGHTSLATEGRAY = new Color("778899");
/** LIGHTSTEELBLUE. */
public static final Color LIGHTSTEELBLUE = new Color("B0C4DE");
/** LIGHTYELLOW. */
public static final Color LIGHTYELLOW = new Color("FFFFE0");
/** LIME. */
public static final Color LIME = new Color("00FF00");
/** LIMEGREEN. */
public static final Color LIMEGREEN = new Color("32CD32");
/** LINEN. */
public static final Color LINEN = new Color("FAF0E6");
/** MAGENTA. */
public static final Color MAGENTA = new Color("FF00FF");
/** MAROON. */
public static final Color MAROON = new Color("800000");
/** MEDIUMAQUAMARINE. */
public static final Color MEDIUMAQUAMARINE = new Color("66CDAA");
/** MEDIUMBLUE. */
public static final Color MEDIUMBLUE = new Color("0000CD");
/** MEDIUMORCHID. */
public static final Color MEDIUMORCHID = new Color("BA55D3");
/** MEDIUMPURPLE. */
public static final Color MEDIUMPURPLE = new Color("9370DB");
/** MEDIUMSEAGREEN. */
public static final Color MEDIUMSEAGREEN = new Color("3CB371");
/** MEDIUMSLATEBLUE. */
public static final Color MEDIUMSLATEBLUE = new Color("7B68EE");
/** MEDIUMSPRINGGREEN. */
public static final Color MEDIUMSPRINGGREEN = new Color("00FA9A");
/** MEDIUMTURQUOISE. */
public static final Color MEDIUMTURQUOISE = new Color("48D1CC");
/** MEDIUMVIOLETRED. */
public static final Color MEDIUMVIOLETRED = new Color("C71585");
/** MIDNIGHTBLUE. */
public static final Color MIDNIGHTBLUE = new Color("191970");
/** MINTCREAM. */
public static final Color MINTCREAM = new Color("F5FFFA");
/** MISTYROSE. */
public static final Color MISTYROSE = new Color("FFE4E1");
/** MOCCASIN. */
public static final Color MOCCASIN = new Color("FFE4B5");
/** NAVAJOWHITE. */
public static final Color NAVAJOWHITE = new Color("FFDEAD");
/** NAVY. */
public static final Color NAVY = new Color("000080");
/** OLDLACE. */
public static final Color OLDLACE = new Color("FDF5E6");
/** OLIVE. */
public static final Color OLIVE = new Color("808000");
/** OLIVEDRAB. */
public static final Color OLIVEDRAB = new Color("6B8E23");
/** ORANGE. */
public static final Color ORANGE = new Color("FFA500");
/** ORANGERED. */
public static final Color ORANGERED = new Color("FF4500");
/** ORCHID. */
public static final Color ORCHID = new Color("DA70D6");
/** PALEGOLDENROD. */
public static final Color PALEGOLDENROD = new Color("EEE8AA");
/** PALEGREEN. */
public static final Color PALEGREEN = new Color("98FB98");
/** PALETURQUOISE. */
public static final Color PALETURQUOISE = new Color("AFEEEE");
/** PALEVIOLETRED. */
public static final Color PALEVIOLETRED = new Color("DB7093");
/** PAPAYAWHIP. */
public static final Color PAPAYAWHIP = new Color("FFEFD5");
/** PEACHPUFF. */
public static final Color PEACHPUFF = new Color("FFDAB9");
/** PERU. */
public static final Color PERU = new Color("CD853F");
/** PINK. */
public static final Color PINK = new Color("FFC0CB");
/** PLUM. */
public static final Color PLUM = new Color("DDA0DD");
/** POWDERBLUE. */
public static final Color POWDERBLUE = new Color("B0E0E6");
/** PURPLE. */
public static final Color PURPLE = new Color("800080");
/** RED. */
public static final Color RED = new Color("FF0000");
/** ROSYBROWN. */
public static final Color ROSYBROWN = new Color("BC8F8F");
/** ROYALBLUE. */
public static final Color ROYALBLUE = new Color("4169E1");
/** SADDLEBROWN. */
public static final Color SADDLEBROWN = new Color("8B4513");
/** SALMON. */
public static final Color SALMON = new Color("FA8072");
/** SANDYBROWN. */
public static final Color SANDYBROWN = new Color("F4A460");
/** SEAGREEN. */
public static final Color SEAGREEN = new Color("2E8B57");
/** SEASHELL. */
public static final Color SEASHELL = new Color("FFF5EE");
/** SIENNA. */
public static final Color SIENNA = new Color("A0522D");
/** SILVER. */
public static final Color SILVER = new Color("C0C0C0");
/** SKYBLUE. */
public static final Color SKYBLUE = new Color("87CEEB");
/** SLATEBLUE. */
public static final Color SLATEBLUE = new Color("6A5ACD");
/** SLATEGRAY. */
public static final Color SLATEGRAY = new Color("708090");
/** SNOW. */
public static final Color SNOW = new Color("FFFAFA");
/** SPRINGGREEN. */
public static final Color SPRINGGREEN = new Color("00FF7F");
/** STEELBLUE. */
public static final Color STEELBLUE = new Color("4682B4");
/** TAN. */
public static final Color TAN = new Color("D2B48C");
/** TEAL. */
public static final Color TEAL = new Color("008080");
/** THISTLE. */
public static final Color THISTLE = new Color("D8BFD8");
/** TOMATO. */
public static final Color TOMATO = new Color("FF6347");
/** TURQUOISE. */
public static final Color TURQUOISE = new Color("40E0D0");
/** VIOLET. */
public static final Color VIOLET = new Color("EE82EE");
/** WHEAT. */
public static final Color WHEAT = new Color("F5DEB3");
/** WHITE. */
public static final Color WHITE = new Color("FFFFFF");
/** WHITESMOKE. */
public static final Color WHITESMOKE = new Color("F5F5F5");
/** YELLOW. */
public static final Color YELLOW = new Color("FFFF00");
/** YELLOWGREEN. */
public static final Color YELLOWGREEN = new Color("9ACD32");
/** Max opacity. **/
private static final int MAX_OPACITY = 100;
/** Min opacity. **/
private static final int MIN_OPACITY = 0;
/** Color string hex. **/
private final String color;
/** Opacity string hex. **/
private final String opacity;
/**
* The Constructor.
*
* @param color
* the color
*
* @see #newColor(String)
*/
Color(final String color) {
checkNotNull(color, "color cannot be null.");
this.color = validateColor(color);
opacity = "FF";
}
/**
* The Constructor.
*
* @param color
* the color
* @param opacity
* the opacity
*
* @see #newColor(String, int)
*/
Color(final String color, final int opacity) {
checkNotNull(color, "color cannot be null.");
this.color = validateColor(color);
this.opacity = validateOpacity(opacity);
}
/**
* The Constructor.
*
* @param color
* the color
* @param opacity
* the opacity
*
* @see #newColor(Color, int)
*/
Color(final Color color, final int opacity) {
checkNotNull(color, "color cannot be null.");
this.color = color.toString().substring(0, 6);
this.opacity = validateOpacity(opacity);
}
/**
* Method to validate color.
*
* @param color
* Color to validate
*
* @return Validated RGB color string.
*/
private String validateColor(final String color) {
int colorInt;
try {
colorInt = Integer.parseInt(color, 16);
} catch (NumberFormatException e) {
throw new IllegalArgumentException(color + " is not a valid color.");
}
// Bit shifting 3 bytes should yield 0 for rgb colors.
checkArgument((colorInt >> 24) == 0, "%s is not a valid color.", color);
checkArgument(color.length() == 6, "%s is not a valid color. (Must be 6 charcters long).", color);
return color.toUpperCase(Locale.US);
}
/**
* Method to validate opacity.
*
* @param opacityInt
* opacity to validate
*
* @return opacity expressed as a hexadecimal
*/
private String validateOpacity(final int opacityInt) {
checkArgument((opacityInt >= MIN_OPACITY && opacityInt <= MAX_OPACITY), "%s is not a valid opacity.", opacityInt);
final String s = Integer.toHexString((int) (opacityInt / 100d * (0xff))).toUpperCase(Locale.US);
return (s.length() == 1) ? "0" + s : s;
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return color + ((!"FF".equals(opacity)) ? opacity : "");
}
/**
* Pass in an RGB color string from 000000 to FFFFFF.
*
* @param color
* RGB color in hexidecimal. Cannot be null.
*
* @return a newly constructed color.
*/
public static Color newColor(final String color) {
return new Color(color);
}
/**
* Pass in an RGB color string from 000000 to FFFFFF
*
* You can also specify transparency by supplying a value between 0 and 100
* where 0 is completely transparent and 100 completely opaque.
*
* @param color
* RGB color in hexidecimal. Cannot be null.
* @param opacity
* Supply a number between 0 and 100. 0 is completely
* transparent, and 100 is completely opaque.
*
* @return a newly constructed color
*/
public static Color newColor(final String color, final int opacity) {
return new Color(color, opacity);
}
/**
* Construct a color by passing in a color constant (e.g. Color.Blue) and an
* opacity.
*
* @param color
* Color constant (ex: Color.Blue)
* @param opacity
* Supply a number between 0 and 100. 0 is completely
* transparent, and 100 is completely opaque.
*
* @return a newly constructed color
*/
public static Color newColor(final Color color, final int opacity) {
return new Color(color, opacity);
}
}