Upstream version 11.40.271.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / base / bbox2.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2014 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7 <link rel="import" href="/base.html">
8 <link rel="import" href="/base/gl_matrix.html">
9 <link rel="import" href="/base/rect.html">
10
11 <script>
12 'use strict';
13
14 /**
15  * @fileoverview 2D bounding box computations.
16  */
17 tv.exportTo('tv', function() {
18
19   /**
20    * Tracks a 2D bounding box.
21    * @constructor
22    */
23   function BBox2() {
24     this.isEmpty_ = true;
25     this.min_ = undefined;
26     this.max_ = undefined;
27   };
28
29   BBox2.prototype = {
30     __proto__: Object.prototype,
31
32     reset: function() {
33       this.isEmpty_ = true;
34       this.min_ = undefined;
35       this.max_ = undefined;
36     },
37
38     get isEmpty() {
39       return this.isEmpty_;
40     },
41
42     addBBox2: function(bbox2) {
43       if (bbox2.isEmpty)
44         return;
45       this.addVec2(bbox2.min_);
46       this.addVec2(bbox2.max_);
47     },
48
49     clone: function() {
50       var bbox = new BBox2();
51       bbox.addBBox2(this);
52       return bbox;
53     },
54
55     /**
56      * Adds x, y to the range.
57      */
58     addXY: function(x, y) {
59       if (this.isEmpty_) {
60         this.max_ = vec2.create();
61         this.min_ = vec2.create();
62         vec2.set(this.max_, x, y);
63         vec2.set(this.min_, x, y);
64         this.isEmpty_ = false;
65         return;
66       }
67       this.max_[0] = Math.max(this.max_[0], x);
68       this.max_[1] = Math.max(this.max_[1], y);
69       this.min_[0] = Math.min(this.min_[0], x);
70       this.min_[1] = Math.min(this.min_[1], y);
71     },
72
73     /**
74      * Adds value_x, value_y in the form [value_x,value_y] to the range.
75      */
76     addVec2: function(value) {
77       if (this.isEmpty_) {
78         this.max_ = vec2.create();
79         this.min_ = vec2.create();
80         vec2.set(this.max_, value[0], value[1]);
81         vec2.set(this.min_, value[0], value[1]);
82         this.isEmpty_ = false;
83         return;
84       }
85       this.max_[0] = Math.max(this.max_[0], value[0]);
86       this.max_[1] = Math.max(this.max_[1], value[1]);
87       this.min_[0] = Math.min(this.min_[0], value[0]);
88       this.min_[1] = Math.min(this.min_[1], value[1]);
89     },
90
91     addQuad: function(quad) {
92       this.addVec2(quad.p1);
93       this.addVec2(quad.p2);
94       this.addVec2(quad.p3);
95       this.addVec2(quad.p4);
96     },
97
98     get minVec2() {
99       if (this.isEmpty_)
100         return undefined;
101       return this.min_;
102     },
103
104     get maxVec2() {
105       if (this.isEmpty_)
106         return undefined;
107       return this.max_;
108     },
109
110     get sizeAsVec2() {
111       if (this.isEmpty_)
112         throw new Error('Empty BBox2 has no size');
113       var size = vec2.create();
114       vec2.subtract(size, this.max_, this.min_);
115       return size;
116     },
117
118     get size() {
119       if (this.isEmpty_)
120         throw new Error('Empty BBox2 has no size');
121       return {width: this.max_[0] - this.min_[0],
122         height: this.max_[1] - this.min_[1]};
123     },
124
125     get width() {
126       if (this.isEmpty_)
127         throw new Error('Empty BBox2 has no width');
128       return this.max_[0] - this.min_[0];
129     },
130
131     get height() {
132       if (this.isEmpty_)
133         throw new Error('Empty BBox2 has no width');
134       return this.max_[1] - this.min_[1];
135     },
136
137     toString: function() {
138       if (this.isEmpty_)
139         return 'empty';
140       return 'min=(' + this.min_[0] + ',' + this.min_[1] + ') ' +
141           'max=(' + this.max_[0] + ',' + this.max_[1] + ')';
142     },
143
144     asRect: function() {
145       return tv.Rect.fromXYWH(
146           this.min_[0],
147           this.min_[1],
148           this.max_[0] - this.min_[0],
149           this.max_[1] - this.min_[1]);
150     }
151   };
152
153   return {
154     BBox2: BBox2
155   };
156
157 });
158 </script>