Title: [221901] trunk/Source/WebInspectorUI
Revision
221901
Author
[email protected]
Date
2017-09-11 22:06:07 -0700 (Mon, 11 Sep 2017)

Log Message

Web Inspector: Canvas: improve recording controls and state management
https://bugs.webkit.org/show_bug.cgi?id=176762
<rdar://problem/34382294>

Reviewed by Devin Rousso.

CanvasManager should be responsible for starting/stopping recordings
and tracking state. Fixing this layering issue lets CanvasContentView
better manage its recording UI.

* UserInterface/Controllers/CanvasManager.js:
(WI.CanvasManager):
(WI.CanvasManager.prototype.get recordingCanvas):
(WI.CanvasManager.prototype.startRecording):
(WI.CanvasManager.prototype.stopRecording):

* UserInterface/Models/Canvas.js:
(WI.Canvas.prototype.get isRecording):
(WI.Canvas.prototype.toggleRecording): Deleted.

* UserInterface/Views/CanvasContentView.css:
(.navigation-bar > .item.canvas-record.disabled):

* UserInterface/Views/CanvasContentView.js:
(WI.CanvasContentView.prototype.shown):
(WI.CanvasContentView.prototype._toggleRecording):
(WI.CanvasContentView.prototype._recordingFinished):
(WI.CanvasContentView.prototype._updateRecordNavigationItem):

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (221900 => 221901)


--- trunk/Source/WebInspectorUI/ChangeLog	2017-09-12 02:09:28 UTC (rev 221900)
+++ trunk/Source/WebInspectorUI/ChangeLog	2017-09-12 05:06:07 UTC (rev 221901)
@@ -1,3 +1,34 @@
+2017-09-11  Matt Baker  <[email protected]>
+
+        Web Inspector: Canvas: improve recording controls and state management
+        https://bugs.webkit.org/show_bug.cgi?id=176762
+        <rdar://problem/34382294>
+
+        Reviewed by Devin Rousso.
+
+        CanvasManager should be responsible for starting/stopping recordings
+        and tracking state. Fixing this layering issue lets CanvasContentView
+        better manage its recording UI.
+
+        * UserInterface/Controllers/CanvasManager.js:
+        (WI.CanvasManager):
+        (WI.CanvasManager.prototype.get recordingCanvas):
+        (WI.CanvasManager.prototype.startRecording):
+        (WI.CanvasManager.prototype.stopRecording):
+
+        * UserInterface/Models/Canvas.js:
+        (WI.Canvas.prototype.get isRecording):
+        (WI.Canvas.prototype.toggleRecording): Deleted.
+
+        * UserInterface/Views/CanvasContentView.css:
+        (.navigation-bar > .item.canvas-record.disabled):
+
+        * UserInterface/Views/CanvasContentView.js:
+        (WI.CanvasContentView.prototype.shown):
+        (WI.CanvasContentView.prototype._toggleRecording):
+        (WI.CanvasContentView.prototype._recordingFinished):
+        (WI.CanvasContentView.prototype._updateRecordNavigationItem):
+
 2017-09-11  Joseph Pecoraro  <[email protected]>
 
         Web Inspector: Cleanup and test MIMETypeUtilities

Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js (221900 => 221901)


--- trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js	2017-09-12 02:09:28 UTC (rev 221900)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/CanvasManager.js	2017-09-12 05:06:07 UTC (rev 221901)
@@ -33,6 +33,7 @@
 
         this._canvasIdentifierMap = new Map;
         this._shaderProgramIdentifierMap = new Map;
+        this._recordingCanvas = null;
 
         if (window.CanvasAgent)
             CanvasAgent.enable();
@@ -50,6 +51,42 @@
         return [...this._shaderProgramIdentifierMap.values()];
     }
 
