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

Side by Side Diff: Source/devtools/front_end/elements/AnimationSection.js

Issue 620783002: Devtools Animations: Basic animation inspection & control in Styles pane (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Changed sequence number to string id Created 6 years, 2 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
OLDNEW
(Empty)
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 /**
6 * @constructor
7 * @param {?WebInspector.DOMModel.AnimationPlayer} animationPlayer
8 */
9 WebInspector.AnimationSection = function(animationPlayer)
10 {
11 this.propertiesSection = document.createElement("div");
12 this.setAnimationPlayer(animationPlayer);
13
14 this.element = document.createElement("div");
15 this.element.className = "styles-section";
16
17 this.element.appendChild(this._createAnimationControls());
18 this.element.appendChild(this.propertiesSection);
19 }
20
21 WebInspector.AnimationSection.prototype = {
22 /**
23 * @private
24 */
25 _updateCurrentTime: function()
26 {
27 /**
28 * @param {number} currentTime
29 * @param {boolean} isRunning
30 * @this {WebInspector.AnimationSection}
31 */
32 function updateSliderCallback(currentTime, isRunning)
33 {
34 this.currentTimeSlider.value = this.player.animation().iterationCoun t() == null ? currentTime % this.player.animation().duration() : currentTime;
35 if (isRunning)
36 requestAnimationFrame(this._updateCurrentTime.bind(this));
vsevik 2014/10/06 16:00:54 I think polling this on each animation frame creat
samli 2014/10/07 05:25:43 Done.
37 }
38 this.player.getCurrentState(updateSliderCallback.bind(this));
39 },
40
41 /**
42 * @return {!Element}
43 * @private
44 */
45 _createCurrentTimeSlider: function()
46 {
47 /**
48 * @param {!Event} e
49 * @this {WebInspector.AnimationSection}
50 */
51 function sliderInputHandler(e)
52 {
53 this.player.setCurrentTime(parseFloat(e.target.value), this.setAnima tionPlayer.bind(this));
54 }
55 var iterationDuration = this.player.animation().duration();
56 var iterationCount = this.player.animation().iterationCount();
57 var slider = document.createElement("input");
58 slider.type = "range";
59 slider.min = 0;
60 slider.step = 0.01;
61
62 if (!iterationCount) {
63 // Infinite iterations
64 slider.max = iterationDuration;
65 slider.value = this.player.currentTime() % iterationDuration;
66 } else {
67 slider.max = iterationCount * iterationDuration;
68 slider.value = this.player.currentTime();
69 }
70
71 slider.addEventListener("input", sliderInputHandler.bind(this));
72 requestAnimationFrame(this._updateCurrentTime.bind(this));
73 return slider;
74 },
75
76 /**
77 * @return {!Element}
78 * @private
79 */
80 _createAnimationControls: function()
81 {
82 /**
83 * @this {WebInspector.AnimationSection}
84 */
85 function pauseButtonHandler()
86 {
87 if (this.player.paused()) {
88 this.player.play(this.setAnimationPlayer.bind(this));
89 updatePauseButton.call(this, false);
90 } else {
91 this.player.pause(this.setAnimationPlayer.bind(this));
92 updatePauseButton.call(this, true);
93 }
94 }
95
96 /**
97 * @param {boolean} paused
98 * @this {WebInspector.AnimationSection}
99 */
100 function updatePauseButton(paused)
101 {
102 this._pauseButton.state = paused;
103 if (paused)
104 this._pauseButton.title = WebInspector.UIString("Play animation" );
105 else
106 this._pauseButton.title = WebInspector.UIString("Pause animation ");
107 }
108
109 this._pauseButton = new WebInspector.StatusBarButton("", "animation-paus e");
110 updatePauseButton.call(this, this.player.paused());
111 this._pauseButton.addEventListener("click", pauseButtonHandler, this);
112
113 this.currentTimeSlider = this._createCurrentTimeSlider();
114
115 var controls = document.createElement("div");
116 controls.appendChild(this._pauseButton.element);
117 controls.appendChild(this.currentTimeSlider);
118
119 return controls;
120 },
121
122 /**
123 * @param {?WebInspector.DOMModel.AnimationPlayer} p
124 */
125 setAnimationPlayer: function(p)
vsevik 2014/10/06 16:00:55 This should be private (name should start with und
samli 2014/10/07 05:25:43 Done.
126 {
127 if (!p || p === this.player)
128 return;
129
130 this.player = p;
131
132 if (p instanceof WebInspector.DOMModel.AnimationPlayer) {
vsevik 2014/10/06 16:00:54 Why do you need this check? It seems redundant
samli 2014/10/07 05:25:43 Done.
133 this.propertiesSection.removeChildren();
134 var animationObject = {
135 "paused": p.paused(),
136 "finished": p.finished(),
137 "start-time": p.startTime(),
138 "player-playback-rate": p.playbackRate(),
139 "id": p.id(),
140 "start-delay": p.animation().startDelay(),
141 "playback-rate": p.animation().playbackRate(),
142 "iteration-start": p.animation().iterationStart(),
143 "iteration-count": p.animation().iterationCount(),
144 "duration": p.animation().duration(),
145 "direction": p.animation().direction(),
146 "fill-mode": p.animation().fillMode(),
147 "time-fraction": p.animation().timeFraction()
148 };
149 var obj = WebInspector.RemoteObject.fromLocalObject(animationObject) ;
150 var section = new WebInspector.ObjectPropertiesSection(obj, WebInspe ctor.UIString("Animation Properties"));
151 this.propertiesSection.appendChild(section.element);
152
153 requestAnimationFrame(this._updateCurrentTime.bind(this));
154 }
155 }
156 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698