Browse Source

removed color parser

v1.x
Tj Holowaychuk 14 years ago
parent
commit
ddf5c99bbf
  1. 153
      lib/colors.js
  2. 139
      lib/context2d.js

153
lib/colors.js

@ -1,153 +0,0 @@
/*!
* Canvas - colors
* Copyright (c) 2010 LearnBoost <tj@learnboost.com>
* MIT Licensed
*/
module.exports = {
transparent: 'rgba(255,255,255,0)'
, aliceblue: '#f0f8ff'
, antiquewhite: '#faebd7'
, aqua: '#00ffff'
, aquamarine: '#7fffd4'
, azure: '#f0ffff'
, beige: '#f5f5dc'
, bisque: '#ffe4c4'
, black: '#000000'
, blanchedalmond: '#ffebcd'
, blue: '#0000ff'
, blueviolet: '#8a2be2'
, brown: '#a52a2a'
, burlywood: '#deb887'
, cadetblue: '#5f9ea0'
, chartreuse: '#7fff00'
, chocolate: '#d2691e'
, coral: '#ff7f50'
, cornflowerblue: '#6495ed'
, cornsilk: '#fff8dc'
, crimson: '#dc143c'
, cyan: '#00ffff'
, darkblue: '#00008b'
, darkcyan: '#008b8b'
, darkgoldenrod: '#b8860b'
, darkgray: '#a9a9a9'
, darkgreen: '#006400'
, darkkhaki: '#bdb76b'
, darkmagenta: '#8b008b'
, darkolivegreen: '#556b2f'
, darkorange: '#ff8c00'
, darkorchid: '#9932cc'
, darkred: '#8b0000'
, darksalmon: '#e9967a'
, darkseagreen: '#8fbc8f'
, darkslateblue: '#483d8b'
, darkslategray: '#2f4f4f'
, darkturquoise: '#00ced1'
, darkviolet: '#9400d3'
, deeppink: '#ff1493'
, deepskyblue: '#00bfff'
, dimgray: '#696969'
, dodgerblue: '#1e90ff'
, feldspar: '#d19275'
, firebrick: '#b22222'
, floralwhite: '#fffaf0'
, forestgreen: '#228b22'
, fuchsia: '#ff00ff'
, gainsboro: '#dcdcdc'
, ghostwhite: '#f8f8ff'
, gold: '#ffd700'
, goldenrod: '#daa520'
, gray: '#808080'
, green: '#008000'
, greenyellow: '#adff2f'
, honeydew: '#f0fff0'
, hotpink: '#ff69b4'
, indianred : '#cd5c5c'
, indigo : '#4b0082'
, ivory: '#fffff0'
, khaki: '#f0e68c'
, lavender: '#e6e6fa'
, lavenderblush: '#fff0f5'
, lawngreen: '#7cfc00'
, lemonchiffon: '#fffacd'
, lightblue: '#add8e6'
, lightcoral: '#f08080'
, lightcyan: '#e0ffff'
, lightgoldenrodyellow: '#fafad2'
, lightgrey: '#d3d3d3'
, lightgreen: '#90ee90'
, lightpink: '#ffb6c1'
, lightsalmon: '#ffa07a'
, lightseagreen: '#20b2aa'
, lightskyblue: '#87cefa'
, lightslateblue: '#8470ff'
, lightslategray: '#778899'
, lightsteelblue: '#b0c4de'
, lightyellow: '#ffffe0'
, lime: '#00ff00'
, limegreen: '#32cd32'
, linen: '#faf0e6'
, magenta: '#ff00ff'
, maroon: '#800000'
, mediumaquamarine: '#66cdaa'
, mediumblue: '#0000cd'
, mediumorchid: '#ba55d3'
, mediumpurple: '#9370d8'
, mediumseagreen: '#3cb371'
, mediumslateblue: '#7b68ee'
, mediumspringgreen: '#00fa9a'
, mediumturquoise: '#48d1cc'
, mediumvioletred: '#c71585'
, midnightblue: '#191970'
, mintcream: '#f5fffa'
, mistyrose: '#ffe4e1'
, moccasin: '#ffe4b5'
, navajowhite: '#ffdead'
, navy: '#000080'
, oldlace: '#fdf5e6'
, olive: '#808000'
, olivedrab: '#6b8e23'
, orange: '#ffa500'
, orangered: '#ff4500'
, orchid: '#da70d6'
, palegoldenrod: '#eee8aa'
, palegreen: '#98fb98'
, paleturquoise: '#afeeee'
, palevioletred: '#d87093'
, papayawhip: '#ffefd5'
, peachpuff: '#ffdab9'
, peru: '#cd853f'
, pink: '#ffc0cb'
, plum: '#dda0dd'
, powderblue: '#b0e0e6'
, purple: '#800080'
, red: '#ff0000'
, rosybrown: '#bc8f8f'
, royalblue: '#4169e1'
, saddlebrown: '#8b4513'
, salmon: '#fa8072'
, sandybrown: '#f4a460'
, seagreen: '#2e8b57'
, seashell: '#fff5ee'
, sienna: '#a0522d'
, silver: '#c0c0c0'
, skyblue: '#87ceeb'
, slateblue: '#6a5acd'
, slategray: '#708090'
, snow: '#fffafa'
, springgreen: '#00ff7f'
, steelblue: '#4682b4'
, tan: '#d2b48c'
, teal: '#008080'
, thistle: '#d8bfd8'
, tomato: '#ff6347'
, turquoise: '#40e0d0'
, violet: '#ee82ee'
, violetred: '#d02090'
, wheat: '#f5deb3'
, white: '#ffffff'
, whitesmoke: '#f5f5f5'
, yellow: '#ffff00'
, yellowgreen: '#9acd32'
};

