Index: Source/devtools/front_end/Layers3DView.js |
diff --git a/Source/devtools/front_end/Layers3DView.js b/Source/devtools/front_end/Layers3DView.js |
index a6c0504903fb87cb8f2b61fbeb58f57db451d4f3..39b66d82a77e4890d3b9318ab6805cc1ea029ef6 100644 |
--- a/Source/devtools/front_end/Layers3DView.js |
+++ b/Source/devtools/front_end/Layers3DView.js |
@@ -82,6 +82,15 @@ WebInspector.Layers3DView.PaintRectColors = [ |
WebInspector.Color.fromRGBA([0, 0xFF, 0, 0x3F]) |
] |
+/** |
+ * @enum {string} |
+ */ |
+WebInspector.Layers3DView.ScrollRectTitles = { |
+ RepaintsOnScroll: WebInspector.UIString("repaints on scroll"), |
+ TouchEventHandler: WebInspector.UIString("touch event listener"), |
+ WheelEventHandler: WebInspector.UIString("mousewheel event listener") |
+} |
+ |
WebInspector.Layers3DView.prototype = { |
onResize: function() |
{ |
@@ -215,6 +224,56 @@ WebInspector.Layers3DView.prototype = { |
style.webkitTransformOrigin = Math.round(this._paddingX + offsetX + root.width() * this._scale / 2) + "px " + Math.round(this._paddingY + offsetY + root.height() * this._scale / 2) + "px"; |
}, |
+ /** |
+ * @param {!WebInspector.Layer} layer |
+ * @return {!Element} |
+ */ |
+ _createScrollRectElement: function(layer) |
+ { |
+ var element = document.createElement("div"); |
+ var parentLayerElement = this._elementsByLayerId[layer.id()]; |
+ element.className = "scroll-rect"; |
+ parentLayerElement.appendChild(element); |
+ return element; |
+ }, |
+ |
+ /** |
+ * @param {!LayerTreeAgent.ScrollRect} rect |
+ * @param {!Element} element |
+ */ |
+ _updateScrollRectElement: function(rect, element) |
+ { |
+ var style = element.style; |
+ style.width = Math.round(rect.rect.width * this._scale) + "px"; |
+ style.height = Math.round(rect.rect.height * this._scale) + "px"; |
+ style.left = Math.round(rect.rect.x * this._scale) + "px"; |
+ style.top = Math.round(rect.rect.y * this._scale) + "px"; |
+ element.title = WebInspector.Layers3DView.ScrollRectTitles[rect.type]; |
+ }, |
+ |
+ /** |
+ * @param {!WebInspector.Layer} layer |
+ */ |
+ _updateScrollRectsForLayer: function(layer) |
+ { |
+ var layerDetails = this._elementsByLayerId[layer.id()].__layerDetails; |
+ |
+ /** |
+ * @param {!Element} element |
+ */ |
+ function removeElement(element) |
+ { |
+ element.remove() |
+ } |
+ |
+ if (layer.scrollRects().length !== layerDetails.scrollRectElements.length) { |
+ layerDetails.scrollRectElements.forEach(removeElement); |
+ layerDetails.scrollRectElements = layer.scrollRects().map(this._createScrollRectElement.bind(this, layer)); |
+ } |
+ for (var i = 0; i < layer.scrollRects().length; ++i) |
+ this._updateScrollRectElement(layer.scrollRects()[i], layerDetails.scrollRectElements[i]); |
+ }, |
+ |
_update: function() |
{ |
if (!this.isShowing()) { |
@@ -234,6 +293,7 @@ WebInspector.Layers3DView.prototype = { |
function updateLayer(layer) |
{ |
this._updateLayerElement(this._elementForLayer(layer)); |
+ this._updateScrollRectsForLayer(layer); |
} |
this._clientWidth = this.element.clientWidth; |
this._clientHeight = this.element.clientHeight; |
@@ -245,7 +305,7 @@ WebInspector.Layers3DView.prototype = { |
} |
this._scaleToFit(); |
this._updateTransform(); |
- this._model.forEachLayer(updateLayer.bind(this), this._model.contentRoot()); |
+ this._model.forEachLayer(updateLayer.bind(this)); |
this._needsUpdate = false; |
}, |
@@ -272,9 +332,8 @@ WebInspector.Layers3DView.prototype = { |
return element; |
} |
element = document.createElement("div"); |
- element.className = "layer-container"; |
- ["fill back-wall", "side-wall top", "side-wall right", "side-wall bottom", "side-wall left"].forEach(element.createChild.bind(element, "div")); |
element.__layerDetails = new WebInspector.LayerDetails(layer, element.createChild("div", "paint-rect")); |
+ ["fill back-wall", "side-wall top", "side-wall right", "side-wall bottom", "side-wall left"].forEach(element.createChild.bind(element, "div")); |
this._elementsByLayerId[layer.id()] = element; |
return element; |
}, |
@@ -286,9 +345,25 @@ WebInspector.Layers3DView.prototype = { |
{ |
var layer = element.__layerDetails.layer; |
var style = element.style; |
- var isContentRoot = layer === this._model.contentRoot(); |
- var parentElement = isContentRoot ? this._rotatingContainerElement : this._elementForLayer(layer.parent()); |
- element.__layerDetails.depth = parentElement.__layerDetails ? parentElement.__layerDetails.depth + 1 : 0; |
+ |
+ var contentRoot = /** @type {!WebInspector.Layer} */ (this._model.contentRoot()); |
+ var isContentRoot = layer === contentRoot; |
+ var isRoot = layer === this._model.root(); |
+ var parentElement; |
+ if (isContentRoot) { |
+ parentElement = this._rotatingContainerElement; |
+ element.__layerDetails.depth = 0; |
+ } else if (isRoot) { |
+ parentElement = this._elementForLayer(contentRoot); |
+ element.__layerDetails.depth = undefined; |
+ } else { |
+ parentElement = this._elementForLayer(layer.parent()); |
+ element.__layerDetails.depth = parentElement.__layerDetails.isAboveContentRoot() ? undefined : parentElement.__layerDetails.depth + 1; |
+ } |
+ if (!element.__layerDetails.isAboveContentRoot()) |
+ element.className = "layer-container"; |
+ else |
+ element.className = "layer-transparent"; |
element.classList.toggle("invisible", layer.invisible()); |
this._updateElementColor(element); |
if (parentElement !== element.parentElement) |
@@ -297,7 +372,7 @@ WebInspector.Layers3DView.prototype = { |
style.width = Math.round(layer.width() * this._scale) + "px"; |
style.height = Math.round(layer.height() * this._scale) + "px"; |
this._updatePaintRect(element); |
- if (isContentRoot) |
+ if (isContentRoot || isRoot) |
return; |
style.left = Math.round(layer.offsetX() * this._scale) + "px"; |
style.top = Math.round(layer.offsetY() * this._scale) + "px"; |
@@ -322,6 +397,9 @@ WebInspector.Layers3DView.prototype = { |
} |
}, |
+ /** |
+ * @param {!Element} element |
+ */ |
_updatePaintRect: function(element) |
{ |
var details = element.__layerDetails; |
@@ -434,4 +512,15 @@ WebInspector.LayerDetails = function(layer, paintRectElement) |
this.depth = 0; |
this.paintRectElement = paintRectElement; |
this.paintCount = 0; |
+ this.scrollRectElements = []; |
+} |
+ |
+WebInspector.LayerDetails.prototype = { |
+ /** |
+ * @return {boolean} |
+ */ |
+ isAboveContentRoot: function() |
+ { |
+ return this.depth === undefined; |
+ } |
} |