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

Unified Diff: Source/devtools/front_end/ui/SplitWidget.js

Issue 1156953002: Devtools: Replace split widget rAF animation with web animation (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/ui/SplitWidget.js
diff --git a/Source/devtools/front_end/ui/SplitWidget.js b/Source/devtools/front_end/ui/SplitWidget.js
index 592e2a1227e47dd1c39aa0fc2c032daf8c9cc28a..479937350ddb031f92ec82917a7b8e385eb6bea9 100644
--- a/Source/devtools/front_end/ui/SplitWidget.js
+++ b/Source/devtools/front_end/ui/SplitWidget.js
@@ -508,7 +508,17 @@ WebInspector.SplitWidget.prototype = {
*/
_animate: function(reverse, callback)
{
- var animationTime = 50;
+ /**
+ * @param {number} timeStamp
+ * @this {!WebInspector.SplitWidget}
+ */
+ function animationFrame(timeStamp)
+ {
+ this._mainWidget.doResize();
+ if (player.playState !== "finished")
+ this.contentElement.window().requestAnimationFrame(animationFrame.bind(this));
+ }
+
this._animationCallback = callback;
var animatedMarginPropertyName;
@@ -517,53 +527,19 @@ WebInspector.SplitWidget.prototype = {
else
animatedMarginPropertyName = this._secondIsSidebar ? "margin-bottom" : "margin-top";
- var marginFrom = reverse ? "0" : "-" + WebInspector.zoomManager.dipToCSS(this._sidebarSizeDIP) + "px";
- var marginTo = reverse ? "-" + WebInspector.zoomManager.dipToCSS(this._sidebarSizeDIP) + "px" : "0";
+ var sidebarSize = this._sidebarSizeDIP !== -1 ? this._sidebarSizeDIP : 0
+ var marginFrom = reverse ? "0" : "-" + WebInspector.zoomManager.dipToCSS(sidebarSize) + "px";
+ var marginTo = reverse ? "-" + WebInspector.zoomManager.dipToCSS(sidebarSize) + "px" : "0";
- // This order of things is important.
- // 1. Resize main element early and force layout.
- this.contentElement.style.setProperty(animatedMarginPropertyName, marginFrom);
- if (!reverse) {
- suppressUnused(this._mainElement.offsetWidth);
- suppressUnused(this._sidebarElement.offsetWidth);
- }
-
- // 2. Issue onresize to the sidebar element, its size won't change.
- if (!reverse)
- this._sidebarWidget.doResize();
dgozman 2015/05/28 11:43:53 This seems valuable.
-
- // 3. Configure and run animation
- this.contentElement.style.setProperty("transition", animatedMarginPropertyName + " " + animationTime + "ms linear");
+ this.contentElement.style.setProperty(animatedMarginPropertyName, marginTo);
+ var keyframes = [{}, {}];
+ keyframes[0][animatedMarginPropertyName] = marginFrom;
+ keyframes[1][animatedMarginPropertyName] = marginTo;
+ var player = this.contentElement.animate(keyframes, { duration: 150, easing: "cubic-bezier(0, 0, 0.2, 1)" });
+ player.onfinish = this._cancelAnimation.bind(this);
- var boundAnimationFrame;
- var startTime;
- /**
- * @this {WebInspector.SplitWidget}
- */
- function animationFrame()
- {
- delete this._animationFrameHandle;
-
- if (!startTime) {
- // Kick animation on first frame.
- this.contentElement.style.setProperty(animatedMarginPropertyName, marginTo);
- startTime = window.performance.now();
- } else if (window.performance.now() < startTime + animationTime) {
- // Process regular animation frame.
- if (this._mainWidget)
- this._mainWidget.doResize();
- } else {
- // Complete animation.
- this._cancelAnimation();
- if (this._mainWidget)
- this._mainWidget.doResize();
- this.dispatchEventToListeners(WebInspector.SplitWidget.Events.SidebarSizeChanged, this.sidebarSize());
- return;
- }
- this._animationFrameHandle = this.contentElement.window().requestAnimationFrame(boundAnimationFrame);
- }
- boundAnimationFrame = animationFrame.bind(this);
- this._animationFrameHandle = this.contentElement.window().requestAnimationFrame(boundAnimationFrame);
+ if (this._mainWidget)
+ this.contentElement.window().requestAnimationFrame(animationFrame.bind(this));
},
_cancelAnimation: function()
@@ -574,14 +550,15 @@ WebInspector.SplitWidget.prototype = {
this.contentElement.style.removeProperty("margin-left");
this.contentElement.style.removeProperty("transition");
- if (this._animationFrameHandle) {
- this.contentElement.window().cancelAnimationFrame(this._animationFrameHandle);
- delete this._animationFrameHandle;
- }
if (this._animationCallback) {
this._animationCallback();
delete this._animationCallback;
}
+
+ if (this._mainWidget)
+ this._mainWidget.doResize();
dgozman 2015/05/28 11:43:53 This causes a lot of extra resizes, since |_cancel
+
+ this.dispatchEventToListeners(WebInspector.SplitWidget.Events.SidebarSizeChanged, this.sidebarSize());
},
/**
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698