Chromium Code Reviews| 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 /** | 5 /** |
| 6 * @constructor | 6 * @constructor |
| 7 * @extends {WebInspector.VBox} | 7 * @extends {WebInspector.VBox} |
| 8 */ | 8 */ |
| 9 WebInspector.DeviceModeView = function() | 9 WebInspector.DeviceModeView = function() |
| 10 { | 10 { |
| 11 WebInspector.VBox.call(this, true); | 11 WebInspector.VBox.call(this, true); |
| 12 this.setMinimumSize(150, 150); | 12 this.setMinimumSize(150, 150); |
| 13 this.element.classList.add("device-mode-view"); | 13 this.element.classList.add("device-mode-view"); |
| 14 this.registerRequiredCSS("emulation/deviceModeView.css"); | 14 this.registerRequiredCSS("emulation/deviceModeView.css"); |
| 15 WebInspector.Tooltip.addNativeOverrideContainer(this.contentElement); | 15 WebInspector.Tooltip.addNativeOverrideContainer(this.contentElement); |
| 16 | 16 |
| 17 this._model = new WebInspector.DeviceModeModel(this._updateUI.bind(this)); | 17 this._model = new WebInspector.DeviceModeModel(this._updateUI.bind(this)); |
| 18 this._mediaInspector = new WebInspector.MediaQueryInspector(() => this._mode l.appliedDeviceSize().width, this._model.setWidth.bind(this._model)); | 18 this._mediaInspector = new WebInspector.MediaQueryInspector(() => this._mode l.appliedDeviceSize().width, this._model.setWidth.bind(this._model)); |
| 19 // TODO(dgozman): remove CountUpdated event. | 19 // TODO(dgozman): remove CountUpdated event. |
| 20 this._showMediaInspectorSetting = WebInspector.settings.createSetting("showM ediaQueryInspector", false); | 20 this._showMediaInspectorSetting = WebInspector.settings.createSetting("showM ediaQueryInspector", false); |
| 21 this._showMediaInspectorSetting.addChangeListener(this._updateUI, this); | 21 this._showMediaInspectorSetting.addChangeListener(this._updateUI, this); |
| 22 this._showRulersSetting = WebInspector.settings.createSetting("emulation.sho wRulers", false); | 22 this._showRulersSetting = WebInspector.settings.createSetting("emulation.sho wRulers", false); |
| 23 this._showRulersSetting.addChangeListener(this._updateUI, this); | 23 this._showRulersSetting.addChangeListener(this._updateUI, this); |
| 24 this._showOutlineSetting = WebInspector.settings.createSetting("emulation.sh owOutline", false); | |
| 25 this._showOutlineSetting.addChangeListener(this._updateUI, this); | |
| 24 | 26 |
| 25 this._topRuler = new WebInspector.DeviceModeView.Ruler(true, this._model.set WidthAndScaleToFit.bind(this._model)); | 27 this._topRuler = new WebInspector.DeviceModeView.Ruler(true, this._model.set WidthAndScaleToFit.bind(this._model)); |
| 26 this._topRuler.element.classList.add("device-mode-ruler-top"); | 28 this._topRuler.element.classList.add("device-mode-ruler-top"); |
| 27 this._leftRuler = new WebInspector.DeviceModeView.Ruler(false, this._model.s etHeightAndScaleToFit.bind(this._model)); | 29 this._leftRuler = new WebInspector.DeviceModeView.Ruler(false, this._model.s etHeightAndScaleToFit.bind(this._model)); |
| 28 this._leftRuler.element.classList.add("device-mode-ruler-left"); | 30 this._leftRuler.element.classList.add("device-mode-ruler-left"); |
| 29 this._createUI(); | 31 this._createUI(); |
| 30 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.Zo omChanged, this._zoomChanged, this); | 32 WebInspector.zoomManager.addEventListener(WebInspector.ZoomManager.Events.Zo omChanged, this._zoomChanged, this); |
| 31 }; | 33 }; |
| 32 | 34 |
| 33 WebInspector.DeviceModeView.prototype = { | 35 WebInspector.DeviceModeView.prototype = { |
| 34 _createUI: function() | 36 _createUI: function() |
| 35 { | 37 { |
| 36 this._toolbar = new WebInspector.DeviceModeToolbar(this._model, this._sh owMediaInspectorSetting, this._showRulersSetting); | 38 this._toolbar = new WebInspector.DeviceModeToolbar(this._model, this._sh owMediaInspectorSetting, this._showRulersSetting, this._showOutlineSetting); |
| 37 this.contentElement.appendChild(this._toolbar.element()); | 39 this.contentElement.appendChild(this._toolbar.element()); |
| 38 | 40 |
| 39 this._contentClip = this.contentElement.createChild("div", "device-mode- content-clip vbox"); | 41 this._contentClip = this.contentElement.createChild("div", "device-mode- content-clip vbox"); |
| 40 this._responsivePresetsContainer = this._contentClip.createChild("div", "device-mode-presets-container"); | 42 this._responsivePresetsContainer = this._contentClip.createChild("div", "device-mode-presets-container"); |
| 41 this._populatePresetsContainer(); | 43 this._populatePresetsContainer(); |
| 42 this._mediaInspectorContainer = this._contentClip.createChild("div", "de vice-mode-media-container"); | 44 this._mediaInspectorContainer = this._contentClip.createChild("div", "de vice-mode-media-container"); |
| 43 this._contentArea = this._contentClip.createChild("div", "device-mode-co ntent-area"); | 45 this._contentArea = this._contentClip.createChild("div", "device-mode-co ntent-area"); |
| 44 | 46 |
| 45 this._screenArea = this._contentArea.createChild("div", "device-mode-scr een-area"); | 47 this._screenArea = this._contentArea.createChild("div", "device-mode-scr een-area"); |
| 46 this._screenImage = this._screenArea.createChild("img", "device-mode-scr een-image hidden"); | 48 this._screenImage = this._screenArea.createChild("img", "device-mode-scr een-image hidden"); |
| 47 this._screenImage.addEventListener("load", this._onScreenImageLoaded.bin d(this, true), false); | 49 this._screenImage.addEventListener("load", this._onScreenImageLoaded.bin d(this, true), false); |
| 48 this._screenImage.addEventListener("error", this._onScreenImageLoaded.bi nd(this, false), false); | 50 this._screenImage.addEventListener("error", this._onScreenImageLoaded.bi nd(this, false), false); |
| 49 | 51 |
| 52 this._outlineArea = this._contentArea.createChild("div", "device-mode-ou tline-area"); | |
| 53 this._outlineImage = this._outlineArea.createChild("img", "device-mode-o utline-image hidden"); | |
| 54 this._outlineImage.addEventListener("load", this._onOutlineImageLoaded.b ind(this, true), false); | |
| 55 this._outlineImage.addEventListener("error", this._onOutlineImageLoaded. bind(this, false), false); | |
| 56 | |
| 50 this._cornerResizerElement = this._screenArea.createChild("div", "device -mode-resizer device-mode-corner-resizer"); | 57 this._cornerResizerElement = this._screenArea.createChild("div", "device -mode-resizer device-mode-corner-resizer"); |
| 51 this._cornerResizerElement.createChild("div", ""); | 58 this._cornerResizerElement.createChild("div", ""); |
| 52 this._createResizer(this._cornerResizerElement, true, true); | 59 this._createResizer(this._cornerResizerElement, true, true); |
| 53 | 60 |
| 54 this._widthResizerElement = this._screenArea.createChild("div", "device- mode-resizer device-mode-width-resizer"); | 61 this._widthResizerElement = this._screenArea.createChild("div", "device- mode-resizer device-mode-width-resizer"); |
| 55 this._widthResizerElement.createChild("div", ""); | 62 this._widthResizerElement.createChild("div", ""); |
| 56 this._createResizer(this._widthResizerElement, true, false); | 63 this._createResizer(this._widthResizerElement, true, false); |
| 57 | 64 |
| 58 this._heightResizerElement = this._screenArea.createChild("div", "device -mode-resizer device-mode-height-resizer"); | 65 this._heightResizerElement = this._screenArea.createChild("div", "device -mode-resizer device-mode-height-resizer"); |
| 59 this._heightResizerElement.createChild("div", ""); | 66 this._heightResizerElement.createChild("div", ""); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 175 }, | 182 }, |
| 176 | 183 |
| 177 _updateUI: function() | 184 _updateUI: function() |
| 178 { | 185 { |
| 179 if (!this.isShowing()) | 186 if (!this.isShowing()) |
| 180 return; | 187 return; |
| 181 | 188 |
| 182 var zoomFactor = WebInspector.zoomManager.zoomFactor(); | 189 var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
| 183 var callDoResize = false; | 190 var callDoResize = false; |
| 184 var showRulers = this._showRulersSetting.get() && this._model.type() !== WebInspector.DeviceModeModel.Type.None; | 191 var showRulers = this._showRulersSetting.get() && this._model.type() !== WebInspector.DeviceModeModel.Type.None; |
| 192 var showOutline = this._showOutlineSetting.get() && this._model.type() ! == WebInspector.DeviceModeModel.Type.None; | |
| 185 var contentAreaResized = false; | 193 var contentAreaResized = false; |
| 186 var updateRulers = false; | 194 var updateRulers = false; |
| 187 | 195 |
| 188 var cssScreenRect = this._model.screenRect().scale(1 / zoomFactor); | 196 var cssScreenRect = this._model.screenRect().scale(1 / zoomFactor); |
| 189 if (!cssScreenRect.isEqual(this._cachedCssScreenRect)) { | 197 if (!cssScreenRect.isEqual(this._cachedCssScreenRect)) { |
| 190 this._screenArea.style.left = cssScreenRect.left + "px"; | 198 this._screenArea.style.left = cssScreenRect.left + "px"; |
| 191 this._screenArea.style.top = cssScreenRect.top + "px"; | 199 this._screenArea.style.top = cssScreenRect.top + "px"; |
| 192 this._screenArea.style.width = cssScreenRect.width + "px"; | 200 this._screenArea.style.width = cssScreenRect.width + "px"; |
| 193 this._screenArea.style.height = cssScreenRect.height + "px"; | 201 this._screenArea.style.height = cssScreenRect.height + "px"; |
| 194 this._leftRuler.element.style.left = cssScreenRect.left + "px"; | 202 this._leftRuler.element.style.left = cssScreenRect.left + "px"; |
| 203 var outlineImageDimensions = this._model.outlineDimensions(); | |
| 204 var outlineInsets = this._model.outlineInsets(); | |
| 205 this._outlineArea.style.left = (cssScreenRect.left - outlineInsets.l eft) + "px"; | |
| 206 this._outlineArea.style.top = (cssScreenRect.top - outlineInsets.top ) + "px"; | |
| 207 this._outlineArea.style.width = outlineImageDimensions.width + "px"; | |
| 208 this._outlineArea.style.height = outlineImageDimensions.height + "px "; | |
| 195 updateRulers = true; | 209 updateRulers = true; |
| 196 callDoResize = true; | 210 callDoResize = true; |
| 197 this._cachedCssScreenRect = cssScreenRect; | 211 this._cachedCssScreenRect = cssScreenRect; |
| 198 } | 212 } |
| 199 | 213 |
| 200 var cssVisiblePageRect = this._model.visiblePageRect().scale(1 / zoomFac tor); | 214 var cssVisiblePageRect = this._model.visiblePageRect().scale(1 / zoomFac tor); |
| 201 if (!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)) { | 215 if (!cssVisiblePageRect.isEqual(this._cachedCssVisiblePageRect)) { |
| 202 this._pageArea.style.left = cssVisiblePageRect.left + "px"; | 216 this._pageArea.style.left = cssVisiblePageRect.left + "px"; |
| 203 this._pageArea.style.top = cssVisiblePageRect.top + "px"; | 217 this._pageArea.style.top = cssVisiblePageRect.top + "px"; |
| 204 this._pageArea.style.width = cssVisiblePageRect.width + "px"; | 218 this._pageArea.style.width = cssVisiblePageRect.width + "px"; |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 233 this._leftRuler.show(this._contentArea); | 247 this._leftRuler.show(this._contentArea); |
| 234 } else { | 248 } else { |
| 235 this._topRuler.detach(); | 249 this._topRuler.detach(); |
| 236 this._leftRuler.detach(); | 250 this._leftRuler.detach(); |
| 237 } | 251 } |
| 238 contentAreaResized = true; | 252 contentAreaResized = true; |
| 239 callDoResize = true; | 253 callDoResize = true; |
| 240 this._cachedShowRulers = showRulers; | 254 this._cachedShowRulers = showRulers; |
| 241 } | 255 } |
| 242 | 256 |
| 257 if (showOutline !== this._cachedShowOutline) { | |
| 258 this._contentClip.classList.toggle("device-mode-frame-visible", show Outline); | |
| 259 if (showOutline) { | |
| 260 this._positionOutline(); | |
|
dgozman
2016/02/01 17:18:27
I think should have been handled in lines 203-208.
mmccoy
2016/02/10 20:06:33
Removed!
| |
| 261 } else { | |
| 262 // TODO(mmccoy): Hide device frame | |
| 263 } | |
| 264 this._cachedShowOutline = showOutline; | |
| 265 } | |
| 266 | |
| 243 if (this._model.scale() !== this._cachedScale) { | 267 if (this._model.scale() !== this._cachedScale) { |
| 244 updateRulers = true; | 268 updateRulers = true; |
| 245 callDoResize = true; | 269 callDoResize = true; |
| 246 for (var block of this._presetBlocks) | 270 for (var block of this._presetBlocks) |
| 247 block.style.width = block.__width * this._model.scale() + "px"; | 271 block.style.width = block.__width * this._model.scale() + "px"; |
| 248 this._cachedScale = this._model.scale(); | 272 this._cachedScale = this._model.scale(); |
| 249 } | 273 } |
| 250 | 274 |
| 251 this._toolbar.update(); | 275 this._toolbar.update(); |
| 252 this._loadScreenImage(this._model.screenImage()); | 276 this._loadScreenImage(this._model.screenImage()); |
| 277 this._loadOutlineImage(this._model.outlineImage()); | |
| 253 this._mediaInspector.setAxisTransform(-cssScreenRect.left * zoomFactor / this._model.scale(), this._model.scale()); | 278 this._mediaInspector.setAxisTransform(-cssScreenRect.left * zoomFactor / this._model.scale(), this._model.scale()); |
| 254 if (callDoResize) | 279 if (callDoResize) |
| 255 this.doResize(); | 280 this.doResize(); |
| 256 if (updateRulers) { | 281 if (updateRulers) { |
| 257 this._topRuler.render(this._cachedCssScreenRect ? this._cachedCssScr eenRect.left : 0, this._model.scale()); | 282 this._topRuler.render(this._cachedCssScreenRect ? this._cachedCssScr eenRect.left : 0, this._model.scale()); |
| 258 this._leftRuler.render(0, this._model.scale()); | 283 this._leftRuler.render(0, this._model.scale()); |
| 259 } | 284 } |
| 260 if (contentAreaResized) | 285 if (contentAreaResized) |
| 261 this._contentAreaResized(); | 286 this._contentAreaResized(); |
| 262 }, | 287 }, |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 274 }, | 299 }, |
| 275 | 300 |
| 276 /** | 301 /** |
| 277 * @param {boolean} success | 302 * @param {boolean} success |
| 278 */ | 303 */ |
| 279 _onScreenImageLoaded: function(success) | 304 _onScreenImageLoaded: function(success) |
| 280 { | 305 { |
| 281 this._screenImage.classList.toggle("hidden", !success); | 306 this._screenImage.classList.toggle("hidden", !success); |
| 282 }, | 307 }, |
| 283 | 308 |
| 309 /** | |
| 310 * @param {string} srcset | |
| 311 */ | |
| 312 _loadOutlineImage: function(srcset) | |
| 313 { | |
| 314 if (this._outlineImage.getAttribute("srcset") === srcset) | |
| 315 return; | |
| 316 this._outlineImage.setAttribute("srcset", srcset); | |
| 317 if (!srcset) | |
| 318 this._outlineImage.classList.toggle("hidden", true); | |
| 319 }, | |
| 320 | |
| 321 /** | |
| 322 * @param {boolean} success | |
| 323 */ | |
| 324 _onOutlineImageLoaded: function(success) | |
| 325 { | |
| 326 this._outlineImage.classList.toggle("hidden", !success); | |
| 327 }, | |
| 328 | |
| 284 _contentAreaResized: function() | 329 _contentAreaResized: function() |
| 285 { | 330 { |
| 286 var zoomFactor = WebInspector.zoomManager.zoomFactor(); | 331 var zoomFactor = WebInspector.zoomManager.zoomFactor(); |
| 287 var rect = this._contentArea.getBoundingClientRect(); | 332 var rect = this._contentArea.getBoundingClientRect(); |
| 288 var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math. max(rect.height * zoomFactor, 1)); | 333 var availableSize = new Size(Math.max(rect.width * zoomFactor, 1), Math. max(rect.height * zoomFactor, 1)); |
| 289 var preferredSize = new Size(Math.max((rect.width - 2 * this._handleWidt h) * zoomFactor, 1), Math.max((rect.height - this._handleHeight) * zoomFactor, 1 )); | 334 var preferredSize = new Size(Math.max((rect.width - 2 * this._handleWidt h) * zoomFactor, 1), Math.max((rect.height - this._handleHeight) * zoomFactor, 1 )); |
| 290 this._model.setAvailableSize(availableSize, preferredSize); | 335 this._model.setAvailableSize(availableSize, preferredSize); |
| 291 }, | 336 }, |
| 292 | 337 |
| 293 _measureHandles: function() | 338 _measureHandles: function() |
| 294 { | 339 { |
| 295 var hidden = this._widthResizerElement.classList.contains("hidden"); | 340 var hidden = this._widthResizerElement.classList.contains("hidden"); |
| 296 this._widthResizerElement.classList.toggle("hidden", false); | 341 this._widthResizerElement.classList.toggle("hidden", false); |
| 297 this._heightResizerElement.classList.toggle("hidden", false); | 342 this._heightResizerElement.classList.toggle("hidden", false); |
| 298 this._handleWidth = this._widthResizerElement.offsetWidth; | 343 this._handleWidth = this._widthResizerElement.offsetWidth; |
| 299 this._handleHeight = this._heightResizerElement.offsetHeight; | 344 this._handleHeight = this._heightResizerElement.offsetHeight; |
| 300 this._widthResizerElement.classList.toggle("hidden", hidden); | 345 this._widthResizerElement.classList.toggle("hidden", hidden); |
| 301 this._heightResizerElement.classList.toggle("hidden", hidden); | 346 this._heightResizerElement.classList.toggle("hidden", hidden); |
| 302 }, | 347 }, |
| 303 | 348 |
| 349 _positionOutline: function() | |
| 350 { | |
| 351 }, | |
| 352 | |
| 304 _zoomChanged: function() | 353 _zoomChanged: function() |
| 305 { | 354 { |
| 306 delete this._handleWidth; | 355 delete this._handleWidth; |
| 307 delete this._handleHeight; | 356 delete this._handleHeight; |
| 308 if (this.isShowing()) { | 357 if (this.isShowing()) { |
| 309 this._measureHandles(); | 358 this._measureHandles(); |
| 310 this._contentAreaResized(); | 359 this._contentAreaResized(); |
| 311 } | 360 } |
| 312 }, | 361 }, |
| 313 | 362 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 440 /** | 489 /** |
| 441 * @param {number} size | 490 * @param {number} size |
| 442 */ | 491 */ |
| 443 _onMarkerClick: function(size) | 492 _onMarkerClick: function(size) |
| 444 { | 493 { |
| 445 this._applyCallback.call(null, size); | 494 this._applyCallback.call(null, size); |
| 446 }, | 495 }, |
| 447 | 496 |
| 448 __proto__: WebInspector.VBox.prototype | 497 __proto__: WebInspector.VBox.prototype |
| 449 } | 498 } |
| OLD | NEW |