|
1 d3.hsl = function(h, s, l) { |
|
2 return arguments.length === 1 |
|
3 ? (h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) |
|
4 : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl)) |
|
5 : d3_hsl(+h, +s, +l); |
|
6 }; |
|
7 |
|
8 function d3_hsl(h, s, l) { |
|
9 return new d3_Hsl(h, s, l); |
|
10 } |
|
11 |
|
12 function d3_Hsl(h, s, l) { |
|
13 this.h = h; |
|
14 this.s = s; |
|
15 this.l = l; |
|
16 } |
|
17 |
|
18 d3_Hsl.prototype.brighter = function(k) { |
|
19 k = Math.pow(0.7, arguments.length ? k : 1); |
|
20 return d3_hsl(this.h, this.s, this.l / k); |
|
21 }; |
|
22 |
|
23 d3_Hsl.prototype.darker = function(k) { |
|
24 k = Math.pow(0.7, arguments.length ? k : 1); |
|
25 return d3_hsl(this.h, this.s, k * this.l); |
|
26 }; |
|
27 |
|
28 d3_Hsl.prototype.rgb = function() { |
|
29 return d3_hsl_rgb(this.h, this.s, this.l); |
|
30 }; |
|
31 |
|
32 d3_Hsl.prototype.toString = function() { |
|
33 return this.rgb().toString(); |
|
34 }; |
|
35 |
|
36 function d3_hsl_rgb(h, s, l) { |
|
37 var m1, |
|
38 m2; |
|
39 |
|
40 /* Some simple corrections for h, s and l. */ |
|
41 h = h % 360; if (h < 0) h += 360; |
|
42 s = s < 0 ? 0 : s > 1 ? 1 : s; |
|
43 l = l < 0 ? 0 : l > 1 ? 1 : l; |
|
44 |
|
45 /* From FvD 13.37, CSS Color Module Level 3 */ |
|
46 m2 = l <= .5 ? l * (1 + s) : l + s - l * s; |
|
47 m1 = 2 * l - m2; |
|
48 |
|
49 function v(h) { |
|
50 if (h > 360) h -= 360; |
|
51 else if (h < 0) h += 360; |
|
52 if (h < 60) return m1 + (m2 - m1) * h / 60; |
|
53 if (h < 180) return m2; |
|
54 if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60; |
|
55 return m1; |
|
56 } |
|
57 |
|
58 function vv(h) { |
|
59 return Math.round(v(h) * 255); |
|
60 } |
|
61 |
|
62 return d3_rgb(vv(h + 120), vv(h), vv(h - 120)); |
|
63 } |