| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 /** | 4 /** |
| 5 * @unrestricted | 5 * @unrestricted |
| 6 */ | 6 */ |
| 7 WebInspector.DeviceModeView = class extends WebInspector.VBox { | 7 Emulation.DeviceModeView = class extends UI.VBox { |
| 8 constructor() { | 8 constructor() { |
| 9 super(true); | 9 super(true); |
| 10 this.setMinimumSize(150, 150); | 10 this.setMinimumSize(150, 150); |
| 11 this.element.classList.add('device-mode-view'); | 11 this.element.classList.add('device-mode-view'); |
| 12 this.registerRequiredCSS('emulation/deviceModeView.css'); | 12 this.registerRequiredCSS('emulation/deviceModeView.css'); |
| 13 WebInspector.Tooltip.addNativeOverrideContainer(this.contentElement); | 13 UI.Tooltip.addNativeOverrideContainer(this.contentElement); |
| 14 | 14 |
| 15 this._model = new WebInspector.DeviceModeModel(this._updateUI.bind(this)); | 15 this._model = new Emulation.DeviceModeModel(this._updateUI.bind(this)); |
| 16 this._mediaInspector = new WebInspector.MediaQueryInspector( | 16 this._mediaInspector = new Emulation.MediaQueryInspector( |
| 17 () => this._model.appliedDeviceSize().width, this._model.setWidth.bind(t
his._model)); | 17 () => this._model.appliedDeviceSize().width, this._model.setWidth.bind(t
his._model)); |
| 18 this._showMediaInspectorSetting = WebInspector.settings.moduleSetting('showM
ediaQueryInspector'); | 18 this._showMediaInspectorSetting = Common.settings.moduleSetting('showMediaQu
eryInspector'); |
| 19 this._showMediaInspectorSetting.addChangeListener(this._updateUI, this); | 19 this._showMediaInspectorSetting.addChangeListener(this._updateUI, this); |
| 20 this._showRulersSetting = WebInspector.settings.moduleSetting('emulation.sho
wRulers'); | 20 this._showRulersSetting = Common.settings.moduleSetting('emulation.showRuler
s'); |
| 21 this._showRulersSetting.addChangeListener(this._updateUI, this); | 21 this._showRulersSetting.addChangeListener(this._updateUI, this); |
| 22 | 22 |
| 23 this._topRuler = new WebInspector.DeviceModeView.Ruler(true, this._model.set
WidthAndScaleToFit.bind(this._model)); | 23 this._topRuler = new Emulation.DeviceModeView.Ruler(true, this._model.setWid
thAndScaleToFit.bind(this._model)); |
| 24 this._topRuler.element.classList.add('device-mode-ruler-top'); | 24 this._topRuler.element.classList.add('device-mode-ruler-top'); |
| 25 this._leftRuler = | 25 this._leftRuler = |
| 26 new WebInspector.DeviceModeView.Ruler(false, this._model.setHeightAndSca
leToFit.bind(this._model)); | 26 new Emulation.DeviceModeView.Ruler(false, this._model.setHeightAndScaleT
oFit.bind(this._model)); |
| 27 this._leftRuler.element.classList.add('device-mode-ruler-left'); | 27 this._leftRuler.element.classList.add('device-mode-ruler-left'); |
| 28 this._createUI(); | 28 this._createUI(); |
| 29 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.Zo
omChanged, this._zoomChanged, this); | 29 UI.zoomManager.addEventListener(UI.ZoomManager.Events.ZoomChanged, this._zoo
mChanged, this); |
| 30 } | 30 } |
| 31 | 31 |
| 32 _createUI() { | 32 _createUI() { |
| 33 this._toolbar = | 33 this._toolbar = |
| 34 new WebInspector.DeviceModeToolbar(this._model, this._showMediaInspector
Setting, this._showRulersSetting); | 34 new Emulation.DeviceModeToolbar(this._model, this._showMediaInspectorSet
ting, this._showRulersSetting); |
| 35 this.contentElement.appendChild(this._toolbar.element()); | 35 this.contentElement.appendChild(this._toolbar.element()); |
| 36 | 36 |
| 37 this._contentClip = this.contentElement.createChild('div', 'device-mode-cont
ent-clip vbox'); | 37 this._contentClip = this.contentElement.createChild('div', 'device-mode-cont
ent-clip vbox'); |
| 38 this._responsivePresetsContainer = this._contentClip.createChild('div', 'dev
ice-mode-presets-container'); | 38 this._responsivePresetsContainer = this._contentClip.createChild('div', 'dev
ice-mode-presets-container'); |
| 39 this._populatePresetsContainer(); | 39 this._populatePresetsContainer(); |
| 40 this._mediaInspectorContainer = this._contentClip.createChild('div', 'device
-mode-media-container'); | 40 this._mediaInspectorContainer = this._contentClip.createChild('div', 'device
-mode-media-container'); |
| 41 this._contentArea = this._contentClip.createChild('div', 'device-mode-conten
t-area'); | 41 this._contentArea = this._contentClip.createChild('div', 'device-mode-conten
t-area'); |
| 42 | 42 |
| 43 this._outlineImage = this._contentArea.createChild('img', 'device-mode-outli
ne-image hidden fill'); | 43 this._outlineImage = this._contentArea.createChild('img', 'device-mode-outli
ne-image hidden fill'); |
| 44 this._outlineImage.addEventListener('load', this._onImageLoaded.bind(this, t
his._outlineImage, true), false); | 44 this._outlineImage.addEventListener('load', this._onImageLoaded.bind(this, t
his._outlineImage, true), false); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 64 this._createResizer(this._rightResizerElement, 2, 0); | 64 this._createResizer(this._rightResizerElement, 2, 0); |
| 65 | 65 |
| 66 this._leftResizerElement = this._screenArea.createChild('div', 'device-mode-
resizer device-mode-left-resizer'); | 66 this._leftResizerElement = this._screenArea.createChild('div', 'device-mode-
resizer device-mode-left-resizer'); |
| 67 this._leftResizerElement.createChild('div', ''); | 67 this._leftResizerElement.createChild('div', ''); |
| 68 this._createResizer(this._leftResizerElement, -2, 0); | 68 this._createResizer(this._leftResizerElement, -2, 0); |
| 69 | 69 |
| 70 this._bottomResizerElement = this._screenArea.createChild('div', 'device-mod
e-resizer device-mode-bottom-resizer'); | 70 this._bottomResizerElement = this._screenArea.createChild('div', 'device-mod
e-resizer device-mode-bottom-resizer'); |
| 71 this._bottomResizerElement.createChild('div', ''); | 71 this._bottomResizerElement.createChild('div', ''); |
| 72 this._createResizer(this._bottomResizerElement, 0, 1); | 72 this._createResizer(this._bottomResizerElement, 0, 1); |
| 73 this._bottomResizerElement.addEventListener('dblclick', this._model.setHeigh
t.bind(this._model, 0), false); | 73 this._bottomResizerElement.addEventListener('dblclick', this._model.setHeigh
t.bind(this._model, 0), false); |
| 74 this._bottomResizerElement.title = WebInspector.UIString('Double-click for f
ull height'); | 74 this._bottomResizerElement.title = Common.UIString('Double-click for full he
ight'); |
| 75 | 75 |
| 76 this._pageArea = this._screenArea.createChild('div', 'device-mode-page-area'
); | 76 this._pageArea = this._screenArea.createChild('div', 'device-mode-page-area'
); |
| 77 this._pageArea.createChild('content'); | 77 this._pageArea.createChild('content'); |
| 78 } | 78 } |
| 79 | 79 |
| 80 _populatePresetsContainer() { | 80 _populatePresetsContainer() { |
| 81 var sizes = [320, 375, 425, 768, 1024, 1440, 2560]; | 81 var sizes = [320, 375, 425, 768, 1024, 1440, 2560]; |
| 82 var titles = [ | 82 var titles = [ |
| 83 WebInspector.UIString('Mobile S'), WebInspector.UIString('Mobile M'), WebI
nspector.UIString('Mobile L'), | 83 Common.UIString('Mobile S'), Common.UIString('Mobile M'), Common.UIString(
'Mobile L'), |
| 84 WebInspector.UIString('Tablet'), WebInspector.UIString('Laptop'), WebInspe
ctor.UIString('Laptop L'), | 84 Common.UIString('Tablet'), Common.UIString('Laptop'), Common.UIString('Lap
top L'), |
| 85 WebInspector.UIString('4K') | 85 Common.UIString('4K') |
| 86 ]; | 86 ]; |
| 87 this._presetBlocks = []; | 87 this._presetBlocks = []; |
| 88 var inner = this._responsivePresetsContainer.createChild('div', 'device-mode
-presets-container-inner'); | 88 var inner = this._responsivePresetsContainer.createChild('div', 'device-mode
-presets-container-inner'); |
| 89 for (var i = sizes.length - 1; i >= 0; --i) { | 89 for (var i = sizes.length - 1; i >= 0; --i) { |
| 90 var outer = inner.createChild('div', 'fill device-mode-preset-bar-outer'); | 90 var outer = inner.createChild('div', 'fill device-mode-preset-bar-outer'); |
| 91 var block = outer.createChild('div', 'device-mode-preset-bar'); | 91 var block = outer.createChild('div', 'device-mode-preset-bar'); |
| 92 block.createChild('span').textContent = titles[i] + ' \u2013 ' + sizes[i]
+ 'px'; | 92 block.createChild('span').textContent = titles[i] + ' \u2013 ' + sizes[i]
+ 'px'; |
| 93 block.addEventListener('click', applySize.bind(this, sizes[i]), false); | 93 block.addEventListener('click', applySize.bind(this, sizes[i]), false); |
| 94 block.__width = sizes[i]; | 94 block.__width = sizes[i]; |
| 95 this._presetBlocks.push(block); | 95 this._presetBlocks.push(block); |
| 96 } | 96 } |
| 97 | 97 |
| 98 /** | 98 /** |
| 99 * @param {number} width | 99 * @param {number} width |
| 100 * @param {!Event} e | 100 * @param {!Event} e |
| 101 * @this {WebInspector.DeviceModeView} | 101 * @this {Emulation.DeviceModeView} |
| 102 */ | 102 */ |
| 103 function applySize(width, e) { | 103 function applySize(width, e) { |
| 104 this._model.emulate(WebInspector.DeviceModeModel.Type.Responsive, null, nu
ll); | 104 this._model.emulate(Emulation.DeviceModeModel.Type.Responsive, null, null)
; |
| 105 this._model.setSizeAndScaleToFit(width, 0); | 105 this._model.setSizeAndScaleToFit(width, 0); |
| 106 e.consume(); | 106 e.consume(); |
| 107 } | 107 } |
| 108 } | 108 } |
| 109 | 109 |
| 110 /** | 110 /** |
| 111 * @param {!Element} element | 111 * @param {!Element} element |
| 112 * @param {number} widthFactor | 112 * @param {number} widthFactor |
| 113 * @param {number} heightFactor | 113 * @param {number} heightFactor |
| 114 * @return {!WebInspector.ResizerWidget} | 114 * @return {!UI.ResizerWidget} |
| 115 */ | 115 */ |
| 116 _createResizer(element, widthFactor, heightFactor) { | 116 _createResizer(element, widthFactor, heightFactor) { |
| 117 var resizer = new WebInspector.ResizerWidget(); | 117 var resizer = new UI.ResizerWidget(); |
| 118 resizer.addElement(element); | 118 resizer.addElement(element); |
| 119 var cursor = widthFactor ? 'ew-resize' : 'ns-resize'; | 119 var cursor = widthFactor ? 'ew-resize' : 'ns-resize'; |
| 120 if (widthFactor * heightFactor > 0) | 120 if (widthFactor * heightFactor > 0) |
| 121 cursor = 'nwse-resize'; | 121 cursor = 'nwse-resize'; |
| 122 if (widthFactor * heightFactor < 0) | 122 if (widthFactor * heightFactor < 0) |
| 123 cursor = 'nesw-resize'; | 123 cursor = 'nesw-resize'; |
| 124 resizer.setCursor(cursor); | 124 resizer.setCursor(cursor); |
| 125 resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeStart, this
._onResizeStart, this); | 125 resizer.addEventListener(UI.ResizerWidget.Events.ResizeStart, this._onResize
Start, this); |
| 126 resizer.addEventListener( | 126 resizer.addEventListener( |
| 127 WebInspector.ResizerWidget.Events.ResizeUpdate, this._onResizeUpdate.bin
d(this, widthFactor, heightFactor)); | 127 UI.ResizerWidget.Events.ResizeUpdate, this._onResizeUpdate.bind(this, wi
dthFactor, heightFactor)); |
| 128 resizer.addEventListener(WebInspector.ResizerWidget.Events.ResizeEnd, this._
onResizeEnd, this); | 128 resizer.addEventListener(UI.ResizerWidget.Events.ResizeEnd, this._onResizeEn
d, this); |
| 129 return resizer; | 129 return resizer; |
| 130 } | 130 } |
| 131 | 131 |
| 132 /** | 132 /** |
| 133 * @param {!WebInspector.Event} event | 133 * @param {!Common.Event} event |
| 134 */ | 134 */ |
| 135 _onResizeStart(event) { | 135 _onResizeStart(event) { |
| 136 this._slowPositionStart = null; | 136 this._slowPositionStart = null; |
| 137 /** @type {!Size} */ | 137 /** @type {!Size} */ |
| 138 this._resizeStart = this._model.screenRect().size(); | 138 this._resizeStart = this._model.screenRect().size(); |
| 139 } | 139 } |
| 140 | 140 |
| 141 /** | 141 /** |
| 142 * @param {number} widthFactor | 142 * @param {number} widthFactor |
| 143 * @param {number} heightFactor | 143 * @param {number} heightFactor |
| 144 * @param {!WebInspector.Event} event | 144 * @param {!Common.Event} event |
| 145 */ | 145 */ |
| 146 _onResizeUpdate(widthFactor, heightFactor, event) { | 146 _onResizeUpdate(widthFactor, heightFactor, event) { |
| 147 if (event.data.shiftKey !== !!this._slowPositionStart) | 147 if (event.data.shiftKey !== !!this._slowPositionStart) |
| 148 this._slowPositionStart = event.data.shiftKey ? {x: event.data.currentX, y
: event.data.currentY} : null; | 148 this._slowPositionStart = event.data.shiftKey ? {x: event.data.currentX, y
: event.data.currentY} : null; |
| 149 | 149 |
| 150 var cssOffsetX = event.data.currentX - event.data.startX; | 150 var cssOffsetX = event.data.currentX - event.data.startX; |
| 151 var cssOffsetY = event.data.currentY - event.data.startY; | 151 var cssOffsetY = event.data.currentY - event.data.startY; |
| 152 if (this._slowPositionStart) { | 152 if (this._slowPositionStart) { |
| 153 cssOffsetX = | 153 cssOffsetX = |
| 154 (event.data.currentX - this._slowPositionStart.x) / 10 + this._slowPos
itionStart.x - event.data.startX; | 154 (event.data.currentX - this._slowPositionStart.x) / 10 + this._slowPos
itionStart.x - event.data.startX; |
| 155 cssOffsetY = | 155 cssOffsetY = |
| 156 (event.data.currentY - this._slowPositionStart.y) / 10 + this._slowPos
itionStart.y - event.data.startY; | 156 (event.data.currentY - this._slowPositionStart.y) / 10 + this._slowPos
itionStart.y - event.data.startY; |
| 157 } | 157 } |
| 158 | 158 |
| 159 if (widthFactor) { | 159 if (widthFactor) { |
| 160 var dipOffsetX = cssOffsetX * WebInspector.zoomManager.zoomFactor(); | 160 var dipOffsetX = cssOffsetX * UI.zoomManager.zoomFactor(); |
| 161 var newWidth = this._resizeStart.width + dipOffsetX * widthFactor; | 161 var newWidth = this._resizeStart.width + dipOffsetX * widthFactor; |
| 162 newWidth = Math.round(newWidth / this._model.scale()); | 162 newWidth = Math.round(newWidth / this._model.scale()); |
| 163 if (newWidth >= WebInspector.DeviceModeModel.MinDeviceSize && | 163 if (newWidth >= Emulation.DeviceModeModel.MinDeviceSize && |
| 164 newWidth <= WebInspector.DeviceModeModel.MaxDeviceSize) | 164 newWidth <= Emulation.DeviceModeModel.MaxDeviceSize) |
| 165 this._model.setWidth(newWidth); | 165 this._model.setWidth(newWidth); |
| 166 } | 166 } |
| 167 | 167 |
| 168 if (heightFactor) { | 168 if (heightFactor) { |
| 169 var dipOffsetY = cssOffsetY * WebInspector.zoomManager.zoomFactor(); | 169 var dipOffsetY = cssOffsetY * UI.zoomManager.zoomFactor(); |
| 170 var newHeight = this._resizeStart.height + dipOffsetY * heightFactor; | 170 var newHeight = this._resizeStart.height + dipOffsetY * heightFactor; |
| 171 newHeight = Math.round(newHeight / this._model.scale()); | 171 newHeight = Math.round(newHeight / this._model.scale()); |
| 172 if (newHeight >= WebInspector.DeviceModeModel.MinDeviceSize && | 172 if (newHeight >= Emulation.DeviceModeModel.MinDeviceSize && |
| 173 newHeight <= WebInspector.DeviceModeModel.MaxDeviceSize) | 173 newHeight <= Emulation.DeviceModeModel.MaxDeviceSize) |
| 174 this._model.setHeight(newHeight); | 174 this._model.setHeight(newHeight); |
| 175 } | 175 } |
| 176 } | 176 } |
| 177 | 177 |
| 178 /** | 178 /** |
| 179 * @param {!WebInspector.Event} event | 179 * @param {!Common.Event} event |
| 180 */ | 180 */ |
| 181 _onResizeEnd(event) { | 181 _onResizeEnd(event) { |
| 182 delete this._resizeStart; | 182 delete this._resizeStart; |
| 183 WebInspector.userMetrics.actionTaken(WebInspector.UserMetrics.Action.Resized
ViewInResponsiveMode); | 183 Host.userMetrics.actionTaken(Host.UserMetrics.Action.ResizedViewInResponsive
Mode); |
| 184 } | 184 } |
| 185 | 185 |
| 186 _updateUI() { | 186 _updateUI() { |
| 187 /** | 187 /** |
| 188 * @param {!Element} element | 188 * @param {!Element} element |
| 189 * @param {!WebInspector.Rect} rect | 189 * @param {!Common.Rect} rect |
| 190 */ | 190 */ |
| 191 function applyRect(element, rect) { | 191 function applyRect(element, rect) { |
| 192 element.style.left = rect.left + 'px'; | 192 element.style.left = rect.left + 'px'; |
| 193 element.style.top = rect.top + 'px'; | 193 element.style.top = rect.top + 'px'; |
| 194 element.style.width = rect.width + 'px'; | 194 element.style.width = rect.width + 'px'; |
| 195 element.style.height = rect.height + 'px'; | 195 element.style.height = rect.height + 'px'; |
| 196 } | 196 } |
| 197 | 197 |
| 198 if (!this.isShowing()) | 198 if (!this.isShowing()) |
| 199 return; | 199 return; |
| 200 | 200 |
| 201 var zoomFactor = WebInspector.zoomManager.zoomFactor(); | 201 var zoomFactor = UI.zoomManager.zoomFactor(); |
| 202 var callDoResize = false; | 202 var callDoResize = false; |
| 203 var showRulers = this._showRulersSetting.get() && this._model.type() !== Web
Inspector.DeviceModeModel.Type.None; | 203 var showRulers = this._showRulersSetting.get() && this._model.type() !== Emu
lation.DeviceModeModel.Type.None; |
| 204 var contentAreaResized = false; | 204 var contentAreaResized = false; |
| 205 var updateRulers = false; | 205 var updateRulers = false; |
| 206 | 206 |
| 207 var cssScreenRect = this._model.screenRect().scale(1 / zoomFactor); | 207 var cssScreenRect = this._model.screenRect().scale(1 / zoomFactor); |
| 208 if (!cssScreenRect.isEqual(this._cachedCssScreenRect)) { | 208 if (!cssScreenRect.isEqual(this._cachedCssScreenRect)) { |
| 209 applyRect(this._screenArea, cssScreenRect); | 209 applyRect(this._screenArea, cssScreenRect); |
| 210 updateRulers = true; | 210 updateRulers = true; |
| 211 callDoResize = true; | 211 callDoResize = true; |
| 212 this._cachedCssScreenRect = cssScreenRect; | 212 this._cachedCssScreenRect = cssScreenRect; |
| 213 } | 213 } |
| 214 | 214 |
| 215 var cssVisiblePageRect = this._model.visiblePageRect().scale(1 / zoomFactor)
; | 215 var cssVisiblePageRect = this._model.visiblePageRect().scale(1 / zoomFactor)
; |
| 216 if (!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)) { | 216 if (!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)) { |
| 217 applyRect(this._pageArea, cssVisiblePageRect); | 217 applyRect(this._pageArea, cssVisiblePageRect); |
| 218 callDoResize = true; | 218 callDoResize = true; |
| 219 this._cachedCssVisiblePageRect = cssVisiblePageRect; | 219 this._cachedCssVisiblePageRect = cssVisiblePageRect; |
| 220 } | 220 } |
| 221 | 221 |
| 222 var outlineRect = this._model.outlineRect().scale(1 / zoomFactor); | 222 var outlineRect = this._model.outlineRect().scale(1 / zoomFactor); |
| 223 if (!outlineRect.isEqual(this._cachedOutlineRect)) { | 223 if (!outlineRect.isEqual(this._cachedOutlineRect)) { |
| 224 applyRect(this._outlineImage, outlineRect); | 224 applyRect(this._outlineImage, outlineRect); |
| 225 callDoResize = true; | 225 callDoResize = true; |
| 226 this._cachedOutlineRect = outlineRect; | 226 this._cachedOutlineRect = outlineRect; |
| 227 } | 227 } |
| 228 this._contentClip.classList.toggle('device-mode-outline-visible', !!this._mo
del.outlineImage()); | 228 this._contentClip.classList.toggle('device-mode-outline-visible', !!this._mo
del.outlineImage()); |
| 229 | 229 |
| 230 var resizable = this._model.type() === WebInspector.DeviceModeModel.Type.Res
ponsive; | 230 var resizable = this._model.type() === Emulation.DeviceModeModel.Type.Respon
sive; |
| 231 if (resizable !== this._cachedResizable) { | 231 if (resizable !== this._cachedResizable) { |
| 232 this._rightResizerElement.classList.toggle('hidden', !resizable); | 232 this._rightResizerElement.classList.toggle('hidden', !resizable); |
| 233 this._leftResizerElement.classList.toggle('hidden', !resizable); | 233 this._leftResizerElement.classList.toggle('hidden', !resizable); |
| 234 this._bottomResizerElement.classList.toggle('hidden', !resizable); | 234 this._bottomResizerElement.classList.toggle('hidden', !resizable); |
| 235 this._bottomRightResizerElement.classList.toggle('hidden', !resizable); | 235 this._bottomRightResizerElement.classList.toggle('hidden', !resizable); |
| 236 this._bottomLeftResizerElement.classList.toggle('hidden', !resizable); | 236 this._bottomLeftResizerElement.classList.toggle('hidden', !resizable); |
| 237 this._cachedResizable = resizable; | 237 this._cachedResizable = resizable; |
| 238 } | 238 } |
| 239 | 239 |
| 240 var mediaInspectorVisible = | 240 var mediaInspectorVisible = |
| 241 this._showMediaInspectorSetting.get() && this._model.type() !== WebInspe
ctor.DeviceModeModel.Type.None; | 241 this._showMediaInspectorSetting.get() && this._model.type() !== Emulatio
n.DeviceModeModel.Type.None; |
| 242 if (mediaInspectorVisible !== this._cachedMediaInspectorVisible) { | 242 if (mediaInspectorVisible !== this._cachedMediaInspectorVisible) { |
| 243 if (mediaInspectorVisible) | 243 if (mediaInspectorVisible) |
| 244 this._mediaInspector.show(this._mediaInspectorContainer); | 244 this._mediaInspector.show(this._mediaInspectorContainer); |
| 245 else | 245 else |
| 246 this._mediaInspector.detach(); | 246 this._mediaInspector.detach(); |
| 247 contentAreaResized = true; | 247 contentAreaResized = true; |
| 248 callDoResize = true; | 248 callDoResize = true; |
| 249 this._cachedMediaInspectorVisible = mediaInspectorVisible; | 249 this._cachedMediaInspectorVisible = mediaInspectorVisible; |
| 250 } | 250 } |
| 251 | 251 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 | 305 |
| 306 /** | 306 /** |
| 307 * @param {!Element} element | 307 * @param {!Element} element |
| 308 * @param {boolean} success | 308 * @param {boolean} success |
| 309 */ | 309 */ |
| 310 _onImageLoaded(element, success) { | 310 _onImageLoaded(element, success) { |
| 311 element.classList.toggle('hidden', !success); | 311 element.classList.toggle('hidden', !success); |
| 312 } | 312 } |
| 313 | 313 |
| 314 _contentAreaResized() { | 314 _contentAreaResized() { |
| 315 var zoomFactor = WebInspector.zoomManager.zoomFactor(); | 315 var zoomFactor = UI.zoomManager.zoomFactor(); |
| 316 var rect = this._contentArea.getBoundingClientRect(); | 316 var rect = this._contentArea.getBoundingClientRect(); |
| 317 var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(
rect.height * zoomFactor, 1)); | 317 var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(
rect.height * zoomFactor, 1)); |
| 318 var preferredSize = new Size( | 318 var preferredSize = new Size( |
| 319 Math.max((rect.width - 2 * this._handleWidth) * zoomFactor, 1), | 319 Math.max((rect.width - 2 * this._handleWidth) * zoomFactor, 1), |
| 320 Math.max((rect.height - this._handleHeight) * zoomFactor, 1)); | 320 Math.max((rect.height - this._handleHeight) * zoomFactor, 1)); |
| 321 this._model.setAvailableSize(availableSize, preferredSize); | 321 this._model.setAvailableSize(availableSize, preferredSize); |
| 322 } | 322 } |
| 323 | 323 |
| 324 _measureHandles() { | 324 _measureHandles() { |
| 325 var hidden = this._rightResizerElement.classList.contains('hidden'); | 325 var hidden = this._rightResizerElement.classList.contains('hidden'); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 353 */ | 353 */ |
| 354 wasShown() { | 354 wasShown() { |
| 355 this._measureHandles(); | 355 this._measureHandles(); |
| 356 this._toolbar.restore(); | 356 this._toolbar.restore(); |
| 357 } | 357 } |
| 358 | 358 |
| 359 /** | 359 /** |
| 360 * @override | 360 * @override |
| 361 */ | 361 */ |
| 362 willHide() { | 362 willHide() { |
| 363 this._model.emulate(WebInspector.DeviceModeModel.Type.None, null, null); | 363 this._model.emulate(Emulation.DeviceModeModel.Type.None, null, null); |
| 364 } | 364 } |
| 365 | 365 |
| 366 captureScreenshot() { | 366 captureScreenshot() { |
| 367 var mainTarget = WebInspector.targetManager.mainTarget(); | 367 var mainTarget = SDK.targetManager.mainTarget(); |
| 368 if (!mainTarget) | 368 if (!mainTarget) |
| 369 return; | 369 return; |
| 370 WebInspector.DOMModel.muteHighlight(); | 370 SDK.DOMModel.muteHighlight(); |
| 371 | 371 |
| 372 var zoomFactor = WebInspector.zoomManager.zoomFactor(); | 372 var zoomFactor = UI.zoomManager.zoomFactor(); |
| 373 var rect = this._contentArea.getBoundingClientRect(); | 373 var rect = this._contentArea.getBoundingClientRect(); |
| 374 var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(
rect.height * zoomFactor, 1)); | 374 var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math.max(
rect.height * zoomFactor, 1)); |
| 375 var outlineVisible = this._model.deviceOutlineSetting().get(); | 375 var outlineVisible = this._model.deviceOutlineSetting().get(); |
| 376 | 376 |
| 377 if (availableSize.width < this._model.screenRect().width || | 377 if (availableSize.width < this._model.screenRect().width || |
| 378 availableSize.height < this._model.screenRect().height) { | 378 availableSize.height < this._model.screenRect().height) { |
| 379 WebInspector.inspectorView.minimize(); | 379 UI.inspectorView.minimize(); |
| 380 this._model.deviceOutlineSetting().set(false); | 380 this._model.deviceOutlineSetting().set(false); |
| 381 } | 381 } |
| 382 | 382 |
| 383 mainTarget.pageAgent().captureScreenshot(screenshotCaptured.bind(this)); | 383 mainTarget.pageAgent().captureScreenshot(screenshotCaptured.bind(this)); |
| 384 | 384 |
| 385 /** | 385 /** |
| 386 * @param {?Protocol.Error} error | 386 * @param {?Protocol.Error} error |
| 387 * @param {string} content | 387 * @param {string} content |
| 388 * @this {WebInspector.DeviceModeView} | 388 * @this {Emulation.DeviceModeView} |
| 389 */ | 389 */ |
| 390 function screenshotCaptured(error, content) { | 390 function screenshotCaptured(error, content) { |
| 391 this._model.deviceOutlineSetting().set(outlineVisible); | 391 this._model.deviceOutlineSetting().set(outlineVisible); |
| 392 var dpr = window.devicePixelRatio; | 392 var dpr = window.devicePixelRatio; |
| 393 var outlineRect = this._model.outlineRect().scale(dpr); | 393 var outlineRect = this._model.outlineRect().scale(dpr); |
| 394 var screenRect = this._model.screenRect().scale(dpr); | 394 var screenRect = this._model.screenRect().scale(dpr); |
| 395 screenRect.left -= outlineRect.left; | 395 screenRect.left -= outlineRect.left; |
| 396 screenRect.top -= outlineRect.top; | 396 screenRect.top -= outlineRect.top; |
| 397 var visiblePageRect = this._model.visiblePageRect().scale(dpr); | 397 var visiblePageRect = this._model.visiblePageRect().scale(dpr); |
| 398 visiblePageRect.left += screenRect.left; | 398 visiblePageRect.left += screenRect.left; |
| 399 visiblePageRect.top += screenRect.top; | 399 visiblePageRect.top += screenRect.top; |
| 400 outlineRect.left = 0; | 400 outlineRect.left = 0; |
| 401 outlineRect.top = 0; | 401 outlineRect.top = 0; |
| 402 | 402 |
| 403 WebInspector.DOMModel.unmuteHighlight(); | 403 SDK.DOMModel.unmuteHighlight(); |
| 404 WebInspector.inspectorView.restore(); | 404 UI.inspectorView.restore(); |
| 405 | 405 |
| 406 if (error) { | 406 if (error) { |
| 407 console.error(error); | 407 console.error(error); |
| 408 return; | 408 return; |
| 409 } | 409 } |
| 410 | 410 |
| 411 // Create a canvas to splice the images together. | 411 // Create a canvas to splice the images together. |
| 412 var canvas = createElement('canvas'); | 412 var canvas = createElement('canvas'); |
| 413 var ctx = canvas.getContext('2d'); | 413 var ctx = canvas.getContext('2d'); |
| 414 canvas.width = outlineRect.width; | 414 canvas.width = outlineRect.width; |
| 415 canvas.height = outlineRect.height; | 415 canvas.height = outlineRect.height; |
| 416 ctx.imageSmoothingEnabled = false; | 416 ctx.imageSmoothingEnabled = false; |
| 417 | 417 |
| 418 var promise = Promise.resolve(); | 418 var promise = Promise.resolve(); |
| 419 if (this._model.outlineImage()) | 419 if (this._model.outlineImage()) |
| 420 promise = promise.then(paintImage.bind(null, this._model.outlineImage(),
outlineRect)); | 420 promise = promise.then(paintImage.bind(null, this._model.outlineImage(),
outlineRect)); |
| 421 promise = promise.then(drawBorder); | 421 promise = promise.then(drawBorder); |
| 422 if (this._model.screenImage()) | 422 if (this._model.screenImage()) |
| 423 promise = promise.then(paintImage.bind(null, this._model.screenImage(),
screenRect)); | 423 promise = promise.then(paintImage.bind(null, this._model.screenImage(),
screenRect)); |
| 424 promise.then(paintScreenshot.bind(this)); | 424 promise.then(paintScreenshot.bind(this)); |
| 425 | 425 |
| 426 /** | 426 /** |
| 427 * @param {string} src | 427 * @param {string} src |
| 428 * @param {!WebInspector.Rect} rect | 428 * @param {!Common.Rect} rect |
| 429 * @return {!Promise<undefined>} | 429 * @return {!Promise<undefined>} |
| 430 */ | 430 */ |
| 431 function paintImage(src, rect) { | 431 function paintImage(src, rect) { |
| 432 var callback; | 432 var callback; |
| 433 var promise = new Promise(fulfill => callback = fulfill); | 433 var promise = new Promise(fulfill => callback = fulfill); |
| 434 var image = new Image(); | 434 var image = new Image(); |
| 435 image.crossOrigin = 'Anonymous'; | 435 image.crossOrigin = 'Anonymous'; |
| 436 image.srcset = src; | 436 image.srcset = src; |
| 437 image.onload = onImageLoad; | 437 image.onload = onImageLoad; |
| 438 image.onerror = callback; | 438 image.onerror = callback; |
| 439 return promise; | 439 return promise; |
| 440 | 440 |
| 441 function onImageLoad() { | 441 function onImageLoad() { |
| 442 ctx.drawImage(image, rect.left, rect.top, rect.width, rect.height); | 442 ctx.drawImage(image, rect.left, rect.top, rect.width, rect.height); |
| 443 callback(); | 443 callback(); |
| 444 } | 444 } |
| 445 } | 445 } |
| 446 | 446 |
| 447 function drawBorder() { | 447 function drawBorder() { |
| 448 ctx.strokeStyle = 'hsla(0, 0%, 98%, 0.5)'; | 448 ctx.strokeStyle = 'hsla(0, 0%, 98%, 0.5)'; |
| 449 ctx.lineWidth = 1; | 449 ctx.lineWidth = 1; |
| 450 ctx.setLineDash([10, 10]); | 450 ctx.setLineDash([10, 10]); |
| 451 ctx.strokeRect(screenRect.left + 1, screenRect.top + 1, screenRect.width
- 2, screenRect.height - 2); | 451 ctx.strokeRect(screenRect.left + 1, screenRect.top + 1, screenRect.width
- 2, screenRect.height - 2); |
| 452 } | 452 } |
| 453 | 453 |
| 454 /** | 454 /** |
| 455 * @this {WebInspector.DeviceModeView} | 455 * @this {Emulation.DeviceModeView} |
| 456 */ | 456 */ |
| 457 function paintScreenshot() { | 457 function paintScreenshot() { |
| 458 var pageImage = new Image(); | 458 var pageImage = new Image(); |
| 459 pageImage.src = 'data:image/png;base64,' + content; | 459 pageImage.src = 'data:image/png;base64,' + content; |
| 460 ctx.drawImage( | 460 ctx.drawImage( |
| 461 pageImage, visiblePageRect.left, visiblePageRect.top, Math.min(pageI
mage.naturalWidth, screenRect.width), | 461 pageImage, visiblePageRect.left, visiblePageRect.top, Math.min(pageI
mage.naturalWidth, screenRect.width), |
| 462 Math.min(pageImage.naturalHeight, screenRect.height)); | 462 Math.min(pageImage.naturalHeight, screenRect.height)); |
| 463 var url = mainTarget && mainTarget.inspectedURL(); | 463 var url = mainTarget && mainTarget.inspectedURL(); |
| 464 var fileName = url ? url.trimURL().removeURLFragment() : ''; | 464 var fileName = url ? url.trimURL().removeURLFragment() : ''; |
| 465 if (this._model.type() === WebInspector.DeviceModeModel.Type.Device) | 465 if (this._model.type() === Emulation.DeviceModeModel.Type.Device) |
| 466 fileName += WebInspector.UIString('(%s)', this._model.device().title); | 466 fileName += Common.UIString('(%s)', this._model.device().title); |
| 467 // Trigger download. | 467 // Trigger download. |
| 468 var link = createElement('a'); | 468 var link = createElement('a'); |
| 469 link.download = fileName + '.png'; | 469 link.download = fileName + '.png'; |
| 470 link.href = canvas.toDataURL('image/png'); | 470 link.href = canvas.toDataURL('image/png'); |
| 471 link.click(); | 471 link.click(); |
| 472 } | 472 } |
| 473 } | 473 } |
| 474 } | 474 } |
| 475 }; | 475 }; |
| 476 | 476 |
| 477 /** | 477 /** |
| 478 * @unrestricted | 478 * @unrestricted |
| 479 */ | 479 */ |
| 480 WebInspector.DeviceModeView.Ruler = class extends WebInspector.VBox { | 480 Emulation.DeviceModeView.Ruler = class extends UI.VBox { |
| 481 /** | 481 /** |
| 482 * @param {boolean} horizontal | 482 * @param {boolean} horizontal |
| 483 * @param {function(number)} applyCallback | 483 * @param {function(number)} applyCallback |
| 484 */ | 484 */ |
| 485 constructor(horizontal, applyCallback) { | 485 constructor(horizontal, applyCallback) { |
| 486 super(); | 486 super(); |
| 487 this.element.classList.add('device-mode-ruler'); | 487 this.element.classList.add('device-mode-ruler'); |
| 488 this._contentElement = | 488 this._contentElement = |
| 489 this.element.createChild('div', 'device-mode-ruler-content').createChild
('div', 'device-mode-ruler-inner'); | 489 this.element.createChild('div', 'device-mode-ruler-content').createChild
('div', 'device-mode-ruler-inner'); |
| 490 this._horizontal = horizontal; | 490 this._horizontal = horizontal; |
| 491 this._scale = 1; | 491 this._scale = 1; |
| 492 this._count = 0; | 492 this._count = 0; |
| 493 this._throttler = new WebInspector.Throttler(0); | 493 this._throttler = new Common.Throttler(0); |
| 494 this._applyCallback = applyCallback; | 494 this._applyCallback = applyCallback; |
| 495 } | 495 } |
| 496 | 496 |
| 497 /** | 497 /** |
| 498 * @param {number} scale | 498 * @param {number} scale |
| 499 */ | 499 */ |
| 500 render(scale) { | 500 render(scale) { |
| 501 this._scale = scale; | 501 this._scale = scale; |
| 502 this._throttler.schedule(this._update.bind(this)); | 502 this._throttler.schedule(this._update.bind(this)); |
| 503 } | 503 } |
| 504 | 504 |
| 505 /** | 505 /** |
| 506 * @override | 506 * @override |
| 507 */ | 507 */ |
| 508 onResize() { | 508 onResize() { |
| 509 this._throttler.schedule(this._update.bind(this)); | 509 this._throttler.schedule(this._update.bind(this)); |
| 510 } | 510 } |
| 511 | 511 |
| 512 /** | 512 /** |
| 513 * @return {!Promise.<?>} | 513 * @return {!Promise.<?>} |
| 514 */ | 514 */ |
| 515 _update() { | 515 _update() { |
| 516 var zoomFactor = WebInspector.zoomManager.zoomFactor(); | 516 var zoomFactor = UI.zoomManager.zoomFactor(); |
| 517 var size = this._horizontal ? this._contentElement.offsetWidth : this._conte
ntElement.offsetHeight; | 517 var size = this._horizontal ? this._contentElement.offsetWidth : this._conte
ntElement.offsetHeight; |
| 518 | 518 |
| 519 if (this._scale !== this._renderedScale || zoomFactor !== this._renderedZoom
Factor) { | 519 if (this._scale !== this._renderedScale || zoomFactor !== this._renderedZoom
Factor) { |
| 520 this._contentElement.removeChildren(); | 520 this._contentElement.removeChildren(); |
| 521 this._count = 0; | 521 this._count = 0; |
| 522 this._renderedScale = this._scale; | 522 this._renderedScale = this._scale; |
| 523 this._renderedZoomFactor = zoomFactor; | 523 this._renderedZoomFactor = zoomFactor; |
| 524 } | 524 } |
| 525 | 525 |
| 526 var dipSize = size * zoomFactor / this._scale; | 526 var dipSize = size * zoomFactor / this._scale; |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 567 return Promise.resolve(); | 567 return Promise.resolve(); |
| 568 } | 568 } |
| 569 | 569 |
| 570 /** | 570 /** |
| 571 * @param {number} size | 571 * @param {number} size |
| 572 */ | 572 */ |
| 573 _onMarkerClick(size) { | 573 _onMarkerClick(size) { |
| 574 this._applyCallback.call(null, size); | 574 this._applyCallback.call(null, size); |
| 575 } | 575 } |
| 576 }; | 576 }; |
| OLD | NEW |