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