+    get recordingCanvas() { return this._recordingCanvas; }
+
+    startRecording(canvas, singleFrame)
+    {
+        console.assert(!this._recordingCanvas, "Recording already started.");
+        if (this._recordingCanvas)
+            return;
+
+        this._recordingCanvas = canvas;
+
+        CanvasAgent.requestRecording(canvas.identifier, singleFrame, (error) => {
+            if (!error)
+                return;
+
+            console.error(error);
+            this._recordingCanvas = null;
+
+            this.dispatchEventToListeners(WI.CanvasManager.Event.RecordingFinished, {canvas, recording: null});
+        });
+    }
+
+    stopRecording()
+    {
+        console.assert(this._recordingCanvas, "No recording started.");
+        if (!this._recordingCanvas)
+            return;
+
+        let canvasIdentifier = this._recordingCanvas.identifier;
+        this._recordingCanvas = null;
+
+        CanvasAgent.cancelRecording(canvasIdentifier, (error) => {
+            if (error)
+                console.error(error);
+        });
+    }
+
     canvasAdded(canvasPayload)
     {
         // Called from WI.CanvasObserver.

Modified: trunk/Source/WebInspectorUI/UserInterface/Models/Canvas.js (221900 => 221901)


--- trunk/Source/WebInspectorUI/UserInterface/Models/Canvas.js	2017-09-12 02:09:28 UTC (rev 221900)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/Canvas.js	2017-09-12 05:06:07 UTC (rev 221901)
@@ -108,6 +108,11 @@
     get contextAttributes() { return this._contextAttributes; }
     get shaderProgramCollection() { return this._shaderProgramCollection; }
 
+    get isRecording()
+    {
+        return WI.canvasManager.recordingCanvas === this;
+    }
+
     get memoryCost()
     {
         return this._memoryCost;
@@ -198,14 +203,6 @@
         });
     }
 
-    toggleRecording(flag, singleFrame, callback)
-    {
-        if (flag)
-            CanvasAgent.requestRecording(this._identifier, singleFrame, callback);
-        else
-            CanvasAgent.cancelRecording(this._identifier, callback);
-    }
-
     saveIdentityToCookie(cookie)
     {
         cookie[WI.Canvas.FrameURLCookieKey] = this._frame.url.hash;

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CanvasContentView.css (221900 => 221901)


--- trunk/Source/WebInspectorUI/UserInterface/Views/CanvasContentView.css	2017-09-12 02:09:28 UTC (rev 221900)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CanvasContentView.css	2017-09-12 05:06:07 UTC (rev 221901)
@@ -40,3 +40,8 @@
     max-width: 100%;
     max-height: 100%;
 }
+
+.navigation-bar > .item.canvas-record.disabled {
+    filter: grayscale();
+    opacity: 0.5;
+}

Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CanvasContentView.js (221900 => 221901)


--- trunk/Source/WebInspectorUI/UserInterface/Views/CanvasContentView.js	2017-09-12 02:09:28 UTC (rev 221900)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CanvasContentView.js	2017-09-12 05:06:07 UTC (rev 221901)
@@ -77,6 +77,7 @@
         super.shown();
 
         this._showPreview();
+        this._updateRecordNavigationItem();
 
         WI.settings.showImageGrid.addEventListener(WI.Setting.Event.Changed, this._updateImageGrid, this);
     }
@@ -99,22 +100,27 @@
 
     _toggleRecording(event)
     {
-        let toggled = this._recordButtonNavigationItem.toggled;
-        let singleFrame = event.data.nativeEvent.shiftKey;
-        this.representedObject.toggleRecording(!toggled, singleFrame, (error) => {
-            console.assert(!error);
+        if (this.representedObject.isRecording)
+            WI.canvasManager.stopRecording();
+        else if (!WI.canvasManager.recordingCanvas) {
+            let singleFrame = event.data.nativeEvent.shiftKey;
+            WI.canvasManager.startRecording(this.representedObject, singleFrame);
+        }
 
-            this._recordButtonNavigationItem.toggled = !toggled;
-        });
+        this._updateRecordNavigationItem();
     }
 
     _recordingFinished(event)
     {
+        this._updateRecordNavigationItem();
+
         if (event.data.canvas !== this.representedObject)
             return;
 
-        if (this._recordButtonNavigationItem)
-            this._recordButtonNavigationItem.toggled = false;
+        if (!event.data.recording) {
+            console.error("Missing recording.");
+            return;
+        }
 
         WI.showRepresentedObject(event.data.recording);
     }
@@ -159,6 +165,15 @@
         });
     }
 
+    _updateRecordNavigationItem()
+    {
+        if (!this._recordButtonNavigationItem)
+            return;
+
+        this._recordButtonNavigationItem.enabled = this.representedObject.isRecording || !WI.canvasManager.recordingCanvas;
+        this._recordButtonNavigationItem.toggled = this.representedObject.isRecording;
+    }
+
     _updateImageGrid()
     {
         if (!this._previewImageElement)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to