OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 | 5 |
6 // Namespace object for the utilities. | 6 // Namespace object for the utilities. |
7 function ImageUtil() {} | 7 function ImageUtil() {} |
8 | 8 |
9 // Performance trace. | 9 // Performance trace. |
10 ImageUtil.trace = (function() { | 10 ImageUtil.trace = (function() { |
11 function PerformanceTrace() { | 11 function PerformanceTrace() { |
12 this.lines_ = {}; | 12 this.lines_ = {}; |
13 this.timers_ = {}; | 13 this.timers_ = {}; |
14 this.container_ = null; | 14 this.container_ = null; |
15 } | 15 } |
16 | 16 |
17 PerformanceTrace.prototype.bindToDOM = function(container) { | 17 PerformanceTrace.prototype.bindToDOM = function(container) { |
18 this.container_ = container; | 18 this.container_ = container; |
19 }; | 19 }; |
20 | 20 |
21 PerformanceTrace.prototype.report_ = function(key, value) { | 21 PerformanceTrace.prototype.report = function(key, value) { |
22 if (!this.container_) return; | 22 if (!this.container_) return; |
23 if (!(key in this.lines_)) { | 23 if (!(key in this.lines_)) { |
24 var div = this.lines_[key] = document.createElement('div'); | 24 var div = this.lines_[key] = document.createElement('div'); |
25 this.container_.appendChild(div); | 25 this.container_.appendChild(div); |
26 } | 26 } |
27 this.lines_[key].textContent = key + ': ' + value; | 27 this.lines_[key].textContent = key + ': ' + value; |
28 }; | 28 }; |
29 | 29 |
30 PerformanceTrace.prototype.resetTimer = function(key) { | 30 PerformanceTrace.prototype.resetTimer = function(key) { |
31 this.timers_[key] = Date.now(); | 31 this.timers_[key] = Date.now(); |
32 } | 32 }; |
33 | 33 |
34 PerformanceTrace.prototype.reportTimer = function(key) { | 34 PerformanceTrace.prototype.reportTimer = function(key) { |
35 this.report_(key, (Date.now() - this.timers_[key]) + 'ms'); | 35 this.report(key, (Date.now() - this.timers_[key]) + 'ms'); |
36 }; | 36 }; |
37 | 37 |
38 return new PerformanceTrace(); | 38 return new PerformanceTrace(); |
39 })(); | 39 })(); |
40 | 40 |
41 | 41 |
42 ImageUtil.clip = function(min, value, max) { | 42 ImageUtil.clamp = function(min, value, max) { |
43 return Math.max(min, Math.min(max, value)); | 43 return Math.max(min, Math.min(max, value)); |
44 }; | 44 }; |
45 | 45 |
46 ImageUtil.between = function(min, value, max) { | 46 ImageUtil.between = function(min, value, max) { |
47 return (value - min) * (value - max) <= 0; | 47 return (value - min) * (value - max) <= 0; |
48 }; | 48 }; |
49 | 49 |
50 /** | 50 /** |
51 * Computes the function for every integer value between 0 and max and stores | 51 * Computes the function for every integer value between 0 and max and stores |
52 * the results. Rounds and clips the results to fit the [0..255] range. | 52 * the results. Rounds and clips the results to fit the [0..255] range. |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
162 }; | 162 }; |
163 | 163 |
164 /** | 164 /** |
165 * @return {Boolean} True if the point lies inside the rectange. | 165 * @return {Boolean} True if the point lies inside the rectange. |
166 */ | 166 */ |
167 Rect.prototype.inside = function(x, y) { | 167 Rect.prototype.inside = function(x, y) { |
168 return this.left <= x && x < this.left + this.width && | 168 return this.left <= x && x < this.left + this.width && |
169 this.top <= y && y < this.top + this.height; | 169 this.top <= y && y < this.top + this.height; |
170 }; | 170 }; |
171 | 171 |
172 /** | |
173 * Clamp the rectangle to the bounds by moving it. | |
174 * Decrease the size only if necessary. | |
175 */ | |
176 Rect.prototype.clamp = function(bounds) { | |
177 var rect = new Rect(this); | |
178 | |
179 if (rect.width > bounds.width) { | |
180 rect.left = bounds.left; | |
181 rect.width = bounds.width; | |
182 } else if (rect.left < bounds.left){ | |
183 rect.left = bounds.left; | |
184 } else if (rect.left + rect.width > | |
185 bounds.left + bounds.width) { | |
186 rect.left = bounds.left + bounds.width - rect.width; | |
187 } | |
188 | |
189 if (rect.height > bounds.height) { | |
190 rect.top = bounds.top; | |
191 rect.height = bounds.height; | |
192 } else if (rect.top < bounds.top){ | |
193 rect.top = bounds.top; | |
194 } else if (rect.top + rect.height > | |
195 bounds.top + bounds.height) { | |
196 rect.top = bounds.top + bounds.height - rect.height; | |
197 } | |
198 | |
199 return rect; | |
200 }; | |
201 | |
172 /* | 202 /* |
173 * Useful shortcuts for drawing (static functions). | 203 * Useful shortcuts for drawing (static functions). |
174 */ | 204 */ |
175 | 205 |
176 /** | 206 /** |
177 * Draws the image in context with appropriate scaling. | 207 * Draws the image in context with appropriate scaling. |
178 */ | 208 */ |
179 Rect.drawImage = function(context, image, dstRect, srcRect) { | 209 Rect.drawImage = function(context, image, dstRect, srcRect) { |
210 dstRect = dstRect || new Rect(context.canvas); | |
SeRya
2011/08/08 13:26:44
Shouldn't it be dstRect_opt ans srcRect_opt?
Vladislav Kaznacheev
2011/08/08 13:47:51
Done.
| |
211 srcRect = srcRect || new Rect(image); | |
180 context.drawImage(image, | 212 context.drawImage(image, |
181 srcRect.left, srcRect.top, srcRect.width, srcRect.height, | 213 srcRect.left, srcRect.top, srcRect.width, srcRect.height, |
182 dstRect.left, dstRect.top, dstRect.width, dstRect.height); | 214 dstRect.left, dstRect.top, dstRect.width, dstRect.height); |
183 }; | 215 }; |
184 | 216 |
185 /** | 217 /** |
186 * Strokes the rectangle. | 218 * Strokes the rectangle. |
187 */ | 219 */ |
188 Rect.stroke = function(context, rect) { | 220 Rect.stroke = function(context, rect) { |
189 context.strokeRect(rect.left, rect.top, rect.width, rect.height); | 221 context.strokeRect(rect.left, rect.top, rect.width, rect.height); |
(...skipping 26 matching lines...) Expand all Loading... | |
216 }; | 248 }; |
217 | 249 |
218 /** | 250 /** |
219 * Circle class. | 251 * Circle class. |
220 */ | 252 */ |
221 | 253 |
222 function Circle(x, y, R) { | 254 function Circle(x, y, R) { |
223 this.x = x; | 255 this.x = x; |
224 this.y = y; | 256 this.y = y; |
225 this.squaredR = R * R; | 257 this.squaredR = R * R; |
226 }; | 258 } |
227 | 259 |
228 Circle.prototype.inside = function(x, y) { | 260 Circle.prototype.inside = function(x, y) { |
229 x -= this.x; | 261 x -= this.x; |
230 y -= this.y; | 262 y -= this.y; |
231 return x * x + y * y <= this.squaredR; | 263 return x * x + y * y <= this.squaredR; |
232 }; | 264 }; |
OLD | NEW |