139
lib/context2d.js

@ -13,8 +13,7 @@ var canvas = require('../build/default/canvas')
, Context2d = canvas.CanvasRenderingContext2d , Context2d = canvas.CanvasRenderingContext2d
, CanvasGradient = canvas.CanvasGradient , CanvasGradient = canvas.CanvasGradient
, ImageData = canvas.ImageData , ImageData = canvas.ImageData
, PixelArray = canvas.CanvasPixelArray , PixelArray = canvas.CanvasPixelArray;
, colors = require('./colors');
/** /**
* Export `Context2d` as the module. * Export `Context2d` as the module.
@ -107,142 +106,6 @@ var parseFont = exports.parseFont = function(str){
return font; return font;
}; };
/**
* Parse the given color `str`.
*
* Current supports:
*
* - #nnn
* - #nnnnnn
* - rgb(r,g,b)
* - rgba(r,g,b,a)
* - color
*
* Examples
*
* - #fff
* - #FFF
* - #FFFFFF
* - rgb(255,255,5)
* - rgba(255,255,5,.8)
* - rgba(255,255,5,0.8)
* - hsl(300,100%,50%)
* - hsla(300,100%,50%,0.5)
* - white
* - red
*
* @param {String} str
* @return {Array}
* @api private
*/
var parseColor = exports.parseColor = function(str){
if (cache[str]) return cache[str];
str = colors[str] || String(str);
// RGBA
if (0 == str.indexOf('rgba')) {
var captures = /rgba\((\d{1,3}) *, *(\d{1,3}) *, *(\d{1,3}) *, *(\d+\.\d+|\.\d+|\d+) *\)/.exec(str);
if (!captures) return;
return cache[str] = [
parseInt(captures[1], 10)
, parseInt(captures[2], 10)
, parseInt(captures[3], 10)
, parseFloat(captures[4], 10)
];
// RGB
} else if (0 == str.indexOf('rgb')) {
var captures = /rgb\((\d{1,3}) *, *(\d{1,3}) *, *(\d{1,3}) *\)/.exec(str);
if (!captures) return;
return cache[str] = [
parseInt(captures[1], 10)
, parseInt(captures[2], 10)
, parseInt(captures[3], 10)
, 1
];
// #RRGGBB
} else if ('#' == str[0] && str.length > 4) {
var captures = /#([a-fA-F\d]{2})([a-fA-F\d]{2})([a-fA-F\d]{2})/.exec(str);
if (!captures) return;
return cache[str] = [
parseInt(captures[1], 16)
, parseInt(captures[2], 16)
, parseInt(captures[3], 16)
, 1
];
// #RGB
} else if ('#' == str[0]) {
var captures = /#([a-fA-F\d])([a-fA-F\d])([a-fA-F\d])/.exec(str);
if (!captures) return;
return cache[str] = [
parseInt(captures[1] + captures[1], 16)
, parseInt(captures[2] + captures[2], 16)
, parseInt(captures[3] + captures[3], 16)
, 1
];
// HSLA
} else if (0 == str.indexOf('hsla')) {
var captures = /hsla\((\d+\.\d+|\.\d+|\d+) *, *(\d+\.\d+|\.\d+|\d+)%? *, *(\d+\.\d+|\.\d+|\d+)%? *, *(\d+\.\d+|\.\d+|\d+) *\)/.exec(str);
if (!captures) return;
return cache[str] = hsl2rgb(
(((parseFloat(captures[1], 10) % 360) + 360) % 360) / 360
, parseFloat(captures[2], 10) / 100.0
, parseFloat(captures[3], 10) / 100.0
, parseFloat(captures[4], 10)
);
// HSL
} else if (0 == str.indexOf('hsl')) {
var captures = /hsl\((\d+\.\d+|\.\d+|\d+) *, *(\d+\.\d+|\.\d+|\d+)%? *, *(\d+\.\d+|\.\d+|\d+)%? *\)/.exec(str);
if (!captures) return;
return cache[str] = hsl2rgb(
(((parseFloat(captures[1], 10) % 360) + 360) % 360) / 360
, parseFloat(captures[2], 10) / 100.0
, parseFloat(captures[3], 10) / 100.0
, 1
);
}
};
/**
* HSLA -> RGB.
*
* @param {Number} h
* @param {Number} s
* @param {Number} l
* @param {Number} a
* @return {Array}
* @api private
*/
function hsl2rgb(h,s,l,a) {
var m2 = l <= 0.5 ? l*(s+1) : l+s-l*s
, m1 = l*2-m2;
return [
Math.round(hue2rgb(m1, m2, h+1/3) * 255)
, Math.round(hue2rgb(m1, m2, h) * 255)
, Math.round(hue2rgb(m1, m2, h-1/3) * 255)
, a
];
}
/**
* Hue to RGB
*
* @param {Number} m1
* @param {Number} m2
* @param {Number} h
* @return {Number}
* @api private
*/
function hue2rgb(m1,m2,h) {
if (h<0) h = h+1;
if (h>1) h = 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;
}
/** /**
* Add `color` stop at the given `offset`. * Add `color` stop at the given `offset`.
* *

Loading…
Cancel
Save