|
19 | 19 | HEX: {HEX: [0, 16777215]} // maybe we don't need this |
20 | 20 | }, |
21 | 21 |
|
| 22 | + _Math = window.Math, |
| 23 | + _round = _Math.round, |
| 24 | + |
22 | 25 | _instance = {}, |
23 | 26 | _colors = {}, |
24 | 27 |
|
|
83 | 86 | return setColor(this.colors, undefined, 'rgb', true); |
84 | 87 | }; |
85 | 88 |
|
| 89 | + Colors.prototype.toString = function(colorMode, forceAlpha) { |
| 90 | + return ColorConverter.color2text(colorMode || 'rgba', this.colors, forceAlpha); |
| 91 | + }; |
| 92 | + |
86 | 93 | // ------------------------------------------------------ // |
87 | 94 | // ---------- Color calculation related stuff ---------- // |
88 | 95 | // -------------------------------------------------------// |
|
112 | 119 | color.rgb = {r: rgb.r, g: rgb.g, b: rgb.b}; |
113 | 120 | color.alpha = alpha; |
114 | 121 | // color.RGBLuminance = getLuminance(RGB); |
115 | | - color.equivalentGrey = Math.round(grey.r * RGB.r + grey.g * RGB.g + grey.b * RGB.b); |
| 122 | + color.equivalentGrey = _round(grey.r * RGB.r + grey.g * RGB.g + grey.b * RGB.b); |
116 | 123 |
|
117 | 124 | color.rgbaMixBlack = mixColors(rgb, {r: 0, g: 0, b: 0}, alpha, 1); |
118 | 125 | color.rgbaMixWhite = mixColors(rgb, {r: 1, g: 1, b: 1}, alpha, 1); |
|
151 | 158 | if (!RND[typ]) RND[typ] = {}; |
152 | 159 | modes = colors[typ]; |
153 | 160 | for(mode in modes) { |
154 | | - RND[typ][mode] = Math.round(modes[mode] * ranges[typ][mode][1]); |
| 161 | + RND[typ][mode] = _round(modes[mode] * ranges[typ][mode][1]); |
155 | 162 | } |
156 | 163 | } |
157 | 164 | } |
|
198 | 205 | background.rgbaMixCustom[luminance]); |
199 | 206 | colors.rgbaMixBGMixCustom = rgbaMixBGMixCustom; |
200 | 207 | /* ------ */ |
201 | | - rgbaMixBGMixCustom.luminanceDelta = Math.abs( |
| 208 | + rgbaMixBGMixCustom.luminanceDelta = _Math.abs( |
202 | 209 | rgbaMixBGMixCustom[luminance] - background.rgbaMixCustom[luminance]); |
203 | 210 | rgbaMixBGMixCustom.hueDelta = getHueDelta(background.rgbaMixCustom, rgbaMixBGMixCustom, true); |
204 | 211 | /* ------ */ |
|
246 | 253 | return color; |
247 | 254 | }, |
248 | 255 |
|
| 256 | + color2text: function(colorMode, colors, forceAlpha) { |
| 257 | + var alpha = forceAlpha !== false && _round(colors.alpha * 100) / 100, |
| 258 | + hasAlpha = typeof alpha === 'number' && |
| 259 | + forceAlpha !== false && (forceAlpha || alpha !== 1), |
| 260 | + RGB = colors.RND.rgb, |
| 261 | + HSL = colors.RND.hsl, |
| 262 | + mode = colorMode.toLowerCase().substr(0, 3), |
| 263 | + shouldBeHex = mode === 'hex' && hasAlpha, |
| 264 | + isHex = mode === 'hex' && !shouldBeHex, |
| 265 | + isRgb = mode === 'rgb' || shouldBeHex, |
| 266 | + innerText = isRgb ? RGB.r + ', ' + RGB.g + ', ' + RGB.b : |
| 267 | + HSL.h + ', ' + HSL.s + '%, ' + HSL.l + '%', |
| 268 | + text = isHex ? '#' + colors.HEX : (shouldBeHex ? 'rgb' : mode) + |
| 269 | + (hasAlpha ? 'a' : '') + '(' + innerText + |
| 270 | + (hasAlpha ? ', ' + alpha : '') + ')'; |
| 271 | + |
| 272 | + return text; |
| 273 | + }, |
| 274 | + |
249 | 275 | RGB2HEX: function(RGB) { |
250 | 276 | return ( |
251 | 277 | (RGB.r < 16 ? '0' : '') + RGB.r.toString(16) + |
|
257 | 283 | HEX2rgb: function(HEX) { |
258 | 284 | HEX = HEX.split(''); // IE7 |
259 | 285 | return { |
260 | | - r: parseInt(HEX[0] + HEX[HEX[3] ? 1 : 0], 16) / 255, |
261 | | - g: parseInt(HEX[HEX[3] ? 2 : 1] + (HEX[3] || HEX[1]), 16) / 255, |
262 | | - b: parseInt((HEX[4] || HEX[2]) + (HEX[5] || HEX[2]), 16) / 255 |
| 286 | + r: +('0x' + HEX[0] + HEX[HEX[3] ? 1 : 0]) / 255, |
| 287 | + g: +('0x' + HEX[HEX[3] ? 2 : 1] + (HEX[3] || HEX[1])) / 255, |
| 288 | + b: +('0x' + (HEX[4] || HEX[2]) + (HEX[5] || HEX[2])) / 255 |
263 | 289 | }; |
264 | 290 | }, |
265 | 291 |
|
266 | 292 | hue2RGB: function(hue) { |
267 | 293 | var h = hue * 6, |
268 | | - mod = ~~h % 6, // Math.floor(h) -> faster in most browsers |
| 294 | + mod = ~~h % 6, // _Math.floor(h) -> faster in most browsers |
269 | 295 | i = h === 6 ? 0 : (h - mod); |
270 | 296 |
|
271 | 297 | return { |
272 | | - r: Math.round([1, 1 - i, 0, 0, i, 1][mod] * 255), |
273 | | - g: Math.round([i, 1, 1, 1 - i, 0, 0][mod] * 255), |
274 | | - b: Math.round([0, 0, i, 1, 1, 1 - i][mod] * 255) |
| 298 | + r: _round([1, 1 - i, 0, 0, i, 1][mod] * 255), |
| 299 | + g: _round([i, 1, 1, 1 - i, 0, 0][mod] * 255), |
| 300 | + b: _round([0, 0, i, 1, 1, 1 - i][mod] * 255) |
275 | 301 | }; |
276 | 302 | }, |
277 | 303 |
|
|
291 | 317 | if (r < g) { |
292 | 318 | r = g + (g = r, 0); |
293 | 319 | k = -2 / 6 - k; |
294 | | - min = Math.min(g, b); // g < b ? g : b; ??? |
| 320 | + min = _Math.min(g, b); // g < b ? g : b; ??? |
295 | 321 | } |
296 | 322 | chroma = r - min; |
297 | 323 | s = r ? (chroma / r) : 0; |
298 | 324 | return { |
299 | 325 | h: s < 1e-15 ? ((_colors && _colors.hsl && _colors.hsl.h) || 0) : |
300 | | - chroma ? Math.abs(k + (g - b) / (6 * chroma)) : 0, |
| 326 | + chroma ? _Math.abs(k + (g - b) / (6 * chroma)) : 0, |
301 | 327 | s: r ? (chroma / r) : ((_colors && _colors.hsv && _colors.hsv.s) || 0), // ??_colors.hsv.s || 0 |
302 | 328 | v: r |
303 | 329 | }; |
|
307 | 333 | var h = hsv.h * 6, |
308 | 334 | s = hsv.s, |
309 | 335 | v = hsv.v, |
310 | | - i = ~~h, // Math.floor(h) -> faster in most browsers |
| 336 | + i = ~~h, // _Math.floor(h) -> faster in most browsers |
311 | 337 | f = h - i, |
312 | 338 | p = v * (1 - s), |
313 | 339 | q = v * (1 - f * s), |
|
349 | 375 | v = l < 0.5 ? l * (1 + s) : (l + s) - (s * l), |
350 | 376 | m = l + l - v, |
351 | 377 | sv = v ? ((v - m) / v) : 0, |
352 | | - sextant = ~~h, // Math.floor(h) -> faster in most browsers |
| 378 | + sextant = ~~h, // _Math.floor(h) -> faster in most browsers |
353 | 379 | fract = h - sextant, |
354 | 380 | vsf = v * sv * fract, |
355 | 381 | t = m + vsf, |
|
381 | 407 | } |
382 | 408 |
|
383 | 409 | function getHueDelta(rgb1, rgb2, nominal) { |
384 | | - return (Math.max(rgb1.r - rgb2.r, rgb2.r - rgb1.r) + |
385 | | - Math.max(rgb1.g - rgb2.g, rgb2.g - rgb1.g) + |
386 | | - Math.max(rgb1.b - rgb2.b, rgb2.b - rgb1.b)) * (nominal ? 255 : 1) / 765; |
| 410 | + return (_Math.max(rgb1.r - rgb2.r, rgb2.r - rgb1.r) + |
| 411 | + _Math.max(rgb1.g - rgb2.g, rgb2.g - rgb1.g) + |
| 412 | + _Math.max(rgb1.b - rgb2.b, rgb2.b - rgb1.b)) * (nominal ? 255 : 1) / 765; |
387 | 413 | } |
388 | 414 |
|
389 | 415 | function getLuminance(rgb, normalized) { |
|
392 | 418 | luminance = _instance.options.luminance; |
393 | 419 |
|
394 | 420 | for (var i = RGB.length; i--; ) { |
395 | | - RGB[i] = RGB[i] <= 0.03928 ? RGB[i] / 12.92 : Math.pow(((RGB[i] + 0.055) / 1.055), 2.4); |
| 421 | + RGB[i] = RGB[i] <= 0.03928 ? RGB[i] / 12.92 : _Math.pow(((RGB[i] + 0.055) / 1.055), 2.4); |
396 | 422 | } |
397 | 423 | return ((luminance.r * RGB[0]) + (luminance.g * RGB[1]) + (luminance.b * RGB[2])); |
398 | 424 | } |
|
418 | 444 | } else { |
419 | 445 | ratio = (lum2 + 0.05) / (lum1 + 0.05); |
420 | 446 | } |
421 | | - return Math.round(ratio * 100) / 100; |
| 447 | + return _round(ratio * 100) / 100; |
422 | 448 | } |
423 | 449 |
|
424 | 450 | function limitValue(value, min, max) { |
425 | | - // return Math.max(min, Math.min(max, value)); // faster?? |
| 451 | + // return _Math.max(min, _Math.min(max, value)); // faster?? |
426 | 452 | return (value > max ? max : value < min ? min : value); |
427 | 453 | } |
428 | 454 |
|
|
0 commit comments