Subversion Repositories Applications.papyrus

Rev

Rev 1372 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1372 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.gfx.color.hsl");
13
dojo.provide("dojo.gfx.color.hsl");
12
dojo.require("dojo.lang.array");
14
dojo.require("dojo.lang.array");
13
dojo.lang.extend(dojo.gfx.color.Color, {toHsl:function () {
15
dojo.lang.extend(dojo.gfx.color.Color, {toHsl:function () {
14
	return dojo.gfx.color.rgb2hsl(this.toRgb());
16
	return dojo.gfx.color.rgb2hsl(this.toRgb());
15
}});
17
}});
16
dojo.gfx.color.rgb2hsl = function (r, g, b) {
18
dojo.gfx.color.rgb2hsl = function (r, g, b) {
17
	if (dojo.lang.isArray(r)) {
19
	if (dojo.lang.isArray(r)) {
18
		b = r[2] || 0;
20
		b = r[2] || 0;
19
		g = r[1] || 0;
21
		g = r[1] || 0;
20
		r = r[0] || 0;
22
		r = r[0] || 0;
21
	}
23
	}
22
	r /= 255;
24
	r /= 255;
23
	g /= 255;
25
	g /= 255;
24
	b /= 255;
26
	b /= 255;
25
	var h = null;
27
	var h = null;
26
	var s = null;
28
	var s = null;
27
	var l = null;
29
	var l = null;
28
	var min = Math.min(r, g, b);
30
	var min = Math.min(r, g, b);
29
	var max = Math.max(r, g, b);
31
	var max = Math.max(r, g, b);
30
	var delta = max - min;
32
	var delta = max - min;
31
	l = (min + max) / 2;
33
	l = (min + max) / 2;
32
	s = 0;
34
	s = 0;
33
	if ((l > 0) && (l < 1)) {
35
	if ((l > 0) && (l < 1)) {
34
		s = delta / ((l < 0.5) ? (2 * l) : (2 - 2 * l));
36
		s = delta / ((l < 0.5) ? (2 * l) : (2 - 2 * l));
35
	}
37
	}
36
	h = 0;
38
	h = 0;
37
	if (delta > 0) {
39
	if (delta > 0) {
38
		if ((max == r) && (max != g)) {
40
		if ((max == r) && (max != g)) {
39
			h += (g - b) / delta;
41
			h += (g - b) / delta;
40
		}
42
		}
41
		if ((max == g) && (max != b)) {
43
		if ((max == g) && (max != b)) {
42
			h += (2 + (b - r) / delta);
44
			h += (2 + (b - r) / delta);
43
		}
45
		}
44
		if ((max == b) && (max != r)) {
46
		if ((max == b) && (max != r)) {
45
			h += (4 + (r - g) / delta);
47
			h += (4 + (r - g) / delta);
46
		}
48
		}
47
		h *= 60;
49
		h *= 60;
48
	}
50
	}
49
	h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
51
	h = (h == 0) ? 360 : Math.ceil((h / 360) * 255);
50
	s = Math.ceil(s * 255);
52
	s = Math.ceil(s * 255);
51
	l = Math.ceil(l * 255);
53
	l = Math.ceil(l * 255);
52
	return [h, s, l];
54
	return [h, s, l];
53
};
55
};
54
dojo.gfx.color.hsl2rgb = function (h, s, l) {
56
dojo.gfx.color.hsl2rgb = function (h, s, l) {
55
	if (dojo.lang.isArray(h)) {
57
	if (dojo.lang.isArray(h)) {
56
		l = h[2] || 0;
58
		l = h[2] || 0;
57
		s = h[1] || 0;
59
		s = h[1] || 0;
58
		h = h[0] || 0;
60
		h = h[0] || 0;
59
	}
61
	}
60
	h = (h / 255) * 360;
62
	h = (h / 255) * 360;
61
	if (h == 360) {
63
	if (h == 360) {
62
		h = 0;
64
		h = 0;
63
	}
65
	}
64
	s = s / 255;
66
	s = s / 255;
65
	l = l / 255;
67
	l = l / 255;
66
	while (h < 0) {
68
	while (h < 0) {
67
		h += 360;
69
		h += 360;
68
	}
70
	}
69
	while (h > 360) {
71
	while (h > 360) {
70
		h -= 360;
72
		h -= 360;
71
	}
73
	}
72
	var r, g, b;
74
	var r, g, b;
73
	if (h < 120) {
75
	if (h < 120) {
74
		r = (120 - h) / 60;
76
		r = (120 - h) / 60;
75
		g = h / 60;
77
		g = h / 60;
76
		b = 0;
78
		b = 0;
77
	} else {
79
	} else {
78
		if (h < 240) {
80
		if (h < 240) {
79
			r = 0;
81
			r = 0;
80
			g = (240 - h) / 60;
82
			g = (240 - h) / 60;
81
			b = (h - 120) / 60;
83
			b = (h - 120) / 60;
82
		} else {
84
		} else {
83
			r = (h - 240) / 60;
85
			r = (h - 240) / 60;
84
			g = 0;
86
			g = 0;
85
			b = (360 - h) / 60;
87
			b = (360 - h) / 60;
86
		}
88
		}
87
	}
89
	}
88
	r = Math.min(r, 1);
90
	r = Math.min(r, 1);
89
	g = Math.min(g, 1);
91
	g = Math.min(g, 1);
90
	b = Math.min(b, 1);
92
	b = Math.min(b, 1);
91
	r = 2 * s * r + (1 - s);
93
	r = 2 * s * r + (1 - s);
92
	g = 2 * s * g + (1 - s);
94
	g = 2 * s * g + (1 - s);
93
	b = 2 * s * b + (1 - s);
95
	b = 2 * s * b + (1 - s);
94
	if (l < 0.5) {
96
	if (l < 0.5) {
95
		r = l * r;
97
		r = l * r;
96
		g = l * g;
98
		g = l * g;
97
		b = l * b;
99
		b = l * b;
98
	} else {
100
	} else {
99
		r = (1 - l) * r + 2 * l - 1;
101
		r = (1 - l) * r + 2 * l - 1;
100
		g = (1 - l) * g + 2 * l - 1;
102
		g = (1 - l) * g + 2 * l - 1;
101
		b = (1 - l) * b + 2 * l - 1;
103
		b = (1 - l) * b + 2 * l - 1;
102
	}
104
	}
103
	r = Math.ceil(r * 255);
105
	r = Math.ceil(r * 255);
104
	g = Math.ceil(g * 255);
106
	g = Math.ceil(g * 255);
105
	b = Math.ceil(b * 255);
107
	b = Math.ceil(b * 255);
106
	return [r, g, b];
108
	return [r, g, b];
107
};
109
};
108
dojo.gfx.color.hsl2hex = function (h, s, l) {
110
dojo.gfx.color.hsl2hex = function (h, s, l) {
109
	var rgb = dojo.gfx.color.hsl2rgb(h, s, l);
111
	var rgb = dojo.gfx.color.hsl2rgb(h, s, l);
110
	return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
112
	return dojo.gfx.color.rgb2hex(rgb[0], rgb[1], rgb[2]);
111
};
113
};
112
dojo.gfx.color.hex2hsl = function (hex) {
114
dojo.gfx.color.hex2hsl = function (hex) {
113
	var rgb = dojo.gfx.color.hex2rgb(hex);
115
	var rgb = dojo.gfx.color.hex2rgb(hex);
114
	return dojo.gfx.color.rgb2hsl(rgb[0], rgb[1], rgb[2]);
116
	return dojo.gfx.color.rgb2hsl(rgb[0], rgb[1], rgb[2]);
115
};
117
};
116
 
118