12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- var utils = require('../utils')
- , nodes = require('../nodes');
- /**
- * Return a `RGBA` from the r,g,b,a channels.
- *
- * Examples:
- *
- * rgba(255,0,0,0.5)
- * // => rgba(255,0,0,0.5)
- *
- * rgba(255,0,0,1)
- * // => #ff0000
- *
- * rgba(#ffcc00, 50%)
- * // rgba(255,204,0,0.5)
- *
- * @param {Unit|RGBA|HSLA} red
- * @param {Unit} green
- * @param {Unit} blue
- * @param {Unit} alpha
- * @return {RGBA}
- * @api public
- */
- function rgba(red, green, blue, alpha){
- switch (arguments.length) {
- case 1:
- utils.assertColor(red);
- return red.rgba;
- case 2:
- utils.assertColor(red);
- var color = red.rgba;
- utils.assertType(green, 'unit', 'alpha');
- alpha = green.clone();
- if ('%' == alpha.type) alpha.val /= 100;
- return new nodes.RGBA(
- color.r
- , color.g
- , color.b
- , alpha.val);
- default:
- utils.assertType(red, 'unit', 'red');
- utils.assertType(green, 'unit', 'green');
- utils.assertType(blue, 'unit', 'blue');
- utils.assertType(alpha, 'unit', 'alpha');
- var r = '%' == red.type ? Math.round(red.val * 2.55) : red.val
- , g = '%' == green.type ? Math.round(green.val * 2.55) : green.val
- , b = '%' == blue.type ? Math.round(blue.val * 2.55) : blue.val;
- alpha = alpha.clone();
- if (alpha && '%' == alpha.type) alpha.val /= 100;
- return new nodes.RGBA(
- r
- , g
- , b
- , alpha.val);
- }
- }
- rgba.params = ['red', 'green', 'blue', 'alpha'];
- module.exports = rgba;
|