Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 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.hsv");
13
dojo.provide("dojo.gfx.color.hsv");
12
dojo.require("dojo.lang.array");
14
dojo.require("dojo.lang.array");
13
dojo.require("dojo.math");
15
dojo.require("dojo.math");
14
dojo.lang.extend(dojo.gfx.color.Color, {toHsv:function () {
16
dojo.lang.extend(dojo.gfx.color.Color, {toHsv:function () {
15
	return dojo.gfx.color.rgb2hsv(this.toRgb());
17
	return dojo.gfx.color.rgb2hsv(this.toRgb());
16
}});
18
}});
17
dojo.gfx.color.rgb2hsv = function (r, g, b, options) {
19
dojo.gfx.color.rgb2hsv = function (r, g, b, options) {
18
	if (dojo.lang.isArray(r)) {
20
	if (dojo.lang.isArray(r)) {
19
		if (g) {
21
		if (g) {
20
			options = g;
22
			options = g;
21
		}
23
		}
22
		b = r[2] || 0;
24
		b = r[2] || 0;
23
		g = r[1] || 0;
25
		g = r[1] || 0;
24
		r = r[0] || 0;
26
		r = r[0] || 0;
25
	}
27
	}
26
	var opt = {inputRange:(options && options.inputRange) ? options.inputRange : 255, outputRange:(options && options.outputRange) ? options.outputRange : [255, 255, 255]};
28
	var opt = {inputRange:(options && options.inputRange) ? options.inputRange : 255, outputRange:(options && options.outputRange) ? options.outputRange : [255, 255, 255]};
27
	var h = null;
29
	var h = null;
28
	var s = null;
30
	var s = null;
29
	var v = null;
31
	var v = null;
30
	switch (opt.inputRange) {
32
	switch (opt.inputRange) {
31
	  case 1:
33
	  case 1:
32
		r = (r * 255);
34
		r = (r * 255);
33
		g = (g * 255);
35
		g = (g * 255);
34
		b = (b * 255);
36
		b = (b * 255);
35
		break;
37
		break;
36
	  case 100:
38
	  case 100:
37
		r = (r / 100) * 255;
39
		r = (r / 100) * 255;
38
		g = (g / 100) * 255;
40
		g = (g / 100) * 255;
39
		b = (b / 100) * 255;
41
		b = (b / 100) * 255;
40
		break;
42
		break;
41
	  default:
43
	  default:
42
		break;
44
		break;
43
	}
45
	}
44
	var min = Math.min(r, g, b);
46
	var min = Math.min(r, g, b);
45
	v = Math.max(r, g, b);
47
	v = Math.max(r, g, b);
46
	var delta = v - min;
48
	var delta = v - min;
47
	s = (v == 0) ? 0 : delta / v;
49
	s = (v == 0) ? 0 : delta / v;
48
	if (s == 0) {
50
	if (s == 0) {
49
		h = 0;
51
		h = 0;
50
	} else {
52
	} else {
51
		if (r == v) {
53
		if (r == v) {
52
			h = 60 * (g - b) / delta;
54
			h = 60 * (g - b) / delta;
53
		} else {
55
		} else {
54
			if (g == v) {
56
			if (g == v) {
55
				h = 120 + 60 * (b - r) / delta;
57
				h = 120 + 60 * (b - r) / delta;
56
			} else {
58
			} else {
57
				if (b == v) {
59
				if (b == v) {
58
					h = 240 + 60 * (r - g) / delta;
60
					h = 240 + 60 * (r - g) / delta;
59
				}
61
				}
60
			}
62
			}
61
		}
63
		}
62
		if (h <= 0) {
64
		if (h <= 0) {
63
			h += 360;
65
			h += 360;
64
		}
66
		}
65
	}
67
	}
66
	switch (opt.outputRange[0]) {
68
	switch (opt.outputRange[0]) {
67
	  case 360:
69
	  case 360:
68
		break;
70
		break;
69
	  case 100:
71
	  case 100:
70
		h = (h / 360) * 100;
72
		h = (h / 360) * 100;
71
		break;
73
		break;
72
	  case 1:
74
	  case 1:
73
		h = (h / 360);
75
		h = (h / 360);
74
		break;
76
		break;
75
	  default:
77
	  default:
76
		h = (h / 360) * 255;
78
		h = (h / 360) * 255;
77
		break;
79
		break;
78
	}
80
	}
79
	switch (opt.outputRange[1]) {
81
	switch (opt.outputRange[1]) {
80
	  case 100:
82
	  case 100:
81
		s = s * 100;
83
		s = s * 100;
82
	  case 1:
84
	  case 1:
83
		break;
85
		break;
84
	  default:
86
	  default:
85
		s = s * 255;
87
		s = s * 255;
86
		break;
88
		break;
87
	}
89
	}
88
	switch (opt.outputRange[2]) {
90
	switch (opt.outputRange[2]) {
89
	  case 100:
91
	  case 100:
90
		v = (v / 255) * 100;
92
		v = (v / 255) * 100;
91
		break;
93
		break;
92
	  case 1:
94
	  case 1:
93
		v = (v / 255);
95
		v = (v / 255);
94
		break;
96
		break;
95
	  default:
97
	  default:
96
		break;
98
		break;
97
	}
99
	}
98
	h = dojo.math.round(h);
100
	h = dojo.math.round(h);
99
	s = dojo.math.round(s);
101
	s = dojo.math.round(s);
100
	v = dojo.math.round(v);
102
	v = dojo.math.round(v);
101
	return [h, s, v];
103
	return [h, s, v];
102
};
104
};
103
dojo.gfx.color.hsv2rgb = function (h, s, v, options) {
105
dojo.gfx.color.hsv2rgb = function (h, s, v, options) {
104
	if (dojo.lang.isArray(h)) {
106
	if (dojo.lang.isArray(h)) {
105
		if (s) {
107
		if (s) {
106
			options = s;
108
			options = s;
107
		}
109
		}
108
		v = h[2] || 0;
110
		v = h[2] || 0;
109
		s = h[1] || 0;
111
		s = h[1] || 0;
110
		h = h[0] || 0;
112
		h = h[0] || 0;
111
	}
113
	}
112
	var opt = {inputRange:(options && options.inputRange) ? options.inputRange : [255, 255, 255], outputRange:(options && options.outputRange) ? options.outputRange : 255};
114
	var opt = {inputRange:(options && options.inputRange) ? options.inputRange : [255, 255, 255], outputRange:(options && options.outputRange) ? options.outputRange : 255};
113
	switch (opt.inputRange[0]) {
115
	switch (opt.inputRange[0]) {
114
	  case 1:
116
	  case 1:
115
		h = h * 360;
117
		h = h * 360;
116
		break;
118
		break;
117
	  case 100:
119
	  case 100:
118
		h = (h / 100) * 360;
120
		h = (h / 100) * 360;
119
		break;
121
		break;
120
	  case 360:
122
	  case 360:
121
		h = h;
123
		h = h;
122
		break;
124
		break;
123
	  default:
125
	  default:
124
		h = (h / 255) * 360;
126
		h = (h / 255) * 360;
125
	}
127
	}
126
	if (h == 360) {
128
	if (h == 360) {
127
		h = 0;
129
		h = 0;
128
	}
130
	}
129
	switch (opt.inputRange[1]) {
131
	switch (opt.inputRange[1]) {
130
	  case 100:
132
	  case 100:
131
		s /= 100;
133
		s /= 100;
132
		break;
134
		break;
133
	  case 255:
135
	  case 255:
134
		s /= 255;
136
		s /= 255;
135
	}
137
	}
136
	switch (opt.inputRange[2]) {
138
	switch (opt.inputRange[2]) {
137
	  case 100:
139
	  case 100:
138
		v /= 100;
140
		v /= 100;
139
		break;
141
		break;
140
	  case 255:
142
	  case 255:
141
		v /= 255;
143
		v /= 255;
142
	}
144
	}
143
	var r = null;
145
	var r = null;
144
	var g = null;
146
	var g = null;
145
	var b = null;
147
	var b = null;
146
	if (s == 0) {
148
	if (s == 0) {
147
		r = v;
149
		r = v;
148
		g = v;
150
		g = v;
149
		b = v;
151
		b = v;
150
	} else {
152
	} else {
151
		var hTemp = h / 60;
153
		var hTemp = h / 60;
152
		var i = Math.floor(hTemp);
154
		var i = Math.floor(hTemp);
153
		var f = hTemp - i;
155
		var f = hTemp - i;
154
		var p = v * (1 - s);
156
		var p = v * (1 - s);
155
		var q = v * (1 - (s * f));
157
		var q = v * (1 - (s * f));
156
		var t = v * (1 - (s * (1 - f)));
158
		var t = v * (1 - (s * (1 - f)));
157
		switch (i) {
159
		switch (i) {
158
		  case 0:
160
		  case 0:
159
			r = v;
161
			r = v;
160
			g = t;
162
			g = t;
161
			b = p;
163
			b = p;
162
			break;
164
			break;
163
		  case 1:
165
		  case 1:
164
			r = q;
166
			r = q;
165
			g = v;
167
			g = v;
166
			b = p;
168
			b = p;
167
			break;
169
			break;
168
		  case 2:
170
		  case 2:
169
			r = p;
171
			r = p;
170
			g = v;
172
			g = v;
171
			b = t;
173
			b = t;
172
			break;
174
			break;
173
		  case 3:
175
		  case 3:
174
			r = p;
176
			r = p;
175
			g = q;
177
			g = q;
176
			b = v;
178
			b = v;
177
			break;
179
			break;
178
		  case 4:
180
		  case 4:
179
			r = t;
181
			r = t;
180
			g = p;
182
			g = p;
181
			b = v;
183
			b = v;
182
			break;
184
			break;
183
		  case 5:
185
		  case 5:
184
			r = v;
186
			r = v;
185
			g = p;
187
			g = p;
186
			b = q;
188
			b = q;
187
			break;
189
			break;
188
		}
190
		}
189
	}
191
	}
190
	switch (opt.outputRange) {
192
	switch (opt.outputRange) {
191
	  case 1:
193
	  case 1:
192
		r = dojo.math.round(r, 2);
194
		r = dojo.math.round(r, 2);
193
		g = dojo.math.round(g, 2);
195
		g = dojo.math.round(g, 2);
194
		b = dojo.math.round(b, 2);
196
		b = dojo.math.round(b, 2);
195
		break;
197
		break;
196
	  case 100:
198
	  case 100:
197
		r = Math.round(r * 100);
199
		r = Math.round(r * 100);
198
		g = Math.round(g * 100);
200
		g = Math.round(g * 100);
199
		b = Math.round(b * 100);
201
		b = Math.round(b * 100);
200
		break;
202
		break;
201
	  default:
203
	  default:
202
		r = Math.round(r * 255);
204
		r = Math.round(r * 255);
203
		g = Math.round(g * 255);
205
		g = Math.round(g * 255);
204
		b = Math.round(b * 255);
206
		b = Math.round(b * 255);
205
	}
207
	}
206
	return [r, g, b];
208
	return [r, g, b];
207
};
209
};
208
 
210