Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: Source/devtools/front_end/TransformController.js

Issue 177353005: Layers view: Extract zoom/pan/rotate logic into transorm controller (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 /*
2 * Copyright 2014 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7 /**
8 * @constructor
9 * @extends {WebInspector.Object}
10 * @param {!Element} element
11 */
12 WebInspector.TransformController = function(element)
13 {
14 this.element = element;
15 element.addEventListener("mousemove", this._onMouseMove.bind(this), false);
16 element.addEventListener("mouseout", this._onMouseMove.bind(this), false);
17 element.addEventListener("mousedown", this._onMouseDown.bind(this), false);
18 element.addEventListener("mouseup", this._onMouseUp.bind(this), false);
19 element.addEventListener("mousewheel", this._onMouseWheel.bind(this), false) ;
20 this.reset();
21 }
22
23 /**
24 * @enum {string}
25 */
26 WebInspector.TransformController.Events = {
27 TransformChanged: "TransformChanged"
28 }
29
30 /**
31 * @enum {number}
32 */
33 WebInspector.TransformController.TransformType = {
34 Offset: 1,
pfeldman 2014/03/04 15:55:49 1 << 0
35 Scale: 2,
pfeldman 2014/03/04 15:55:49 1 << 1
36 Rotation: 4
pfeldman 2014/03/04 15:55:49 1 << 2
37 }
38
39 WebInspector.TransformController.prototype = {
40 /**
41 * @param {number} changeType
42 */
43 _postChangeEvent: function(changeType)
44 {
45 this.dispatchEventToListeners(WebInspector.TransformController.Events.Tr ansformChanged, changeType);
46 },
47
48 /**
49 * @param {?Event} event
50 */
51 _onMouseMove: function(event)
52 {
53 if (event.which !== 1)
54 return;
55 // Set reference point if we missed mousedown.
56 if (typeof this._originX !== "number")
57 this._setReferencePoint(event);
58 this._rotateX = this._oldRotateX + (this._originY - event.clientY) / 2;
59 this._rotateY = this._oldRotateY - (this._originX - event.clientX) / 4;
60 this._postChangeEvent(WebInspector.TransformController.TransformType.Rot ation);
61 },
62
63 reset: function()
64 {
65 this._scale = 1;
66 this._offsetX = 0;
67 this._offsetY = 0;
68 this._rotateX = 0;
69 this._rotateY = 0;
70 },
71
72 /**
73 * @return {number}
74 */
75 scale: function()
76 {
77 return this._scale;
78 },
79
80 /**
81 * @return {number}
82 */
83 offsetX: function()
84 {
85 return this._offsetX;
86 },
87
88 /**
89 * @return {number}
90 */
91 offsetY: function()
92 {
93 return this._offsetY;
94 },
95
96 /**
97 * @return {number}
98 */
99 rotateX: function()
100 {
101 return this._rotateX;
102 },
103
104 /**
105 * @return {number}
106 */
107 rotateY: function()
108 {
109 return this._rotateY;
110 },
111
112 /**
113 * @param {?Event} event
114 */
115 _onMouseWheel: function(event)
116 {
117 if (event.shiftKey) {
118 const zoomFactor = 1.1;
119 const mouseWheelZoomSpeed = 1 / 120;
120 var scaleFactor = Math.pow(zoomFactor, event.wheelDeltaY * mouseWhee lZoomSpeed);
121 this._scale *= scaleFactor;
122 this._offsetX -= (event.clientX - this.element.totalOffsetLeft() - t his._offsetX) * (scaleFactor - 1);
123 this._offsetY -= (event.clientY - this.element.totalOffsetTop() - th is._offsetY) * (scaleFactor - 1);
124 this._postChangeEvent(WebInspector.TransformController.TransformType .Scale | WebInspector.TransformController.TransformType.Offset);
125 } else {
126 this._offsetX += event.wheelDeltaX;
127 this._offsetY += event.wheelDeltaY;
128 this._postChangeEvent(WebInspector.TransformController.TransformType .Offset);
129 }
130 },
131
132 /**
133 * @param {?Event} event
134 */
135 _setReferencePoint: function(event)
136 {
137 this._originX = event.clientX;
138 this._originY = event.clientY;
139 this._oldRotateX = this._rotateX;
140 this._oldRotateY = this._rotateY;
141 },
142
143 _resetReferencePoint: function()
144 {
145 delete this._originX;
146 delete this._originY;
147 delete this._oldRotateX;
148 delete this._oldRotateY;
149 },
150
151 /**
152 * @param {?Event} event
153 */
154 _onMouseDown: function(event)
155 {
156 if (event.which !== 1)
157 return;
158 this._setReferencePoint(event);
159 },
160
161 /**
162 * @param {?Event} event
163 */
164 _onMouseUp: function(event)
165 {
166 if (event.which !== 1)
167 return;
168 this._resetReferencePoint();
169 },
170
171 __proto__: WebInspector.Object.prototype
172 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698