Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(55)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/emulation/DeviceModeView.js

Issue 1650243004: [DevTools] Option to show device frames in emulation mode (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698