UNPKG

libcolor

Version:

Basic color classes implementation

894 lines (845 loc) 33.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TRANSPARENT = exports.transparent = exports.BLUE = exports.blue = exports.CYAN = exports.cyan = exports.MAGENTA = exports.magenta = exports.GREEN = exports.green = exports.YELLOW = exports.yellow = exports.ORANGE = exports.orange = exports.PINK = exports.pink = exports.RED = exports.red = exports.BLACK = exports.black = exports.DARK_GRAY = exports.darkGray = exports.GRAY = exports.gray = exports.LIGHT_GRAY = exports.lightGray = exports.WHITE = exports.white = exports.Color = exports.Transparency = exports.CSSColors = undefined; var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** @babel */ var CSSColors = exports.CSSColors = { "transparent": [0, 0, 0, 0], "aliceblue": [240, 248, 255, 1], "antiquewhite": [250, 235, 215, 1], "aqua": [0, 255, 255, 1], "aquamarine": [127, 255, 212, 1], "azure": [240, 255, 255, 1], "beige": [245, 245, 220, 1], "bisque": [255, 228, 196, 1], "black": [0, 0, 0, 1], "blanchedalmond": [255, 235, 205, 1], "blue": [0, 0, 255, 1], "blueviolet": [138, 43, 226, 1], "brown": [165, 42, 42, 1], "burlywood": [222, 184, 135, 1], "cadetblue": [95, 158, 160, 1], "chartreuse": [127, 255, 0, 1], "chocolate": [210, 105, 30, 1], "coral": [255, 127, 80, 1], "cornflowerblue": [100, 149, 237, 1], "cornsilk": [255, 248, 220, 1], "crimson": [220, 20, 60, 1], "cyan": [0, 255, 255, 1], "darkblue": [0, 0, 139, 1], "darkcyan": [0, 139, 139, 1], "darkgoldenrod": [184, 134, 11, 1], "darkgray": [169, 169, 169, 1], "darkgreen": [0, 100, 0, 1], "darkgrey": [169, 169, 169, 1], "darkkhaki": [189, 183, 107, 1], "darkmagenta": [139, 0, 139, 1], "darkolivegreen": [85, 107, 47, 1], "darkorange": [255, 140, 0, 1], "darkorchid": [153, 50, 204, 1], "darkred": [139, 0, 0, 1], "darksalmon": [233, 150, 122, 1], "darkseagreen": [143, 188, 143, 1], "darkslateblue": [72, 61, 139, 1], "darkslategray": [47, 79, 79, 1], "darkslategrey": [47, 79, 79, 1], "darkturquoise": [0, 206, 209, 1], "darkviolet": [148, 0, 211, 1], "deeppink": [255, 20, 147, 1], "deepskyblue": [0, 191, 255, 1], "dimgray": [105, 105, 105, 1], "dimgrey": [105, 105, 105, 1], "dodgerblue": [30, 144, 255, 1], "firebrick": [178, 34, 34, 1], "floralwhite": [255, 250, 240, 1], "forestgreen": [34, 139, 34, 1], "fuchsia": [255, 0, 255, 1], "gainsboro": [220, 220, 220, 1], "ghostwhite": [248, 248, 255, 1], "gold": [255, 215, 0, 1], "goldenrod": [218, 165, 32, 1], "gray": [128, 128, 128, 1], "green": [0, 128, 0, 1], "greenyellow": [173, 255, 47, 1], "grey": [128, 128, 128, 1], "honeydew": [240, 255, 240, 1], "hotpink": [255, 105, 180, 1], "indianred": [205, 92, 92, 1], "indigo": [75, 0, 130, 1], "ivory": [255, 255, 240, 1], "khaki": [240, 230, 140, 1], "lavender": [230, 230, 250, 1], "lavenderblush": [255, 240, 245, 1], "lawngreen": [124, 252, 0, 1], "lemonchiffon": [255, 250, 205, 1], "lightblue": [173, 216, 230, 1], "lightcoral": [240, 128, 128, 1], "lightcyan": [224, 255, 255, 1], "lightgoldenrodyellow": [250, 250, 210, 1], "lightgray": [211, 211, 211, 1], "lightgreen": [144, 238, 144, 1], "lightgrey": [211, 211, 211, 1], "lightpink": [255, 182, 193, 1], "lightsalmon": [255, 160, 122, 1], "lightseagreen": [32, 178, 170, 1], "lightskyblue": [135, 206, 250, 1], "lightslategray": [119, 136, 153, 1], "lightslategrey": [119, 136, 153, 1], "lightsteelblue": [176, 196, 222, 1], "lightyellow": [255, 255, 224, 1], "lime": [0, 255, 0, 1], "limegreen": [50, 205, 50, 1], "linen": [250, 240, 230, 1], "magenta": [255, 0, 255, 1], "maroon": [128, 0, 0, 1], "mediumaquamarine": [102, 205, 170, 1], "mediumblue": [0, 0, 205, 1], "mediumorchid": [186, 85, 211, 1], "mediumpurple": [147, 112, 219, 1], "mediumseagreen": [60, 179, 113, 1], "mediumslateblue": [123, 104, 238, 1], "mediumspringgreen": [0, 250, 154, 1], "mediumturquoise": [72, 209, 204, 1], "mediumvioletred": [199, 21, 133, 1], "midnightblue": [25, 25, 112, 1], "mintcream": [245, 255, 250, 1], "mistyrose": [255, 228, 225, 1], "moccasin": [255, 228, 181, 1], "navajowhite": [255, 222, 173, 1], "navy": [0, 0, 128, 1], "oldlace": [253, 245, 230, 1], "olive": [128, 128, 0, 1], "olivedrab": [107, 142, 35, 1], "orange": [255, 165, 0, 1], "orangered": [255, 69, 0, 1], "orchid": [218, 112, 214, 1], "palegoldenrod": [238, 232, 170, 1], "palegreen": [152, 251, 152, 1], "paleturquoise": [175, 238, 238, 1], "palevioletred": [219, 112, 147, 1], "papayawhip": [255, 239, 213, 1], "peachpuff": [255, 218, 185, 1], "peru": [205, 133, 63, 1], "pink": [255, 192, 203, 1], "plum": [221, 160, 221, 1], "powderblue": [176, 224, 230, 1], "purple": [128, 0, 128, 1], "red": [255, 0, 0, 1], "rosybrown": [188, 143, 143, 1], "royalblue": [65, 105, 225, 1], "saddlebrown": [139, 69, 19, 1], "salmon": [250, 128, 114, 1], "sandybrown": [244, 164, 96, 1], "seagreen": [46, 139, 87, 1], "seashell": [255, 245, 238, 1], "sienna": [160, 82, 45, 1], "silver": [192, 192, 192, 1], "skyblue": [135, 206, 235, 1], "slateblue": [106, 90, 205, 1], "slategray": [112, 128, 144, 1], "slategrey": [112, 128, 144, 1], "snow": [255, 250, 250, 1], "springgreen": [0, 255, 127, 1], "steelblue": [70, 130, 180, 1], "tan": [210, 180, 140, 1], "teal": [0, 128, 128, 1], "thistle": [216, 191, 216, 1], "tomato": [255, 99, 71, 1], "turquoise": [64, 224, 208, 1], "violet": [238, 130, 238, 1], "wheat": [245, 222, 179, 1], "white": [255, 255, 255, 1], "whitesmoke": [245, 245, 245, 1], "yellow": [255, 255, 0, 1], "yellowgreen": [154, 205, 50, 1] }; var clamp_css_byte = function clamp_css_byte(i) { // Clamp to integer 0 .. 255. i = Math.round(i); // Seems to be what Chrome does (vs truncation). return i < 0 ? 0 : i > 255 ? 255 : i; }; var clamp_css_float = function clamp_css_float(f) { // Clamp to float 0.0 .. 1.0. return f < 0 ? 0 : f > 1 ? 1 : f; }; var parse_css_int = function parse_css_int(str) { // int or percentage. if (str[str.length - 1] === '%') return clamp_css_byte(parseFloat(str) / 100 * 255); return clamp_css_byte(parseInt(str)); }; var parse_css_float = function parse_css_float(str) { // float or percentage. if (str[str.length - 1] === '%') return clamp_css_float(parseFloat(str) / 100); return clamp_css_float(parseFloat(str)); }; var css_hue_to_rgb = function css_hue_to_rgb(m1, m2, h) { if (h < 0) h += 1;else if (h > 1) h -= 1; if (h * 6 < 1) return m1 + (m2 - m1) * h * 6; if (h * 2 < 1) return m2; if (h * 3 < 2) return m1 + (m2 - m1) * (2 / 3 - h) * 6; return m1; }; var Transparency = exports.Transparency = { OPAQUE: 1, BITMASK: 2, TRANSLUCENT: 3 }; var FACTOR = 0.7; var Color = exports.Color = function () { function Color() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$r = _ref.r, r = _ref$r === undefined ? NaN : _ref$r, _ref$g = _ref.g, g = _ref$g === undefined ? NaN : _ref$g, _ref$b = _ref.b, b = _ref$b === undefined ? NaN : _ref$b, _ref$a = _ref.a, a = _ref$a === undefined ? NaN : _ref$a, _ref$rgb = _ref.rgb, rgb = _ref$rgb === undefined ? NaN : _ref$rgb, _ref$rgba = _ref.rgba, rgba = _ref$rgba === undefined ? NaN : _ref$rgba, _ref$hasalpha = _ref.hasalpha, hasalpha = _ref$hasalpha === undefined ? false : _ref$hasalpha; (0, _classCallCheck3.default)(this, Color); this.falpha = 0.0; if (!isNaN(rgba)) { this.hasalpha = true; this.fromRGBACombinedInt({ rgba: rgba, hasalpha: hasalpha }); } else if (!isNaN(rgb)) { this.hasalpha = false; this.fromRGBCombinedInt({ rgb: rgb }); } else if (!isNaN(r) && !isNaN(g) && !isNaN(b) && !isNaN(a)) { this.hasalpha = true; if (r >= 0.0 && r <= 1.0 && g >= 0.0 && g <= 1.0 && b >= 0.0 && b <= 1.0 && a >= 0.0 && a <= 1.0) { this.fromRGBAComponentsFloat({ r: r, g: g, b: b, a: a }); } else { this.fromRGBAComponentsInt({ r: r, g: g, b: b, a: a }); } } else if (!isNaN(r) && !isNaN(g) && !isNaN(b)) { this.hasalpha = false; if (r >= 0.0 && r <= 1.0 && g >= 0.0 && g <= 1.0 && b >= 0.0 && b <= 1.0) { this.fromRGBComponentsFloat({ r: r, g: g, b: b }); } else { this.fromRGBComponentsInt({ r: r, g: g, b: b }); } } else { this.hasalpha = false; this.fromRGBACombinedInt({ rgb: 255 }); } } (0, _createClass3.default)(Color, [{ key: "brighter", value: function brighter() { var r = this.getRed(), g = this.getGreen(), b = this.getBlue(); /* * From 2D group: 1. black.brighter() should return grey 2. * applying brighter to blue will always return blue, * brighter 3. non pure color (non zero rgb) will eventually * return white */ var i = 1.0 / (1.0 - FACTOR); if (r === 0 && g === 0 && b === 0) { return new Color({ r: i, g: i, b: i }); } if (r > 0 && r < i) r = i; if (g > 0 && g < i) g = i; if (b > 0 && b < i) b = i; return new Color({ r: Math.min(r / FACTOR, 255), g: Math.min(g / FACTOR, 255), b: Math.min(b / FACTOR, 255) }); } }, { key: "darker", value: function darker() { return new Color({ r: Math.max(this.getRed() * FACTOR, 0), g: Math.max(this.getGreen() * FACTOR, 0), b: Math.max(this.getBlue() * FACTOR, 0) }); } }, { key: "equals", value: function equals(obj) { return obj instanceof Color && obj.getRGB() === this.getRGB(); } }, { key: "fromRGBACombinedInt", value: function fromRGBACombinedInt() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref2$rgba = _ref2.rgba, rgba = _ref2$rgba === undefined ? 0 : _ref2$rgba, _ref2$hasalpha = _ref2.hasalpha, hasalpha = _ref2$hasalpha === undefined ? true : _ref2$hasalpha; if (hasalpha) { this.value = rgba; } else { this.value = 0xff000000 | rgba; } } }, { key: "fromRGBCombinedInt", value: function fromRGBCombinedInt() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref3$rgb = _ref3.rgb, rgb = _ref3$rgb === undefined ? 0 : _ref3$rgb; this.value = 0xff000000 | rgb; } }, { key: "fromRGBComponentsFloat", value: function fromRGBComponentsFloat() { var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref4$r = _ref4.r, r = _ref4$r === undefined ? 0.0 : _ref4$r, _ref4$g = _ref4.g, g = _ref4$g === undefined ? 0.0 : _ref4$g, _ref4$b = _ref4.b, b = _ref4$b === undefined ? 0.0 : _ref4$b; this.fromRGBAComponentsInt(r * 255 + 0.5, g * 255 + 0.5, b * 255 + 0.5, 255); Color.testColorValueRangeFloat(r, g, b, 1.0); this.frgbvalue = new Array(3); this.frgbvalue[0] = r; this.frgbvalue[1] = g; this.frgbvalue[2] = b; this.falpha = 1.0; this.fvalue = this.frgbvalue; } }, { key: "fromRGBAComponentsFloat", value: function fromRGBAComponentsFloat() { var _ref5 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref5$r = _ref5.r, r = _ref5$r === undefined ? 0.0 : _ref5$r, _ref5$g = _ref5.g, g = _ref5$g === undefined ? 0.0 : _ref5$g, _ref5$b = _ref5.b, b = _ref5$b === undefined ? 0.0 : _ref5$b, _ref5$a = _ref5.a, a = _ref5$a === undefined ? 1 : _ref5$a; this.fromRGBAComponentsInt(r * 255 + 0.5, g * 255 + 0.5, b * 255 + 0.5, a * 255 + 0.5); this.frgbvalue = new Array(3); this.frgbvalue[0] = r; this.frgbvalue[1] = g; this.frgbvalue[2] = b; this.falpha = a; this.fvalue = this.frgbvalue; } }, { key: "fromRGBAComponentsInt", value: function fromRGBAComponentsInt() { var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref6$r = _ref6.r, r = _ref6$r === undefined ? 0 : _ref6$r, _ref6$g = _ref6.g, g = _ref6$g === undefined ? 0 : _ref6$g, _ref6$b = _ref6.b, b = _ref6$b === undefined ? 0 : _ref6$b, _ref6$a = _ref6.a, a = _ref6$a === undefined ? 255 : _ref6$a; this.value = (0xFF & a) << 24 | (0xFF & r) << 16 | (0xFF & g) << 8 | 0xFF & b; Color.testColorValueRangeInt(r, g, b, a); } }, { key: "fromRGBComponentsInt", value: function fromRGBComponentsInt() { var _ref7 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref7$r = _ref7.r, r = _ref7$r === undefined ? 0 : _ref7$r, _ref7$g = _ref7.g, g = _ref7$g === undefined ? 0 : _ref7$g, _ref7$b = _ref7.b, b = _ref7$b === undefined ? 0 : _ref7$b; var a = 255; this.fromRGBAComponentsInt({ r: r, g: g, b: b, a: a }); } }, { key: "getAlpha", value: function getAlpha() { return this.getRGB() >>> 24; } }, { key: "getBlue", value: function getBlue() { return this.getRGB() & 0xFF; } }, { key: "getColorComponents", value: function getColorComponents() { var compArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (this.fvalue === null) { return this.getRGBColorComponents(compArray); } var f = void 0, n = this.fvalue.length; if (compArray === null) { f = new Array(n); } else { f = compArray; } for (var i = 0; i < n; i++) { f[i] = this.fvalue[i]; } return f; } }, { key: "getComponents", value: function getComponents() { var compArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; if (!this.fvalue) { return this.getRGBComponents(compArray); } var f = void 0, n = this.fvalue.length; if (compArray === null) { f = new Array(n + 1); } else { f = compArray; } for (var i = 0; i < n; i++) { f[i] = this.fvalue[i]; } f[n] = this.falpha; return f; } }, { key: "getGreen", value: function getGreen() { return this.getRGB() >> 8 & 0xFF; } }, { key: "getRed", value: function getRed() { return this.getRGB() >> 16 & 0xFF; } }, { key: "getRGB", value: function getRGB() { return this.value; } }, { key: "getRGBColorComponents", value: function getRGBColorComponents() { var compArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var f = void 0; if (compArray === null) { f = new Array(3); } else { f = compArray; } if (this.frgbvalue === null) { f[0] = this.getRed() / 255; f[1] = this.getGreen() / 255; f[2] = this.getBlue() / 255; } else { f[0] = this.frgbvalue[0]; f[1] = this.frgbvalue[1]; f[2] = this.frgbvalue[2]; } return f; } }, { key: "getRGBComponents", value: function getRGBComponents() { var compArray = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; var f = void 0; if (compArray === null) { f = new Array(4); } else { f = compArray; } if (this.frgbvalue === null) { f[0] = this.getRed() / 255; f[1] = this.getGreen() / 255; f[2] = this.getBlue() / 255; f[3] = this.getAlpha() / 255; } else { f[0] = this.frgbvalue[0]; f[1] = this.frgbvalue[1]; f[2] = this.frgbvalue[2]; f[3] = this.falpha; } return f; } }, { key: "getTransparency", value: function getTransparency() { var alpha = this.getAlpha(); if (alpha === 0xff) { return Transparency.OPAQUE; } else if (alpha === 0) { return Transparency.BITMASK; } else { return Transparency.TRANSLUCENT; } } }, { key: "hashCode", value: function hashCode() { return this.value; } }, { key: "toCss", value: function toCss() { var params = [this.getRed(), this.getGreen(), this.getBlue()].join(","); return this.hasalpha ? ["rgba(", params, ",", (this.getAlpha() / 255).toFixed(1), ")"].join("") : "rgb(" + params + ")"; } }, { key: "toString", value: function toString() { return this.constructor.name + "[r=" + this.getRed() + ",g=" + this.getGreen() + ",b=" + this.getBlue() + "]"; } }], [{ key: "createRGBInstance", value: function createRGBInstance() { var rgb = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; return new Color({ rgb: 0xff000000 | rgb }); } }, { key: "createRGBAInstance", value: function createRGBAInstance() { var rgba = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var hasalpha = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; if (hasalpha) { return new Color({ rgba: rgba, hasalpha: hasalpha }); } return Color.createRGBInstance(rgba); } }, { key: "decode", value: function decode(color) { var str = color.replace(/ /g, '').toLowerCase(); if (str in CSSColors) { var colors = CSSColors[str].slice(); return new Color({ r: colors[0], g: colors[1], b: colors[2] }); } if (str[0] === '#') { if (color.indexOf("#") !== -1) { color = color.replace("#", "0x"); } var i = parseInt(color); return new Color({ r: i >> 16 & 0xFF, g: i >> 8 & 0xFF, b: i & 0xFF }); } else if (str.length === 7) { var iv = parseInt(str.substr(1), 16); return new Color({ r: (iv & 0xff0000) >> 16, g: (iv & 0xff00) >> 8, b: iv & 0xff, a: 255 }); } var op = str.indexOf('('), ep = str.indexOf(')'); if (op !== -1 && ep + 1 === str.length) { var fname = str.substr(0, op); var params = str.substr(op + 1, ep - (op + 1)).split(','); var alpha = 1; switch (fname) { case 'rgba': alpha = parse_css_float(params.pop()); if (alpha >= 0.0 && alpha < 1.0) { alpha = Math.floor(alpha * 255); } else if (alpha === 1) { alpha *= 255; } else { alpha = Math.round(alpha); } case 'rgb': return new Color({ r: parse_css_int(params[0]), g: parse_css_int(params[1]), b: parse_css_int(params[2]), a: alpha }); case 'hsla': alpha = parse_css_float(params.pop()); case 'hsl': var h = (parseFloat(params[0]) % 360 + 360) % 360 / 360; var s = parse_css_float(params[1]); var l = parse_css_float(params[2]); var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s; var m1 = l * 2 - m2; return new Color({ r: clamp_css_byte(css_hue_to_rgb(m1, m2, h + 1 / 3) * 255), g: clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255), b: clamp_css_byte(css_hue_to_rgb(m1, m2, h - 1 / 3) * 255), a: alpha }); } } } }, { key: "getColor", value: function getColor(nm, v) { var i = void 0; if (nm) { i = parseInt(nm); } else { return v; } return new Color({ r: i >> 16 & 0xFF, g: i >> 8 & 0xFF, b: i >> 0 & 0xFF }); } }, { key: "getHSBColor", value: function getHSBColor() { var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var s = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var b = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; return new Color({ rgb: Color.HSBtoRGB(h, s, b) }); } }, { key: "HSBtoRGB", value: function HSBtoRGB() { var hue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var saturation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var brightness = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var r = 0, g = 0, b = 0; if (saturation === 0) { r = g = b = brightness * 255.0 + 0.5; } else { var h = (hue - Math.floor(hue)) * 6.0, f = h - Math.floor(h), p = brightness * (1.0 - saturation), q = brightness * (1.0 - saturation * f), t = brightness * (1.0 - saturation * (1.0 - f)); switch (h) { case 0: r = brightness * 255.0 + 0.5; g = t * 255.0 + 0.5; b = p * 255.0 + 0.5; break; case 1: r = q * 255.0 + 0.5; g = brightness * 255.0 + 0.5; b = p * 255.0 + 0.5; break; case 2: r = p * 255.0 + 0.5; g = brightness * 255.0 + 0.5; b = t * 255.0 + 0.5; break; case 3: r = p * 255.0 + 0.5; g = q * 255.0 + 0.5; b = brightness * 255.0 + 0.5; break; case 4: r = t * 255.0 + 0.5; g = p * 255.0 + 0.5; b = brightness * 255.0 + 0.5; break; case 5: r = brightness * 255.0 + 0.5; g = p * 255.0 + 0.5; b = q * 255.0 + 0.5; break; } } return 0xff000000 | r << 16 | g << 8 | b << 0; } }, { key: "HSVtoRGB", value: function HSVtoRGB() { var h = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var s = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var v = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var i = void 0, f = void 0, p = void 0, q = void 0, t = void 0; if (s === 0) { return 0xff000000 | v << 16 | v << 8 | v << 0; } h /= 60; i = Math.floor(h); f = h - i; p = v * (1 - s); q = v * (1 - s * f); t = v * (1 - s * (1 - f)); switch (i) { case 0: return 0xff000000 | v << 16 | t << 8 | p << 0; case 1: return 0xff000000 | q << 16 | v << 8 | p << 0; case 2: return 0xff000000 | p << 16 | v << 8 | t << 0; case 3: return 0xff000000 | p << 16 | q << 8 | v << 0; case 4: return 0xff000000 | t << 16 | p << 8 | v << 0; default: return 0xff000000 | v << 16 | p << 8 | q << 0; } } }, { key: "RGBtoHSB", value: function RGBtoHSB() { var r = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var g = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var b = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var hsbvals = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var hue = void 0, saturation = void 0, brightness = void 0; if (hsbvals === null) { hsbvals = new Array(3); } var cmax = r > g ? r : g; if (b > cmax) { cmax = b; } var cmin = r < g ? r : g; if (b < cmin) { cmin = b; } brightness = cmax / 255.0; if (cmax !== 0) saturation = (cmax - cmin) / cmax;else saturation = 0; if (saturation === 0) { hue = 0; } else { var redc = (cmax - r) / (cmax - cmin), greenc = (cmax - g) / (cmax - cmin), bluec = (cmax - b) / (cmax - cmin); if (r === cmax) hue = bluec - greenc;else if (g === cmax) hue = 2.0 + redc - bluec;else hue = 4.0 + greenc - redc; hue = hue / 6.0; if (hue < 0) hue = hue + 1.0; } hsbvals[0] = hue; hsbvals[1] = saturation; hsbvals[2] = brightness; return hsbvals; } }, { key: "RGBtoHSV", value: function RGBtoHSV() { var r = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var g = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var b = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var hsvvals = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; var min = void 0, max = void 0, delta = void 0; min = Math.min(r, g, b); max = Math.max(r, g, b); if (hsvvals === null) { hsvvals = new Array(3); } hsvvals[2] = max; delta = max - min; if (max !== 0) { hsvvals[1] = delta / max; } else { hsvvals[1] = 0; hsvvals[0] = -1; return hsvvals; } if (r === max) { hsvvals[0] = (g - b) / delta; } else if (g === max) { hsvvals[0] = 2 + (b - r) / delta; } else { hsvvals[0] = 4 + (r - g) / delta; } hsvvals[0] *= 60; if (hsvvals[0] < 0) { hsvvals[0] += 360; } return hsvvals; } }, { key: "testColorValueRangeFloat", value: function testColorValueRangeFloat(r, g, b, a) { var rangeError = false, badComponentString = ""; if (a < 0.0 || a > 1.0) { rangeError = true; badComponentString = badComponentString + " Alpha"; } if (r < 0.0 || r > 1.0) { rangeError = true; badComponentString = badComponentString + " Red"; } if (g < 0.0 || g > 1.0) { rangeError = true; badComponentString = badComponentString + " Green"; } if (b < 0.0 || b > 1.0) { rangeError = true; badComponentString = badComponentString + " Blue"; } if (rangeError) { throw new Error("IllegalArgumentException", "Color parameter outside of expected range:" + badComponentString); } } }, { key: "testColorValueRangeInt", value: function testColorValueRangeInt(r, g, b, a) { var rangeError = false, badComponentString = ""; if (a < 0 || a > 255) { rangeError = true; badComponentString = badComponentString + " Alpha"; } if (r < 0 || r > 255) { rangeError = true; badComponentString = badComponentString + " Red"; } if (g < 0 || g > 255) { rangeError = true; badComponentString = badComponentString + " Green"; } if (b < 0 || b > 255) { rangeError = true; badComponentString = badComponentString + " Blue"; } if (rangeError) { throw new Error("IllegalArgumentException Color parameter outside of expected range:" + badComponentString); } } }]); return Color; }(); var white = exports.white = new Color({ r: 255, g: 255, b: 255 }); var WHITE = exports.WHITE = white; var lightGray = exports.lightGray = new Color({ r: 192, g: 192, b: 192 }); var LIGHT_GRAY = exports.LIGHT_GRAY = lightGray; var gray = exports.gray = new Color({ r: 128, g: 128, b: 128 }); var GRAY = exports.GRAY = gray; var darkGray = exports.darkGray = new Color({ r: 64, g: 64, b: 64 }); var DARK_GRAY = exports.DARK_GRAY = darkGray; var black = exports.black = new Color({ r: 0, g: 0, b: 0 }); var BLACK = exports.BLACK = black; var red = exports.red = new Color({ r: 255, g: 0, b: 0 }); var RED = exports.RED = red; var pink = exports.pink = new Color({ r: 255, g: 175, b: 175 }); var PINK = exports.PINK = pink; var orange = exports.orange = new Color({ r: 255, g: 200, b: 0 }); var ORANGE = exports.ORANGE = orange; var yellow = exports.yellow = new Color({ r: 255, g: 255, b: 0 }); var YELLOW = exports.YELLOW = yellow; var green = exports.green = new Color({ r: 0, g: 255, b: 0 }); var GREEN = exports.GREEN = green; var magenta = exports.magenta = new Color({ r: 255, g: 0, b: 255 }); var MAGENTA = exports.MAGENTA = magenta; var cyan = exports.cyan = new Color({ r: 0, g: 255, b: 255 }); var CYAN = exports.CYAN = cyan; var blue = exports.blue = new Color({ r: 0, g: 0, b: 255 }); var BLUE = exports.BLUE = blue; var transparent = exports.transparent = new Color({ r: 0, g: 0, b: 0, a: 0.0 }); var TRANSPARENT = exports.TRANSPARENT = transparent;