OLD | NEW |
(Empty) | |
| 1 /* Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 * Use of this source code is governed by a BSD-style license that can be |
| 3 * found in the LICENSE file. |
| 4 */ |
| 5 'use strict'; |
| 6 |
| 7 base.exportTo('base', function() { |
| 8 function Color(opt_r, opt_g, opt_b, opt_a) { |
| 9 this.r = Math.floor(opt_r) || 0; |
| 10 this.g = Math.floor(opt_g) || 0; |
| 11 this.b = Math.floor(opt_b) || 0; |
| 12 this.a = opt_a; |
| 13 } |
| 14 |
| 15 Color.fromString = function(str) { |
| 16 var tmp; |
| 17 var values; |
| 18 if (str.substr(0, 4) == 'rgb(') { |
| 19 tmp = str.substr(4, str.length - 5); |
| 20 values = tmp.split(',').map(function(v) { |
| 21 return v.replace(/^\s+/, '', 'g'); |
| 22 }); |
| 23 if (values.length != 3) |
| 24 throw new Error('Malformatted rgb-expression'); |
| 25 return new Color( |
| 26 parseInt(values[0]), |
| 27 parseInt(values[1]), |
| 28 parseInt(values[2])); |
| 29 } else if (str.substr(0, 4) == 'rgba(') { |
| 30 tmp = str.substr(5, str.length - 6); |
| 31 values = tmp.split(',').map(function(v) { |
| 32 return v.replace(/^\s+/, '', 'g'); |
| 33 }); |
| 34 if (values.length != 3) |
| 35 throw new Error('Malformatted rgb-expression'); |
| 36 return new Color( |
| 37 parseInt(values[0]), |
| 38 parseInt(values[1]), |
| 39 parseInt(values[2]), |
| 40 parseFloat(values[3])); |
| 41 } else if (str[0] == '#' && str.length == 7) { |
| 42 return new Color( |
| 43 parseInt(str.substr(1, 2), 16), |
| 44 parseInt(str.substr(3, 2), 16), |
| 45 parseInt(str.substr(5, 2), 16)); |
| 46 } else { |
| 47 throw new Error('Unrecognized string format.'); |
| 48 } |
| 49 }; |
| 50 |
| 51 Color.lerp = function(a, b, percent) { |
| 52 if (a.a !== undefined && b.a !== undefined) |
| 53 return Color.lerpRGBA(a, b, percent); |
| 54 return Color.lerpRGB(a, b, percent); |
| 55 } |
| 56 Color.lerpRGB = function(a, b, percent) { |
| 57 return new Color( |
| 58 ((b.r - a.r) * percent) + a.r, |
| 59 ((b.g - a.g) * percent) + a.g, |
| 60 ((b.b - a.b) * percent) + a.b); |
| 61 } |
| 62 |
| 63 Color.lerpRGBA = function(a, b, percent) { |
| 64 return new Color( |
| 65 ((b.r - a.r) * percent) + a.r, |
| 66 ((b.g - a.g) * percent) + a.g, |
| 67 ((b.b - a.b) * percent) + a.b, |
| 68 ((b.a - a.a) * percent) + a.a); |
| 69 } |
| 70 |
| 71 Color.prototype = { |
| 72 brighten: function(opt_k) { |
| 73 var k; |
| 74 k = opt_k || 0.45; |
| 75 |
| 76 return new Color( |
| 77 Math.min(255, this.r + Math.floor(this.r * k)), |
| 78 Math.min(255, this.g + Math.floor(this.g * k)), |
| 79 Math.min(255, this.b + Math.floor(this.b * k))); |
| 80 }, |
| 81 |
| 82 toString: function() { |
| 83 if (this.a !== undefined) { |
| 84 return 'rgba(' + |
| 85 this.r + ',' + this.g + ',' + |
| 86 this.b + ',' + this.a + ')'; |
| 87 } |
| 88 return 'rgb(' + this.r + ',' + this.g + ',' + this.b + ')'; |
| 89 } |
| 90 }; |
| 91 |
| 92 return { |
| 93 Color: Color, |
| 94 } |
| 95 }); |
| 96 |
OLD | NEW |