Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / timeline_display_transform.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2013 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
8 <link rel="import" href="/base/utils.html">
9
10 <script>
11 'use strict';
12
13 tv.exportTo('tracing', function() {
14   function TimelineDisplayTransform(opt_that) {
15     if (opt_that) {
16       this.set(opt_that);
17       return;
18     }
19     this.scaleX = 1;
20     this.panX = 0;
21     this.panY = 0;
22   }
23
24   TimelineDisplayTransform.prototype = {
25     set: function(that) {
26       this.scaleX = that.scaleX;
27       this.panX = that.panX;
28       this.panY = that.panY;
29     },
30
31     clone: function() {
32       return new TimelineDisplayTransform(this);
33     },
34
35     equals: function(that) {
36       var eq = true;
37       if (that === undefined || that === null)
38         return false;
39       eq &= this.panX === that.panX;
40       eq &= this.panY === that.panY;
41       eq &= this.scaleX === that.scaleX;
42       return !!eq;
43     },
44
45     almostEquals: function(that) {
46       var eq = true;
47       if (that === undefined || that === null)
48         return false;
49       eq &= Math.abs(this.panX - that.panX) < 0.001;
50       eq &= Math.abs(this.panY - that.panY) < 0.001;
51       eq &= Math.abs(this.scaleX - that.scaleX) < 0.001;
52       return !!eq;
53     },
54
55     incrementPanXInViewUnits: function(xDeltaView) {
56       this.panX += this.xViewVectorToWorld(xDeltaView);
57     },
58
59     xPanWorldPosToViewPos: function(worldX, viewX, viewWidth) {
60       if (typeof viewX == 'string') {
61         if (viewX === 'left') {
62           viewX = 0;
63         } else if (viewX === 'center') {
64           viewX = viewWidth / 2;
65         } else if (viewX === 'right') {
66           viewX = viewWidth - 1;
67         } else {
68           throw new Error('viewX must be left|center|right or number.');
69         }
70       }
71       this.panX = (viewX / this.scaleX) - worldX;
72     },
73
74     xPanWorldBoundsIntoView: function(worldMin, worldMax, viewWidth) {
75       if (this.xWorldToView(worldMin) < 0)
76         this.xPanWorldPosToViewPos(worldMin, 'left', viewWidth);
77       else if (this.xWorldToView(worldMax) > viewWidth)
78         this.xPanWorldPosToViewPos(worldMax, 'right', viewWidth);
79     },
80
81     xSetWorldBounds: function(worldMin, worldMax, viewWidth) {
82       var worldWidth = worldMax - worldMin;
83       var scaleX = viewWidth / worldWidth;
84       var panX = -worldMin;
85       this.setPanAndScale(panX, scaleX);
86     },
87
88     setPanAndScale: function(p, s) {
89       this.scaleX = s;
90       this.panX = p;
91     },
92
93     xWorldToView: function(x) {
94       return (x + this.panX) * this.scaleX;
95     },
96
97     xWorldVectorToView: function(x) {
98       return x * this.scaleX;
99     },
100
101     xViewToWorld: function(x) {
102       return (x / this.scaleX) - this.panX;
103     },
104
105     xViewVectorToWorld: function(x) {
106       return x / this.scaleX;
107     },
108
109     applyTransformToCanvas: function(ctx) {
110       ctx.transform(this.scaleX, 0, 0, 1, this.panX * this.scaleX, 0);
111     }
112   };
113
114   return {
115     TimelineDisplayTransform: TimelineDisplayTransform
116   };
117 });
118 </script>