Index: third_party/google_input_tools/third_party/closure_library/closure/goog/math/size.js |
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/math/size.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/math/size.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1b3841baf08dd94728f7cd04de1bd556b837e6f4 |
--- /dev/null |
+++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/math/size.js |
@@ -0,0 +1,206 @@ |
+// Copyright 2007 The Closure Library Authors. All Rights Reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS-IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+/** |
+ * @fileoverview A utility class for representing two-dimensional sizes. |
+ */ |
+ |
+ |
+goog.provide('goog.math.Size'); |
+ |
+ |
+ |
+/** |
+ * Class for representing sizes consisting of a width and height. Undefined |
+ * width and height support is deprecated and results in compiler warning. |
+ * @param {number} width Width. |
+ * @param {number} height Height. |
+ * @constructor |
+ */ |
+goog.math.Size = function(width, height) { |
+ /** |
+ * Width |
+ * @type {number} |
+ */ |
+ this.width = width; |
+ |
+ /** |
+ * Height |
+ * @type {number} |
+ */ |
+ this.height = height; |
+}; |
+ |
+ |
+/** |
+ * Compares sizes for equality. |
+ * @param {goog.math.Size} a A Size. |
+ * @param {goog.math.Size} b A Size. |
+ * @return {boolean} True iff the sizes have equal widths and equal |
+ * heights, or if both are null. |
+ */ |
+goog.math.Size.equals = function(a, b) { |
+ if (a == b) { |
+ return true; |
+ } |
+ if (!a || !b) { |
+ return false; |
+ } |
+ return a.width == b.width && a.height == b.height; |
+}; |
+ |
+ |
+/** |
+ * @return {!goog.math.Size} A new copy of the Size. |
+ */ |
+goog.math.Size.prototype.clone = function() { |
+ return new goog.math.Size(this.width, this.height); |
+}; |
+ |
+ |
+if (goog.DEBUG) { |
+ /** |
+ * Returns a nice string representing size. |
+ * @return {string} In the form (50 x 73). |
+ * @override |
+ */ |
+ goog.math.Size.prototype.toString = function() { |
+ return '(' + this.width + ' x ' + this.height + ')'; |
+ }; |
+} |
+ |
+ |
+/** |
+ * @return {number} The longer of the two dimensions in the size. |
+ */ |
+goog.math.Size.prototype.getLongest = function() { |
+ return Math.max(this.width, this.height); |
+}; |
+ |
+ |
+/** |
+ * @return {number} The shorter of the two dimensions in the size. |
+ */ |
+goog.math.Size.prototype.getShortest = function() { |
+ return Math.min(this.width, this.height); |
+}; |
+ |
+ |
+/** |
+ * @return {number} The area of the size (width * height). |
+ */ |
+goog.math.Size.prototype.area = function() { |
+ return this.width * this.height; |
+}; |
+ |
+ |
+/** |
+ * @return {number} The perimeter of the size (width + height) * 2. |
+ */ |
+goog.math.Size.prototype.perimeter = function() { |
+ return (this.width + this.height) * 2; |
+}; |
+ |
+ |
+/** |
+ * @return {number} The ratio of the size's width to its height. |
+ */ |
+goog.math.Size.prototype.aspectRatio = function() { |
+ return this.width / this.height; |
+}; |
+ |
+ |
+/** |
+ * @return {boolean} True if the size has zero area, false if both dimensions |
+ * are non-zero numbers. |
+ */ |
+goog.math.Size.prototype.isEmpty = function() { |
+ return !this.area(); |
+}; |
+ |
+ |
+/** |
+ * Clamps the width and height parameters upward to integer values. |
+ * @return {!goog.math.Size} This size with ceil'd components. |
+ */ |
+goog.math.Size.prototype.ceil = function() { |
+ this.width = Math.ceil(this.width); |
+ this.height = Math.ceil(this.height); |
+ return this; |
+}; |
+ |
+ |
+/** |
+ * @param {!goog.math.Size} target The target size. |
+ * @return {boolean} True if this Size is the same size or smaller than the |
+ * target size in both dimensions. |
+ */ |
+goog.math.Size.prototype.fitsInside = function(target) { |
+ return this.width <= target.width && this.height <= target.height; |
+}; |
+ |
+ |
+/** |
+ * Clamps the width and height parameters downward to integer values. |
+ * @return {!goog.math.Size} This size with floored components. |
+ */ |
+goog.math.Size.prototype.floor = function() { |
+ this.width = Math.floor(this.width); |
+ this.height = Math.floor(this.height); |
+ return this; |
+}; |
+ |
+ |
+/** |
+ * Rounds the width and height parameters to integer values. |
+ * @return {!goog.math.Size} This size with rounded components. |
+ */ |
+goog.math.Size.prototype.round = function() { |
+ this.width = Math.round(this.width); |
+ this.height = Math.round(this.height); |
+ return this; |
+}; |
+ |
+ |
+/** |
+ * Scales this size by the given scale factors. The width and height are scaled |
+ * by {@code sx} and {@code opt_sy} respectively. If {@code opt_sy} is not |
+ * given, then {@code sx} is used for both the width and height. |
+ * @param {number} sx The scale factor to use for the width. |
+ * @param {number=} opt_sy The scale factor to use for the height. |
+ * @return {!goog.math.Size} This Size object after scaling. |
+ */ |
+goog.math.Size.prototype.scale = function(sx, opt_sy) { |
+ var sy = goog.isNumber(opt_sy) ? opt_sy : sx; |
+ this.width *= sx; |
+ this.height *= sy; |
+ return this; |
+}; |
+ |
+ |
+/** |
+ * Uniformly scales the size to fit inside the dimensions of a given size. The |
+ * original aspect ratio will be preserved. |
+ * |
+ * This function assumes that both Sizes contain strictly positive dimensions. |
+ * @param {!goog.math.Size} target The target size. |
+ * @return {!goog.math.Size} This Size object, after optional scaling. |
+ */ |
+goog.math.Size.prototype.scaleToFit = function(target) { |
+ var s = this.aspectRatio() > target.aspectRatio() ? |
+ target.width / this.width : |
+ target.height / this.height; |
+ |
+ return this.scale(s); |
+}; |