blob: 3b21b31816d834aa19da4eee7783c79c452d6764 [file] [log] [blame]
// Functions dealing with parsing/stringifying color go here.
// Create the following with
// node ./htmlcanvas/_namedcolors.js --expose-wasm
// JS/closure doesn't have a constexpr like thing which
// would really help here. Since we don't, we pre-compute
// the map, which saves (a tiny amount of) startup time
// and (a small amount of) code size.
/* @dict */
var colorMap = {
'aliceblue': Float32Array.of(0.941, 0.973, 1.000, 1.000),
'antiquewhite': Float32Array.of(0.980, 0.922, 0.843, 1.000),
'aqua': Float32Array.of(0.000, 1.000, 1.000, 1.000),
'aquamarine': Float32Array.of(0.498, 1.000, 0.831, 1.000),
'azure': Float32Array.of(0.941, 1.000, 1.000, 1.000),
'beige': Float32Array.of(0.961, 0.961, 0.863, 1.000),
'bisque': Float32Array.of(1.000, 0.894, 0.769, 1.000),
'black': Float32Array.of(0.000, 0.000, 0.000, 1.000),
'blanchedalmond': Float32Array.of(1.000, 0.922, 0.804, 1.000),
'blue': Float32Array.of(0.000, 0.000, 1.000, 1.000),
'blueviolet': Float32Array.of(0.541, 0.169, 0.886, 1.000),
'brown': Float32Array.of(0.647, 0.165, 0.165, 1.000),
'burlywood': Float32Array.of(0.871, 0.722, 0.529, 1.000),
'cadetblue': Float32Array.of(0.373, 0.620, 0.627, 1.000),
'chartreuse': Float32Array.of(0.498, 1.000, 0.000, 1.000),
'chocolate': Float32Array.of(0.824, 0.412, 0.118, 1.000),
'coral': Float32Array.of(1.000, 0.498, 0.314, 1.000),
'cornflowerblue': Float32Array.of(0.392, 0.584, 0.929, 1.000),
'cornsilk': Float32Array.of(1.000, 0.973, 0.863, 1.000),
'crimson': Float32Array.of(0.863, 0.078, 0.235, 1.000),
'cyan': Float32Array.of(0.000, 1.000, 1.000, 1.000),
'darkblue': Float32Array.of(0.000, 0.000, 0.545, 1.000),
'darkcyan': Float32Array.of(0.000, 0.545, 0.545, 1.000),
'darkgoldenrod': Float32Array.of(0.722, 0.525, 0.043, 1.000),
'darkgray': Float32Array.of(0.663, 0.663, 0.663, 1.000),
'darkgreen': Float32Array.of(0.000, 0.392, 0.000, 1.000),
'darkgrey': Float32Array.of(0.663, 0.663, 0.663, 1.000),
'darkkhaki': Float32Array.of(0.741, 0.718, 0.420, 1.000),
'darkmagenta': Float32Array.of(0.545, 0.000, 0.545, 1.000),
'darkolivegreen': Float32Array.of(0.333, 0.420, 0.184, 1.000),
'darkorange': Float32Array.of(1.000, 0.549, 0.000, 1.000),
'darkorchid': Float32Array.of(0.600, 0.196, 0.800, 1.000),
'darkred': Float32Array.of(0.545, 0.000, 0.000, 1.000),
'darksalmon': Float32Array.of(0.914, 0.588, 0.478, 1.000),
'darkseagreen': Float32Array.of(0.561, 0.737, 0.561, 1.000),
'darkslateblue': Float32Array.of(0.282, 0.239, 0.545, 1.000),
'darkslategray': Float32Array.of(0.184, 0.310, 0.310, 1.000),
'darkslategrey': Float32Array.of(0.184, 0.310, 0.310, 1.000),
'darkturquoise': Float32Array.of(0.000, 0.808, 0.820, 1.000),
'darkviolet': Float32Array.of(0.580, 0.000, 0.827, 1.000),
'deeppink': Float32Array.of(1.000, 0.078, 0.576, 1.000),
'deepskyblue': Float32Array.of(0.000, 0.749, 1.000, 1.000),
'dimgray': Float32Array.of(0.412, 0.412, 0.412, 1.000),
'dimgrey': Float32Array.of(0.412, 0.412, 0.412, 1.000),
'dodgerblue': Float32Array.of(0.118, 0.565, 1.000, 1.000),
'firebrick': Float32Array.of(0.698, 0.133, 0.133, 1.000),
'floralwhite': Float32Array.of(1.000, 0.980, 0.941, 1.000),
'forestgreen': Float32Array.of(0.133, 0.545, 0.133, 1.000),
'fuchsia': Float32Array.of(1.000, 0.000, 1.000, 1.000),
'gainsboro': Float32Array.of(0.863, 0.863, 0.863, 1.000),
'ghostwhite': Float32Array.of(0.973, 0.973, 1.000, 1.000),
'gold': Float32Array.of(1.000, 0.843, 0.000, 1.000),
'goldenrod': Float32Array.of(0.855, 0.647, 0.125, 1.000),
'gray': Float32Array.of(0.502, 0.502, 0.502, 1.000),
'green': Float32Array.of(0.000, 0.502, 0.000, 1.000),
'greenyellow': Float32Array.of(0.678, 1.000, 0.184, 1.000),
'grey': Float32Array.of(0.502, 0.502, 0.502, 1.000),
'honeydew': Float32Array.of(0.941, 1.000, 0.941, 1.000),
'hotpink': Float32Array.of(1.000, 0.412, 0.706, 1.000),
'indianred': Float32Array.of(0.804, 0.361, 0.361, 1.000),
'indigo': Float32Array.of(0.294, 0.000, 0.510, 1.000),
'ivory': Float32Array.of(1.000, 1.000, 0.941, 1.000),
'khaki': Float32Array.of(0.941, 0.902, 0.549, 1.000),
'lavender': Float32Array.of(0.902, 0.902, 0.980, 1.000),
'lavenderblush': Float32Array.of(1.000, 0.941, 0.961, 1.000),
'lawngreen': Float32Array.of(0.486, 0.988, 0.000, 1.000),
'lemonchiffon': Float32Array.of(1.000, 0.980, 0.804, 1.000),
'lightblue': Float32Array.of(0.678, 0.847, 0.902, 1.000),
'lightcoral': Float32Array.of(0.941, 0.502, 0.502, 1.000),
'lightcyan': Float32Array.of(0.878, 1.000, 1.000, 1.000),
'lightgoldenrodyellow': Float32Array.of(0.980, 0.980, 0.824, 1.000),
'lightgray': Float32Array.of(0.827, 0.827, 0.827, 1.000),
'lightgreen': Float32Array.of(0.565, 0.933, 0.565, 1.000),
'lightgrey': Float32Array.of(0.827, 0.827, 0.827, 1.000),
'lightpink': Float32Array.of(1.000, 0.714, 0.757, 1.000),
'lightsalmon': Float32Array.of(1.000, 0.627, 0.478, 1.000),
'lightseagreen': Float32Array.of(0.125, 0.698, 0.667, 1.000),
'lightskyblue': Float32Array.of(0.529, 0.808, 0.980, 1.000),
'lightslategray': Float32Array.of(0.467, 0.533, 0.600, 1.000),
'lightslategrey': Float32Array.of(0.467, 0.533, 0.600, 1.000),
'lightsteelblue': Float32Array.of(0.690, 0.769, 0.871, 1.000),
'lightyellow': Float32Array.of(1.000, 1.000, 0.878, 1.000),
'lime': Float32Array.of(0.000, 1.000, 0.000, 1.000),
'limegreen': Float32Array.of(0.196, 0.804, 0.196, 1.000),
'linen': Float32Array.of(0.980, 0.941, 0.902, 1.000),
'magenta': Float32Array.of(1.000, 0.000, 1.000, 1.000),
'maroon': Float32Array.of(0.502, 0.000, 0.000, 1.000),
'mediumaquamarine': Float32Array.of(0.400, 0.804, 0.667, 1.000),
'mediumblue': Float32Array.of(0.000, 0.000, 0.804, 1.000),
'mediumorchid': Float32Array.of(0.729, 0.333, 0.827, 1.000),
'mediumpurple': Float32Array.of(0.576, 0.439, 0.859, 1.000),
'mediumseagreen': Float32Array.of(0.235, 0.702, 0.443, 1.000),
'mediumslateblue': Float32Array.of(0.482, 0.408, 0.933, 1.000),
'mediumspringgreen': Float32Array.of(0.000, 0.980, 0.604, 1.000),
'mediumturquoise': Float32Array.of(0.282, 0.820, 0.800, 1.000),
'mediumvioletred': Float32Array.of(0.780, 0.082, 0.522, 1.000),
'midnightblue': Float32Array.of(0.098, 0.098, 0.439, 1.000),
'mintcream': Float32Array.of(0.961, 1.000, 0.980, 1.000),
'mistyrose': Float32Array.of(1.000, 0.894, 0.882, 1.000),
'moccasin': Float32Array.of(1.000, 0.894, 0.710, 1.000),
'navajowhite': Float32Array.of(1.000, 0.871, 0.678, 1.000),
'navy': Float32Array.of(0.000, 0.000, 0.502, 1.000),
'oldlace': Float32Array.of(0.992, 0.961, 0.902, 1.000),
'olive': Float32Array.of(0.502, 0.502, 0.000, 1.000),
'olivedrab': Float32Array.of(0.420, 0.557, 0.137, 1.000),
'orange': Float32Array.of(1.000, 0.647, 0.000, 1.000),
'orangered': Float32Array.of(1.000, 0.271, 0.000, 1.000),
'orchid': Float32Array.of(0.855, 0.439, 0.839, 1.000),
'palegoldenrod': Float32Array.of(0.933, 0.910, 0.667, 1.000),
'palegreen': Float32Array.of(0.596, 0.984, 0.596, 1.000),
'paleturquoise': Float32Array.of(0.686, 0.933, 0.933, 1.000),
'palevioletred': Float32Array.of(0.859, 0.439, 0.576, 1.000),
'papayawhip': Float32Array.of(1.000, 0.937, 0.835, 1.000),
'peachpuff': Float32Array.of(1.000, 0.855, 0.725, 1.000),
'peru': Float32Array.of(0.804, 0.522, 0.247, 1.000),
'pink': Float32Array.of(1.000, 0.753, 0.796, 1.000),
'plum': Float32Array.of(0.867, 0.627, 0.867, 1.000),
'powderblue': Float32Array.of(0.690, 0.878, 0.902, 1.000),
'purple': Float32Array.of(0.502, 0.000, 0.502, 1.000),
'rebeccapurple': Float32Array.of(0.400, 0.200, 0.600, 1.000),
'red': Float32Array.of(1.000, 0.000, 0.000, 1.000),
'rosybrown': Float32Array.of(0.737, 0.561, 0.561, 1.000),
'royalblue': Float32Array.of(0.255, 0.412, 0.882, 1.000),
'saddlebrown': Float32Array.of(0.545, 0.271, 0.075, 1.000),
'salmon': Float32Array.of(0.980, 0.502, 0.447, 1.000),
'sandybrown': Float32Array.of(0.957, 0.643, 0.376, 1.000),
'seagreen': Float32Array.of(0.180, 0.545, 0.341, 1.000),
'seashell': Float32Array.of(1.000, 0.961, 0.933, 1.000),
'sienna': Float32Array.of(0.627, 0.322, 0.176, 1.000),
'silver': Float32Array.of(0.753, 0.753, 0.753, 1.000),
'skyblue': Float32Array.of(0.529, 0.808, 0.922, 1.000),
'slateblue': Float32Array.of(0.416, 0.353, 0.804, 1.000),
'slategray': Float32Array.of(0.439, 0.502, 0.565, 1.000),
'slategrey': Float32Array.of(0.439, 0.502, 0.565, 1.000),
'snow': Float32Array.of(1.000, 0.980, 0.980, 1.000),
'springgreen': Float32Array.of(0.000, 1.000, 0.498, 1.000),
'steelblue': Float32Array.of(0.275, 0.510, 0.706, 1.000),
'tan': Float32Array.of(0.824, 0.706, 0.549, 1.000),
'teal': Float32Array.of(0.000, 0.502, 0.502, 1.000),
'thistle': Float32Array.of(0.847, 0.749, 0.847, 1.000),
'tomato': Float32Array.of(1.000, 0.388, 0.278, 1.000),
'transparent': Float32Array.of(0.000, 0.000, 0.000, 0.000),
'turquoise': Float32Array.of(0.251, 0.878, 0.816, 1.000),
'violet': Float32Array.of(0.933, 0.510, 0.933, 1.000),
'wheat': Float32Array.of(0.961, 0.871, 0.702, 1.000),
'white': Float32Array.of(1.000, 1.000, 1.000, 1.000),
'whitesmoke': Float32Array.of(0.961, 0.961, 0.961, 1.000),
'yellow': Float32Array.of(1.000, 1.000, 0.000, 1.000),
'yellowgreen': Float32Array.of(0.604, 0.804, 0.196, 1.000),
}
function colorToString(skcolor) {
// https://html.spec.whatwg.org/multipage/canvas.html#serialisation-of-a-color
var components = CanvasKit.getColorComponents(skcolor);
var r = components[0];
var g = components[1];
var b = components[2];
var a = components[3];
if (a === 1.0) {
// hex
r = r.toString(16).toLowerCase();
g = g.toString(16).toLowerCase();
b = b.toString(16).toLowerCase();
r = (r.length === 1 ? '0'+r: r);
g = (g.length === 1 ? '0'+g: g);
b = (b.length === 1 ? '0'+b: b);
return '#'+r+g+b;
} else {
a = (a === 0 || a === 1) ? a : a.toFixed(8);
return 'rgba('+r+', '+g+', '+b+', '+a+')';
}
}
function parseColor(colorStr) {
return CanvasKit.parseColorString(colorStr, colorMap);
}
CanvasKit._testing['parseColor'] = parseColor;
CanvasKit._testing['colorToString'] = colorToString;