Index: third_party/WebKit/Source/devtools/front_end/emulation/ResponsiveDesignView.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/emulation/ResponsiveDesignView.js b/third_party/WebKit/Source/devtools/front_end/emulation/ResponsiveDesignView.js |
deleted file mode 100644 |
index f329a37c384067034c78355d988b5413dc8f3bbb..0000000000000000000000000000000000000000 |
--- a/third_party/WebKit/Source/devtools/front_end/emulation/ResponsiveDesignView.js |
+++ /dev/null |
@@ -1,890 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.VBox} |
- * @implements {WebInspector.OverridesSupport.PageResizer} |
- * @implements {WebInspector.TargetManager.Observer} |
- * @param {!WebInspector.InspectedPagePlaceholder} inspectedPagePlaceholder |
- */ |
-WebInspector.ResponsiveDesignView = function(inspectedPagePlaceholder) |
-{ |
- WebInspector.VBox.call(this); |
- this.setMinimumSize(150, 150); |
- this.element.classList.add("responsive-design-view"); |
- this.registerRequiredCSS("emulation/responsiveDesignView.css"); |
- |
- this._showMediaQueryInspectorSetting = WebInspector.settings.createSetting("showMediaQueryInspector", false); |
- |
- this._responsiveDesignContainer = new WebInspector.VBox(); |
- this._uiInitialized = false; |
- |
- this._inspectedPagePlaceholder = inspectedPagePlaceholder; |
- inspectedPagePlaceholder.show(this.element); |
- |
- this._enabled = false; |
- this._viewport = { scrollX: 0, scrollY: 0, contentsWidth: 0, contentsHeight: 0, pageScaleFactor: 1, minimumPageScaleFactor: 1, maximumPageScaleFactor: 1 }; |
- this._drawContentsSize = true; |
- this._deviceInsets = new Insets(0, 0, 0, 0); |
- this._pageContainerSrcset = ""; |
- this._viewportChangedThrottler = new WebInspector.Throttler(0); |
- this._pageScaleFactorThrottler = new WebInspector.Throttler(50); |
- |
- WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.ZoomChanged, this._onZoomChanged, this); |
- WebInspector.overridesSupport.addEventListener(WebInspector.OverridesSupport.Events.EmulationStateChanged, this._emulationEnabledChanged, this); |
- WebInspector.targetManager.observeTargets(this, WebInspector.Target.Type.Page); |
- this._emulationEnabledChanged(); |
-}; |
- |
-// Measured in DIP. |
-WebInspector.ResponsiveDesignView.RulerWidth = 26; |
-WebInspector.ResponsiveDesignView.RulerHeight = 22; |
-WebInspector.ResponsiveDesignView.RulerTopHeight = 11; |
-WebInspector.ResponsiveDesignView.RulerBottomHeight = 9; |
- |
-WebInspector.ResponsiveDesignView.prototype = { |
- _ensureUIInitialized: function() |
- { |
- if (this._uiInitialized) |
- return; |
- |
- this._uiInitialized = true; |
- |
- this._createToolbar(); |
- |
- this._canvasContainer = new WebInspector.Widget(); |
- this._canvasContainer.element.classList.add("responsive-design"); |
- this._canvasContainer.show(this._responsiveDesignContainer.element); |
- |
- this._canvas = this._canvasContainer.element.createChild("canvas", "fill responsive-design-canvas"); |
- |
- this._mediaInspectorContainer = this._canvasContainer.element.createChild("div", "responsive-design-media-container"); |
- WebInspector.Tooltip.addNativeOverrideContainer(this._mediaInspectorContainer); |
- var deviceWidthSetting = WebInspector.overridesSupport.settings.deviceWidth; |
- this._mediaInspector = new WebInspector.MediaQueryInspector(deviceWidthSetting.get.bind(deviceWidthSetting), deviceWidthSetting.set.bind(deviceWidthSetting)); |
- this._updateMediaQueryInspector(); |
- |
- WebInspector.overridesSupport.addEventListener(WebInspector.OverridesSupport.Events.OverridesWarningUpdated, this._overridesWarningUpdated, this); |
- |
- this._slidersContainer = this._canvasContainer.element.createChild("div", "vbox responsive-design-sliders-container"); |
- var genericDeviceOutline = this._slidersContainer.createChild("div", "responsive-design-generic-outline-container"); |
- genericDeviceOutline.createChild("div", "responsive-design-generic-outline"); |
- var widthSlider = this._slidersContainer.createChild("div", "responsive-design-slider-width"); |
- widthSlider.createChild("div", "responsive-design-thumb-handle"); |
- this._createResizer(widthSlider, true, false); |
- var heightSlider = this._slidersContainer.createChild("div", "responsive-design-slider-height"); |
- heightSlider.createChild("div", "responsive-design-thumb-handle"); |
- this._createResizer(heightSlider, false, true); |
- var cornerSlider = this._slidersContainer.createChild("div", "responsive-design-slider-corner"); |
- this._createResizer(cornerSlider, true, true); |
- this._pageContainer = this._slidersContainer.createChild("div", "vbox flex-auto responsive-design-page-container"); |
- this._pageContainerImage = this._pageContainer.createChild("img", "responsive-design-page-container-image hidden"); |
- this._pageContainerImage.addEventListener("load", this._onPageContainerImageLoaded.bind(this, true), false); |
- this._pageContainerImage.addEventListener("error", this._onPageContainerImageLoaded.bind(this, false), false); |
- |
- // Page scale controls. |
- this._pageScaleContainer = this._canvasContainer.element.createChild("div", "hbox responsive-design-page-scale-container"); |
- this._decreasePageScaleButton = this._pageScaleContainer.createChild("button", "responsive-design-page-scale-button responsive-design-page-scale-decrease"); |
- this._decreasePageScaleButton.createChild("div", "glyph"); |
- this._decreasePageScaleButton.tabIndex = -1; |
- this._decreasePageScaleButton.addEventListener("click", this._pageScaleButtonClicked.bind(this, false), false); |
- |
- this._pageScaleLabel = this._pageScaleContainer.createChild("label", "responsive-design-page-scale-label"); |
- this._pageScaleLabel.title = WebInspector.UIString("Shift + drag to change page scale"); |
- this._pageScaleLabel.addEventListener("dblclick", this._resetPageScale.bind(this), false); |
- |
- this._increasePageScaleButton = this._pageScaleContainer.createChild("button", "responsive-design-page-scale-button responsive-design-page-scale-increase"); |
- this._increasePageScaleButton.tabIndex = -1; |
- this._increasePageScaleButton.createChild("div", "glyph"); |
- this._increasePageScaleButton.addEventListener("click", this._pageScaleButtonClicked.bind(this, true), false); |
- |
- this._mediaInspector.addEventListener(WebInspector.MediaQueryInspector.Events.CountUpdated, this._updateMediaQueryInspectorButton, this); |
- this._overridesWarningUpdated(); |
- }, |
- |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetAdded: function(target) |
- { |
- if (this._target) |
- return; |
- this._target = target; |
- target.registerEmulationDispatcher(new WebInspector.EmulationDispatcher(this)); |
- }, |
- |
- /** |
- * @override |
- * @param {!WebInspector.Target} target |
- */ |
- targetRemoved: function(target) |
- { |
- }, |
- |
- _invalidateCache: function() |
- { |
- delete this._cachedScale; |
- delete this._cachedCssCanvasWidth; |
- delete this._cachedCssCanvasHeight; |
- delete this._cachedCssHeight; |
- delete this._cachedCssWidth; |
- delete this._cachedCssPageWidth; |
- delete this._cachedCssPageHeight; |
- delete this._cachedDeviceInsets; |
- delete this._cachedZoomFactor; |
- delete this._cachedViewport; |
- delete this._cachedDrawContentsSize; |
- delete this._cachedMediaInspectorHeight; |
- delete this._availableSize; |
- }, |
- |
- _emulationEnabledChanged: function() |
- { |
- var enabled = WebInspector.overridesSupport.emulationEnabled(); |
- if (enabled && !this._enabled) { |
- WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.DeviceModeEnabled); |
- this._invalidateCache(); |
- this._ignoreResize = true; |
- this._ensureUIInitialized(); |
- this._enabled = true; |
- this._mediaInspector.setEnabled(true); |
- this._inspectedPagePlaceholder.clearMinimumSizeAndMargins(); |
- this._inspectedPagePlaceholder.show(this._pageContainer); |
- this._responsiveDesignContainer.show(this.element); |
- delete this._ignoreResize; |
- this.onResize(); |
- } else if (!enabled && this._enabled) { |
- this._mediaInspector.setEnabled(false); |
- this._invalidateCache(); |
- this._ignoreResize = true; |
- this._enabled = false; |
- this._scale = 1; |
- this._inspectedPagePlaceholder.restoreMinimumSizeAndMargins(); |
- this._responsiveDesignContainer.detach(); |
- this._inspectedPagePlaceholder.show(this.element); |
- delete this._ignoreResize; |
- this.onResize(); |
- } |
- }, |
- |
- /** |
- * @override |
- * WebInspector.OverridesSupport.PageResizer override. |
- * @param {number} dipWidth |
- * @param {number} dipHeight |
- * @param {number} scale |
- * @param {number} pageWidth |
- * @param {number} pageHeight |
- */ |
- update: function(dipWidth, dipHeight, scale, pageWidth, pageHeight) |
- { |
- this._scale = scale; |
- this._dipWidth = dipWidth ? Math.max(dipWidth, 1) : 0; |
- this._dipHeight = dipHeight ? Math.max(dipHeight, 1) : 0; |
- this._pageWidth = pageWidth ? Math.max(pageWidth, 1) : 0; |
- this._pageHeight = pageHeight ? Math.max(pageHeight, 1) : 0; |
- this._updateUI(); |
- }, |
- |
- updatePageResizer: function() |
- { |
- var available = this._availableDipSize(); |
- WebInspector.overridesSupport.setPageResizer(this, available.size, available.insets); |
- }, |
- |
- /** |
- * @return {!{size: !Size, insets: !Insets}} |
- */ |
- _availableDipSize: function() |
- { |
- if (typeof this._availableSize === "undefined") { |
- if (!this._enabled) |
- return {size: new Size(1, 1), insets: new Insets(0, 0, 0, 0)}; |
- var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
- var rect = this._canvasContainer.element.getBoundingClientRect(); |
- var rulerTotalHeight = this._rulerTotalHeightDIP(); |
- this._availableSize = {size: new Size(Math.max(rect.width * zoomFactor - WebInspector.ResponsiveDesignView.RulerWidth, 1), |
- Math.max(rect.height * zoomFactor - rulerTotalHeight, 1)), |
- insets: this._deviceInsets}; |
- } |
- return this._availableSize; |
- }, |
- |
- /** |
- * @param {!Element} element |
- * @param {boolean} x |
- * @param {boolean} y |
- * @return {!WebInspector.ResizerWidget} |
- */ |
- _createResizer: function(element, x, y) |
- { |
- var resizer = new WebInspector.ResizerWidget(); |
- resizer.addElement(element); |
- resizer.setCursor(x && y ? "nwse-resize" : (x ? "ew-resize" : "ns-resize")); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeStart, this._onResizeStart, this); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeUpdate, this._onResizeUpdate.bind(this, x, y)); |
- resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeEnd, this._onResizeEnd, this); |
- return resizer; |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onResizeStart: function(event) |
- { |
- this._drawContentsSize = false; |
- var available = this._availableDipSize().size; |
- this._slowPositionStart = null; |
- this._resizeStart = { x: this._dipWidth || available.width, y : this._dipHeight || available.height }; |
- this.dispatchEventToListeners(WebInspector.OverridesSupport.PageResizer.Events.FixedScaleRequested, true); |
- this._updateUI(); |
- }, |
- |
- /** |
- * @param {boolean} x |
- * @param {boolean} y |
- * @param {!WebInspector.Event} event |
- */ |
- _onResizeUpdate: function(x, y, event) |
- { |
- if (event.data.shiftKey !== !!this._slowPositionStart) |
- this._slowPositionStart = event.data.shiftKey ? { x: event.data.currentX, y: event.data.currentY } : null; |
- |
- var cssOffsetX = event.data.currentX - event.data.startX; |
- var cssOffsetY = event.data.currentY - event.data.startY; |
- if (this._slowPositionStart) { |
- cssOffsetX = (event.data.currentX - this._slowPositionStart.x) / 10 + this._slowPositionStart.x - event.data.startX; |
- cssOffsetY = (event.data.currentY - this._slowPositionStart.y) / 10 + this._slowPositionStart.y - event.data.startY; |
- } |
- var dipOffsetX = Math.round(cssOffsetX * WebInspector.zoomManager.zoomFactor()); |
- var dipOffsetY = Math.round(cssOffsetY * WebInspector.zoomManager.zoomFactor()); |
- |
- var newSizeX = this._resizeStart.x + dipOffsetX; |
- newSizeX = Math.round(newSizeX / (this._scale || 1)); |
- newSizeX = Math.max(Math.min(newSizeX, WebInspector.OverridesSupport.MaxDeviceSize), 1); |
- var newSizeY = this._resizeStart.y + dipOffsetY; |
- newSizeY = Math.round(newSizeY / (this._scale || 1)); |
- newSizeY = Math.max(Math.min(newSizeY, WebInspector.OverridesSupport.MaxDeviceSize), 1); |
- |
- var requested = {}; |
- if (x) |
- requested.width = newSizeX; |
- if (y) |
- requested.height = newSizeY; |
- this.dispatchEventToListeners(WebInspector.OverridesSupport.PageResizer.Events.ResizeRequested, requested); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _onResizeEnd: function(event) |
- { |
- this._drawContentsSize = true; |
- this.dispatchEventToListeners(WebInspector.OverridesSupport.PageResizer.Events.FixedScaleRequested, false); |
- delete this._resizeStart; |
- this._updateUI(); |
- }, |
- |
- /** |
- * Draws canvas of the specified css size in DevTools page space. |
- * Canvas contains grid and rulers. |
- * @param {number} cssCanvasWidth |
- * @param {number} cssCanvasHeight |
- * @param {number} rulerHeight |
- */ |
- _drawCanvas: function(cssCanvasWidth, cssCanvasHeight, rulerHeight) |
- { |
- if (!this._enabled) |
- return; |
- |
- var canvas = this._canvas; |
- var context = canvas.getContext("2d"); |
- canvas.style.width = cssCanvasWidth + "px"; |
- canvas.style.height = cssCanvasHeight + "px"; |
- |
- var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
- var dipCanvasWidth = cssCanvasWidth * zoomFactor; |
- var dipCanvasHeight = cssCanvasHeight * zoomFactor; |
- |
- var deviceScaleFactor = window.devicePixelRatio; |
- canvas.width = deviceScaleFactor * cssCanvasWidth; |
- canvas.height = deviceScaleFactor * cssCanvasHeight; |
- context.scale(canvas.width / dipCanvasWidth, canvas.height / dipCanvasHeight); |
- context.font = "11px " + WebInspector.fontFamily(); |
- |
- const backgroundColor = "rgb(102, 102, 102)"; |
- const lightLineColor = "rgb(132, 132, 132)"; |
- const darkLineColor = "rgb(114, 114, 114)"; |
- const rulerColor = "rgb(125, 125, 125)"; |
- const textColor = "rgb(186, 186, 186)"; |
- const contentsSizeColor = "rgba(0, 0, 0, 0.3)"; |
- |
- var scale = (this._scale || 1) * this._viewport.pageScaleFactor; |
- var rulerScale = 0.5; |
- while (Math.abs(rulerScale * scale - 1) > Math.abs((rulerScale + 0.5) * scale - 1)) |
- rulerScale += 0.5; |
- |
- var gridStep = 50 * scale * rulerScale; |
- var gridSubStep = 10 * scale * rulerScale; |
- |
- var rulerSubStep = 5 * scale * rulerScale; |
- var rulerStepCount = 20; |
- |
- var rulerWidth = WebInspector.ResponsiveDesignView.RulerWidth; |
- |
- var dipGridWidth = dipCanvasWidth - rulerWidth; |
- var dipGridHeight = dipCanvasHeight - rulerHeight; |
- var dipScrollX = this._viewport.scrollX * scale; |
- var dipScrollY = this._viewport.scrollY * scale; |
- context.translate(rulerWidth, rulerHeight); |
- |
- context.fillStyle = backgroundColor; |
- context.fillRect(0, 0, dipGridWidth, dipGridHeight); |
- |
- context.translate(0.5, 0.5); |
- context.strokeStyle = rulerColor; |
- context.fillStyle = textColor; |
- context.lineWidth = 1; |
- |
- // Draw horizontal ruler. |
- context.save(); |
- |
- var minXIndex = Math.ceil(dipScrollX / rulerSubStep); |
- var maxXIndex = Math.floor((dipScrollX + dipGridWidth) / rulerSubStep); |
- if (minXIndex) { |
- context.beginPath(); |
- context.moveTo(0, -rulerHeight); |
- context.lineTo(0, 0); |
- context.stroke(); |
- } |
- |
- context.translate(-dipScrollX, 0); |
- for (var index = minXIndex; index <= maxXIndex; index++) { |
- var x = index * rulerSubStep; |
- var height = WebInspector.ResponsiveDesignView.RulerHeight * 0.25; |
- |
- if (!(index % (rulerStepCount / 4))) |
- height = WebInspector.ResponsiveDesignView.RulerHeight * 0.5; |
- |
- if (!(index % (rulerStepCount / 2))) |
- height = rulerHeight; |
- |
- if (!(index % rulerStepCount)) { |
- context.save(); |
- context.translate(x, 0); |
- context.fillText(Math.round(x / scale), 2, -rulerHeight + 10); |
- context.restore(); |
- height = rulerHeight; |
- } |
- |
- context.beginPath(); |
- context.moveTo(x, - height); |
- context.lineTo(x, 0); |
- context.stroke(); |
- } |
- context.restore(); |
- |
- // Draw vertical ruler. |
- context.save(); |
- context.translate(0, this._deviceInsets.top); |
- var minYIndex = Math.ceil(dipScrollY / rulerSubStep); |
- var maxYIndex = Math.floor((dipScrollY + dipGridHeight) / rulerSubStep); |
- context.translate(0, -dipScrollY); |
- for (var index = minYIndex; index <= maxYIndex; index++) { |
- var y = index * rulerSubStep; |
- var x = -rulerWidth * 0.25; |
- if (!(index % (rulerStepCount / 4))) |
- x = -rulerWidth * 0.5; |
- if (!(index % (rulerStepCount / 2))) |
- x = -rulerWidth * 0.75; |
- |
- if (!(index % rulerStepCount)) { |
- context.save(); |
- context.translate(0, y); |
- context.rotate(-Math.PI / 2); |
- context.fillText(Math.round(y / scale), 2, -rulerWidth + 10); |
- context.restore(); |
- x = -rulerWidth; |
- } |
- |
- context.beginPath(); |
- context.moveTo(x, y); |
- context.lineTo(0, y); |
- context.stroke(); |
- } |
- context.restore(); |
- |
- // Draw grid. |
- drawGrid(dipScrollX, dipScrollY + this._deviceInsets.top, darkLineColor, gridSubStep); |
- drawGrid(dipScrollX, dipScrollY + this._deviceInsets.top, lightLineColor, gridStep); |
- |
- /** |
- * @param {number} scrollX |
- * @param {number} scrollY |
- * @param {string} color |
- * @param {number} step |
- */ |
- function drawGrid(scrollX, scrollY, color, step) |
- { |
- context.strokeStyle = color; |
- var minX = Math.ceil(scrollX / step) * step; |
- var maxX = Math.floor((scrollX + dipGridWidth) / step) * step - minX; |
- var minY = Math.ceil(scrollY / step) * step; |
- var maxY = Math.floor((scrollY + dipGridHeight) / step) * step - minY; |
- |
- context.save(); |
- context.translate(minX - scrollX, 0); |
- for (var x = 0; x <= maxX; x += step) { |
- context.beginPath(); |
- context.moveTo(x, 0); |
- context.lineTo(x, dipGridHeight); |
- context.stroke(); |
- } |
- context.restore(); |
- |
- context.save(); |
- context.translate(0, minY - scrollY); |
- for (var y = 0; y <= maxY; y += step) { |
- context.beginPath(); |
- context.moveTo(0, y); |
- context.lineTo(dipGridWidth, y); |
- context.stroke(); |
- } |
- context.restore(); |
- } |
- |
- context.translate(-0.5, -0.5); |
- |
- // Draw contents size. |
- var pageScaleAvailable = WebInspector.overridesSupport.settings.emulateMobile.get() || WebInspector.overridesSupport.settings.emulateTouch.get(); |
- if (this._drawContentsSize && pageScaleAvailable) { |
- context.save(); |
- context.fillStyle = contentsSizeColor; |
- var visibleContentsWidth = Math.max(0, Math.min(dipGridWidth, this._viewport.contentsWidth * scale - dipScrollX)); |
- var visibleContentsHeight = Math.max(0, Math.min(dipGridHeight, this._viewport.contentsHeight * scale - dipScrollY + this._deviceInsets.top)); |
- context.translate(0, this._deviceInsets.top); |
- context.fillRect(0, Math.max(-this._deviceInsets.top, -dipScrollY), visibleContentsWidth, visibleContentsHeight); |
- context.restore(); |
- } |
- }, |
- |
- /** |
- * @return {number} |
- */ |
- _rulerTotalHeightDIP: function() |
- { |
- var mediaInspectorHeight = this._mediaInspector.isShowing() ? this._mediaInspector.element.offsetHeight : 0; |
- if (!mediaInspectorHeight) |
- return WebInspector.ResponsiveDesignView.RulerHeight; |
- return WebInspector.ResponsiveDesignView.RulerTopHeight + WebInspector.ResponsiveDesignView.RulerBottomHeight + mediaInspectorHeight * WebInspector.zoomManager.zoomFactor(); |
- }, |
- |
- _updateUI: function() |
- { |
- if (!this._enabled || !this.isShowing()) |
- return; |
- |
- var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
- var rect = this._canvas.parentElement.getBoundingClientRect(); |
- var availableDip = this._availableDipSize().size; |
- var cssCanvasWidth = rect.width; |
- var cssCanvasHeight = rect.height; |
- var mediaInspectorHeight = this._mediaInspector.isShowing() ? this._mediaInspector.element.offsetHeight : 0; |
- var rulerTotalHeight = this._rulerTotalHeightDIP(); |
- |
- this._mediaInspector.setAxisTransform(this._viewport.scrollX, this._scale * this._viewport.pageScaleFactor); |
- |
- if (this._cachedZoomFactor !== zoomFactor || this._cachedMediaInspectorHeight !== mediaInspectorHeight) { |
- var cssRulerWidth = WebInspector.ResponsiveDesignView.RulerWidth / zoomFactor + "px"; |
- var cssRulerHeight = (mediaInspectorHeight ? WebInspector.ResponsiveDesignView.RulerTopHeight : WebInspector.ResponsiveDesignView.RulerHeight) / zoomFactor + "px"; |
- var cssCanvasOffset = rulerTotalHeight / zoomFactor + "px"; |
- this._slidersContainer.style.left = cssRulerWidth; |
- this._slidersContainer.style.top = cssCanvasOffset; |
- this._warningInfobar.element.style.height = cssCanvasOffset; |
- this._pageScaleContainer.style.top = cssCanvasOffset; |
- this._mediaInspectorContainer.style.left = cssRulerWidth; |
- this._mediaInspectorContainer.style.marginTop = cssRulerHeight; |
- this._warningInfobar.element.style.left = cssRulerWidth; |
- } |
- |
- var cssWidth = (this._dipWidth ? this._dipWidth : availableDip.width) / zoomFactor; |
- var cssHeight = (this._dipHeight ? this._dipHeight : availableDip.height) / zoomFactor; |
- var cssPageWidth = (this._pageWidth ? this._pageWidth : availableDip.width) / zoomFactor; |
- var cssPageHeight = (this._pageHeight ? this._pageHeight : availableDip.height) / zoomFactor; |
- var deviceInsets = new Insets(this._deviceInsets.left * this._scale / zoomFactor, this._deviceInsets.top * this._scale / zoomFactor, this._deviceInsets.right * this._scale / zoomFactor, this._deviceInsets.bottom * this._scale / zoomFactor); |
- cssWidth += deviceInsets.left + deviceInsets.right; |
- cssHeight += deviceInsets.top + deviceInsets.bottom; |
- var insetsChanged = !deviceInsets.isEqual(this._cachedDeviceInsets); |
- if (this._cachedCssWidth !== cssWidth || this._cachedCssHeight !== cssHeight || insetsChanged) { |
- this._slidersContainer.style.width = cssWidth + "px"; |
- this._slidersContainer.style.height = cssHeight + "px"; |
- this._pageContainer.style.paddingLeft = deviceInsets.left + "px"; |
- this._pageContainer.style.paddingTop = deviceInsets.top + "px"; |
- this._pageContainer.style.paddingRight = deviceInsets.right + "px"; |
- this._pageContainer.style.paddingBottom = deviceInsets.bottom + "px"; |
- this._inspectedPagePlaceholder.onResize(); |
- } |
- |
- if (this._cachedCssPageWidth !== cssPageWidth || this._cachedCssPageHeight !== cssPageHeight) { |
- this._pageContainerImage.style.width = cssPageWidth + "px"; |
- this._pageContainerImage.style.height = cssPageHeight + "px"; |
- } |
- |
- this._loadPageContainerImage(); |
- |
- var pageScaleVisible = cssWidth + this._pageScaleContainerWidth + WebInspector.ResponsiveDesignView.RulerWidth / zoomFactor <= rect.width; |
- this._pageScaleContainer.classList.toggle("hidden", !pageScaleVisible); |
- |
- var viewportChanged = !this._cachedViewport |
- || this._cachedViewport.scrollX !== this._viewport.scrollX || this._cachedViewport.scrollY !== this._viewport.scrollY |
- || this._cachedViewport.contentsWidth !== this._viewport.contentsWidth || this._cachedViewport.contentsHeight !== this._viewport.contentsHeight |
- || this._cachedViewport.pageScaleFactor !== this._viewport.pageScaleFactor |
- || this._cachedViewport.minimumPageScaleFactor !== this._viewport.minimumPageScaleFactor |
- || this._cachedViewport.maximumPageScaleFactor !== this._viewport.maximumPageScaleFactor; |
- |
- var canvasInvalidated = viewportChanged || this._drawContentsSize !== this._cachedDrawContentsSize || this._cachedScale !== this._scale || |
- this._cachedCssCanvasWidth !== cssCanvasWidth || this._cachedCssCanvasHeight !== cssCanvasHeight || this._cachedZoomFactor !== zoomFactor || |
- this._cachedMediaInspectorHeight !== mediaInspectorHeight || insetsChanged; |
- |
- if (canvasInvalidated) |
- this._drawCanvas(cssCanvasWidth, cssCanvasHeight, rulerTotalHeight); |
- |
- if (viewportChanged) { |
- this._pageScaleLabel.textContent = WebInspector.UIString("%.1f", this._viewport.pageScaleFactor); |
- this._decreasePageScaleButton.title = WebInspector.UIString("Scale down (minimum %.1f)", this._viewport.minimumPageScaleFactor); |
- this._decreasePageScaleButton.disabled = this._viewport.pageScaleFactor <= this._viewport.minimumPageScaleFactor; |
- this._increasePageScaleButton.title = WebInspector.UIString("Scale up (maximum %.1f)", this._viewport.maximumPageScaleFactor); |
- this._increasePageScaleButton.disabled = this._viewport.pageScaleFactor >= this._viewport.maximumPageScaleFactor; |
- } |
- |
- this._cachedScale = this._scale; |
- this._cachedCssCanvasWidth = cssCanvasWidth; |
- this._cachedCssCanvasHeight = cssCanvasHeight; |
- this._cachedCssHeight = cssHeight; |
- this._cachedCssWidth = cssWidth; |
- this._cachedCssPageWidth = cssPageWidth; |
- this._cachedCssPageHeight = cssPageHeight; |
- this._cachedDeviceInsets = deviceInsets; |
- this._cachedZoomFactor = zoomFactor; |
- this._cachedViewport = this._viewport; |
- this._cachedDrawContentsSize = this._drawContentsSize; |
- this._cachedMediaInspectorHeight = mediaInspectorHeight; |
- }, |
- |
- _loadPageContainerImage: function() |
- { |
- if (this._pageContainerImage.getAttribute("srcset") === this._pageContainerSrcset) |
- return; |
- this._pageContainerImage.setAttribute("srcset", this._pageContainerSrcset); |
- if (!this._pageContainerSrcset) |
- this._pageContainerImage.classList.toggle("hidden", true); |
- }, |
- |
- /** |
- * @param {boolean} success |
- */ |
- _onPageContainerImageLoaded: function(success) |
- { |
- this._pageContainerImage.classList.toggle("hidden", !success); |
- }, |
- |
- onResize: function() |
- { |
- if (!this._enabled || this._ignoreResize) |
- return; |
- var oldSize = this._availableSize; |
- |
- this._pageScaleContainer.classList.remove("hidden"); |
- this._pageScaleContainerWidth = this._pageScaleContainer.offsetWidth; |
- |
- delete this._availableSize; |
- var newSize = this._availableDipSize(); |
- if (!oldSize || !newSize.size.isEqual(oldSize.size) || !newSize.insets.isEqual(oldSize.insets)) |
- this.dispatchEventToListeners(WebInspector.OverridesSupport.PageResizer.Events.AvailableSizeChanged, newSize); |
- this._updateUI(); |
- this._inspectedPagePlaceholder.onResize(); |
- }, |
- |
- _onZoomChanged: function() |
- { |
- this._updateUI(); |
- }, |
- |
- _createToolbar: function() |
- { |
- this._toolbarElement = this._responsiveDesignContainer.element.createChild("div", "responsive-design-toolbar"); |
- this._createButtonsSection(); |
- this._createDeviceSection(); |
- this._toolbarElement.createChild("div", "responsive-design-separator"); |
- this._createNetworkSection(); |
- this._toolbarElement.createChild("div", "responsive-design-separator"); |
- |
- var moreButtonContainer = this._toolbarElement.createChild("div", "responsive-design-more-button-container"); |
- var moreButton = moreButtonContainer.createChild("button", "responsive-design-more-button"); |
- moreButton.title = WebInspector.UIString("More overrides"); |
- moreButton.addEventListener("click", this._showEmulationInDrawer.bind(this), false); |
- moreButton.textContent = "\u2026"; |
- }, |
- |
- _createButtonsSection: function() |
- { |
- var buttonsToolbar = new WebInspector.Toolbar("", this._toolbarElement); |
- buttonsToolbar.makeVertical(); |
- buttonsToolbar.setColor("white"); |
- buttonsToolbar.setToggledColor("rgb(105, 194, 236)"); |
- buttonsToolbar.element.classList.add("responsive-design-section", "responsive-design-section-buttons"); |
- |
- var resetButton = new WebInspector.ToolbarButton(WebInspector.UIString("Reset all overrides"), "clear-toolbar-item"); |
- buttonsToolbar.appendToolbarItem(resetButton); |
- resetButton.addEventListener("click", WebInspector.overridesSupport.reset, WebInspector.overridesSupport); |
- |
- // Media Query Inspector. |
- this._toggleMediaInspectorButton = new WebInspector.ToolbarToggle(WebInspector.UIString("Media queries not found"), "waterfall-toolbar-item"); |
- this._toggleMediaInspectorButton.setToggled(this._showMediaQueryInspectorSetting.get()); |
- this._toggleMediaInspectorButton.setEnabled(false); |
- this._toggleMediaInspectorButton.addEventListener("click", this._onToggleMediaInspectorButtonClick, this); |
- this._showMediaQueryInspectorSetting.addChangeListener(this._updateMediaQueryInspector, this); |
- buttonsToolbar.appendToolbarItem(this._toggleMediaInspectorButton); |
- }, |
- |
- _createDeviceSection: function() |
- { |
- var deviceSection = this._toolbarElement.createChild("div", "responsive-design-section responsive-design-section-device"); |
- deviceSection.createChild("div", "responsive-design-section-decorator"); |
- |
- // Device. |
- var deviceElement = deviceSection.createChild("div", "responsive-design-suite responsive-design-suite-top").createChild("div"); |
- |
- var fieldsetElement = deviceElement.createChild("fieldset"); |
- fieldsetElement.createChild("label").textContent = WebInspector.UIString("Device"); |
- var deviceSelect = new WebInspector.DeviceSelect(createElementWithClass("button", "responsive-design-icon responsive-design-icon-swap"), this._deviceModeSelected.bind(this)); |
- fieldsetElement.appendChild(deviceSelect.element); |
- deviceSelect.element.classList.add("responsive-design-device-select"); |
- |
- var detailsElement = deviceSection.createChild("div", "responsive-design-suite"); |
- |
- // Dimensions. |
- var screenElement = detailsElement.createChild("div", ""); |
- fieldsetElement = screenElement.createChild("fieldset"); |
- |
- var emulateResolutionCheckbox = WebInspector.SettingsUI.createSettingCheckbox("", WebInspector.overridesSupport.settings.emulateResolution, true, WebInspector.UIString("Emulate screen resolution")); |
- themeCheckbox(emulateResolutionCheckbox); |
- fieldsetElement.appendChild(emulateResolutionCheckbox); |
- |
- fieldsetElement.createChild("label").textContent = WebInspector.UIString("Screen"); |
- var resolutionFieldset = WebInspector.SettingsUI.createSettingFieldset(WebInspector.overridesSupport.settings.emulateResolution); |
- fieldsetElement.appendChild(resolutionFieldset); |
- |
- resolutionFieldset.appendChild(WebInspector.SettingsUI.createSettingInputField("", WebInspector.overridesSupport.settings.deviceWidth, true, 4, "3em", WebInspector.OverridesSupport.deviceSizeValidator, true, true, WebInspector.UIString("\u2013"))); |
- resolutionFieldset.createTextChild("\u00D7"); |
- resolutionFieldset.appendChild(WebInspector.SettingsUI.createSettingInputField("", WebInspector.overridesSupport.settings.deviceHeight, true, 4, "3em", WebInspector.OverridesSupport.deviceSizeValidator, true, true, WebInspector.UIString("\u2013"))); |
- |
- // Device pixel ratio. |
- detailsElement.createChild("div", "responsive-design-suite-separator"); |
- |
- var dprElement = detailsElement.createChild("div", ""); |
- var resolutionFieldset2 = WebInspector.SettingsUI.createSettingFieldset(WebInspector.overridesSupport.settings.emulateResolution); |
- dprElement.appendChild(resolutionFieldset2); |
- var dprButton = resolutionFieldset2.createChild("div", "responsive-design-icon responsive-design-icon-dpr"); |
- dprButton.title = WebInspector.UIString("Device pixel ratio"); |
- resolutionFieldset2.appendChild(WebInspector.SettingsUI.createSettingInputField("", WebInspector.overridesSupport.settings.deviceScaleFactor, true, 4, "1.9em", WebInspector.OverridesSupport.deviceScaleFactorValidator, true, true, WebInspector.UIString("\u2013"))); |
- |
- // Fit to window. |
- detailsElement.createChild("div", "responsive-design-suite-separator"); |
- var fitToWindowElement = detailsElement.createChild("div", ""); |
- fieldsetElement = fitToWindowElement.createChild("fieldset"); |
- var fitCheckbox = WebInspector.SettingsUI.createSettingCheckbox(WebInspector.UIString("Zoom to fit"), WebInspector.overridesSupport.settings.deviceFitWindow, true, WebInspector.UIString("Zoom to fit available space")) |
- fieldsetElement.appendChild(fitCheckbox); |
- themeCheckbox(fitCheckbox); |
- |
- /** |
- * @param {!Element} checkbox |
- */ |
- function themeCheckbox(checkbox) |
- { |
- checkbox.checkColor = "rgb(255, 156, 0)"; |
- checkbox.backgroundColor = "rgb(102, 102, 102)"; |
- checkbox.borderColor = "rgb(45, 45, 45)"; |
- } |
- }, |
- |
- _createNetworkSection: function() |
- { |
- var networkSection = this._toolbarElement.createChild("div", "responsive-design-section responsive-design-section-network"); |
- networkSection.createChild("div", "responsive-design-section-decorator"); |
- |
- var networkLabel = networkSection.createChild("div", "responsive-design-suite responsive-design-suite-top").createChild("div").createChild("label"); |
- networkLabel.textContent = WebInspector.UIString("Network"); |
- |
- var showDrawerButton = networkSection.createChild("div", "responsive-design-suite").createChild("a"); |
- showDrawerButton.textContent = WebInspector.UIString("Configure throttling"); |
- var action = WebInspector.actionRegistry.action("network.show-config"); |
- showDrawerButton.addEventListener("click", action.execute.bind(action)); |
- }, |
- |
- _onToggleMediaInspectorButtonClick: function() |
- { |
- this._showMediaQueryInspectorSetting.set(!this._toggleMediaInspectorButton.toggled()); |
- }, |
- |
- _updateMediaQueryInspector: function() |
- { |
- this._toggleMediaInspectorButton.setToggled(this._showMediaQueryInspectorSetting.get()); |
- if (this._mediaInspector.isShowing() === this._showMediaQueryInspectorSetting.get()) |
- return; |
- if (this._mediaInspector.isShowing()) |
- this._mediaInspector.detach(); |
- else |
- this._mediaInspector.show(this._mediaInspectorContainer); |
- this.onResize(); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _updateMediaQueryInspectorButton: function(event) |
- { |
- var count = /** @type {number} */ (event.data); |
- this._toggleMediaInspectorButton.setEnabled(!!count); |
- this._toggleMediaInspectorButton.setTitle(!count ? WebInspector.UIString("Media queries not found") : |
- WebInspector.UIString((count === 1 ? "%d media query found" : "%d media queries found"), count)); |
- }, |
- |
- _overridesWarningUpdated: function() |
- { |
- var message = WebInspector.overridesSupport.warningMessage(); |
- if (!message) { |
- if (this._warningInfobar) { |
- this._warningInfobar.dispose(); |
- delete this._warningInfobar; |
- } |
- } |
- |
- if (!this._warningInfobar) { |
- this._warningInfobar = WebInspector.Infobar.create(WebInspector.Infobar.Type.Warning, message, WebInspector.moduleSetting("disableOverridesWarning")); |
- if (this._warningInfobar) { |
- this._warningInfobar.element.classList.add("responsive-design-warning"); |
- this._warningInfobar.setCloseCallback(WebInspector.overridesSupport.clearWarningMessage.bind(WebInspector.overridesSupport)); |
- this._canvasContainer.element.appendChild(this._warningInfobar.element); |
- } |
- } else { |
- this._warningInfobar.setText(message); |
- } |
- }, |
- |
- _showEmulationInDrawer: function() |
- { |
- WebInspector.Revealer.reveal(WebInspector.overridesSupport); |
- }, |
- |
- /** |
- * @param {?WebInspector.EmulatedDevice} device |
- * @param {?WebInspector.EmulatedDevice.Mode} mode |
- */ |
- _deviceModeSelected: function(device, mode) |
- { |
- this._pageContainerSrcset = ""; |
- if (device && mode) { |
- var orientation = device.orientationByName(mode.orientation); |
- this._deviceInsets = mode.insets; |
- WebInspector.overridesSupport.settings.screenOrientationOverride.set(mode.orientation == WebInspector.EmulatedDevice.Horizontal ? "landscapePrimary" : "portraitPrimary"); |
- this._pageContainerSrcset = device.modeImage(mode); |
- } else { |
- this._deviceInsets = new Insets(0, 0, 0, 0); |
- WebInspector.overridesSupport.settings.screenOrientationOverride.set(""); |
- } |
- this.dispatchEventToListeners(WebInspector.OverridesSupport.PageResizer.Events.InsetsChanged, this._deviceInsets); |
- }, |
- |
- /** |
- * @param {!EmulationAgent.Viewport=} viewport |
- */ |
- _viewportChanged: function(viewport) |
- { |
- if (viewport) { |
- this._viewport = viewport; |
- this._viewport.minimumPageScaleFactor = Math.max(0.1, this._viewport.minimumPageScaleFactor); |
- this._viewport.minimumPageScaleFactor = Math.min(this._viewport.minimumPageScaleFactor, this._viewport.pageScaleFactor); |
- this._viewport.maximumPageScaleFactor = Math.min(10, this._viewport.maximumPageScaleFactor); |
- this._viewport.maximumPageScaleFactor = Math.max(this._viewport.maximumPageScaleFactor, this._viewport.pageScaleFactor); |
- this._viewportChangedThrottler.schedule(this._updateUIThrottled.bind(this)); |
- } |
- }, |
- |
- /** |
- * @return {!Promise.<?>} |
- */ |
- _updateUIThrottled: function() |
- { |
- this._updateUI(); |
- return Promise.resolve(); |
- }, |
- |
- /** |
- * @param {boolean} increase |
- * @param {!Event} event |
- */ |
- _pageScaleButtonClicked: function(increase, event) |
- { |
- this._pageScaleFactorThrottler.schedule(updatePageScaleFactor.bind(this)); |
- |
- /** |
- * @return {!Promise.<?>} |
- * @this {WebInspector.ResponsiveDesignView} |
- */ |
- function updatePageScaleFactor() |
- { |
- if (this._target && this._viewport) { |
- var value = this._viewport.pageScaleFactor; |
- value = increase ? value * 1.1 : value / 1.1; |
- value = Math.min(this._viewport.maximumPageScaleFactor, value); |
- value = Math.max(this._viewport.minimumPageScaleFactor, value); |
- this._target.emulationAgent().setPageScaleFactor(value); |
- } |
- return Promise.resolve(); |
- } |
- }, |
- |
- _resetPageScale: function() |
- { |
- this._pageScaleFactorThrottler.schedule(updatePageScaleFactor.bind(this)); |
- |
- /** |
- * @return {!Promise.<?>} |
- * @this {WebInspector.ResponsiveDesignView} |
- */ |
- function updatePageScaleFactor() |
- { |
- if (this._target && this._viewport && this._viewport.minimumPageScaleFactor <= 1 && this._viewport.maximumPageScaleFactor >= 1) |
- this._target.emulationAgent().setPageScaleFactor(1); |
- return Promise.resolve(); |
- } |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
-}; |
- |
- |
-/** |
- * @constructor |
- * @implements {EmulationAgent.Dispatcher} |
- * @param {!WebInspector.ResponsiveDesignView} responsiveDesignView |
- */ |
-WebInspector.EmulationDispatcher = function(responsiveDesignView) |
-{ |
- this._responsiveDesignView = responsiveDesignView; |
-} |
- |
-WebInspector.EmulationDispatcher.prototype = { |
- /** |
- * @override |
- * @param {!EmulationAgent.Viewport=} viewport |
- */ |
- viewportChanged: function(viewport) |
- { |
- this._responsiveDesignView._viewportChanged(viewport); |
- } |
-} |