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

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

Issue 2672983002: [DevTools] Separate ScreenCaptureModel out of ResourceTreeModel. (Closed)
Patch Set: rebased Created 3 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 * @unrestricted 5 * @unrestricted
6 */ 6 */
7 Emulation.DeviceModeView = class extends UI.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);
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 } 353 }
354 354
355 /** 355 /**
356 * @override 356 * @override
357 */ 357 */
358 willHide() { 358 willHide() {
359 this._model.emulate(Emulation.DeviceModeModel.Type.None, null, null); 359 this._model.emulate(Emulation.DeviceModeModel.Type.None, null, null);
360 } 360 }
361 361
362 captureScreenshot() { 362 captureScreenshot() {
363 var mainTarget = SDK.targetManager.mainTarget(); 363 var target = this._model.target();
364 if (!mainTarget) 364 if (!target)
365 return;
366 var screenCaptureModel = target.model(SDK.ScreenCaptureModel);
367 if (!screenCaptureModel)
365 return; 368 return;
366 SDK.DOMModel.muteHighlight(); 369 SDK.DOMModel.muteHighlight();
367 370
368 var zoomFactor = UI.zoomManager.zoomFactor(); 371 var zoomFactor = UI.zoomManager.zoomFactor();
369 var rect = this._contentArea.getBoundingClientRect(); 372 var rect = this._contentArea.getBoundingClientRect();
370 var availableSize = new UI.Size(Math.max(rect.width * zoomFactor, 1), Math.m ax(rect.height * zoomFactor, 1)); 373 var availableSize = new UI.Size(Math.max(rect.width * zoomFactor, 1), Math.m ax(rect.height * zoomFactor, 1));
371 var outlineVisible = this._model.deviceOutlineSetting().get(); 374 var outlineVisible = this._model.deviceOutlineSetting().get();
372 375
373 if (availableSize.width < this._model.screenRect().width || 376 if (availableSize.width < this._model.screenRect().width ||
374 availableSize.height < this._model.screenRect().height) { 377 availableSize.height < this._model.screenRect().height) {
375 UI.inspectorView.minimize(); 378 UI.inspectorView.minimize();
376 this._model.deviceOutlineSetting().set(false); 379 this._model.deviceOutlineSetting().set(false);
377 } 380 }
378 381
379 mainTarget.pageAgent().captureScreenshot('png', 100, screenshotCaptured.bind (this)); 382 screenCaptureModel.captureScreenshot('png', 100).then(screenshotCaptured.bin d(this));
380 383
381 /** 384 /**
382 * @param {?Protocol.Error} error 385 * @param {?string} content
383 * @param {string} content
384 * @this {Emulation.DeviceModeView} 386 * @this {Emulation.DeviceModeView}
385 */ 387 */
386 function screenshotCaptured(error, content) { 388 function screenshotCaptured(content) {
387 this._model.deviceOutlineSetting().set(outlineVisible); 389 this._model.deviceOutlineSetting().set(outlineVisible);
388 var dpr = window.devicePixelRatio; 390 var dpr = window.devicePixelRatio;
389 var outlineRect = this._model.outlineRect().scale(dpr); 391 var outlineRect = this._model.outlineRect().scale(dpr);
390 var screenRect = this._model.screenRect().scale(dpr); 392 var screenRect = this._model.screenRect().scale(dpr);
391 screenRect.left -= outlineRect.left; 393 screenRect.left -= outlineRect.left;
392 screenRect.top -= outlineRect.top; 394 screenRect.top -= outlineRect.top;
393 var visiblePageRect = this._model.visiblePageRect().scale(dpr); 395 var visiblePageRect = this._model.visiblePageRect().scale(dpr);
394 visiblePageRect.left += screenRect.left; 396 visiblePageRect.left += screenRect.left;
395 visiblePageRect.top += screenRect.top; 397 visiblePageRect.top += screenRect.top;
396 outlineRect.left = 0; 398 outlineRect.left = 0;
397 outlineRect.top = 0; 399 outlineRect.top = 0;
398 400
399 SDK.DOMModel.unmuteHighlight(); 401 SDK.DOMModel.unmuteHighlight();
400 UI.inspectorView.restore(); 402 UI.inspectorView.restore();
401 403
402 if (error) { 404 if (content === null)
403 console.error(error);
404 return; 405 return;
405 }
406 406
407 // Create a canvas to splice the images together. 407 // Create a canvas to splice the images together.
408 var canvas = createElement('canvas'); 408 var canvas = createElement('canvas');
409 var ctx = canvas.getContext('2d'); 409 var ctx = canvas.getContext('2d');
410 canvas.width = outlineRect.width; 410 canvas.width = outlineRect.width;
411 canvas.height = outlineRect.height; 411 canvas.height = outlineRect.height;
412 ctx.imageSmoothingEnabled = false; 412 ctx.imageSmoothingEnabled = false;
413 413
414 var promise = Promise.resolve(); 414 var promise = Promise.resolve();
415 if (this._model.outlineImage()) 415 if (this._model.outlineImage())
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 /** 450 /**
451 * @this {Emulation.DeviceModeView} 451 * @this {Emulation.DeviceModeView}
452 */ 452 */
453 function paintScreenshot() { 453 function paintScreenshot() {
454 var pageImage = new Image(); 454 var pageImage = new Image();
455 pageImage.src = 'data:image/png;base64,' + content; 455 pageImage.src = 'data:image/png;base64,' + content;
456 pageImage.onload = () => { 456 pageImage.onload = () => {
457 ctx.drawImage( 457 ctx.drawImage(
458 pageImage, visiblePageRect.left, visiblePageRect.top, Math.min(pag eImage.naturalWidth, screenRect.width), 458 pageImage, visiblePageRect.left, visiblePageRect.top, Math.min(pag eImage.naturalWidth, screenRect.width),
459 Math.min(pageImage.naturalHeight, screenRect.height)); 459 Math.min(pageImage.naturalHeight, screenRect.height));
460 var url = mainTarget && mainTarget.inspectedURL(); 460 var url = target.inspectedURL();
461 var fileName = url ? url.trimURL().removeURLFragment() : ''; 461 var fileName = url ? url.trimURL().removeURLFragment() : '';
462 if (this._model.type() === Emulation.DeviceModeModel.Type.Device) 462 if (this._model.type() === Emulation.DeviceModeModel.Type.Device)
463 fileName += Common.UIString('(%s)', this._model.device().title); 463 fileName += Common.UIString('(%s)', this._model.device().title);
464 // Trigger download. 464 // Trigger download.
465 var link = createElement('a'); 465 var link = createElement('a');
466 link.download = fileName + '.png'; 466 link.download = fileName + '.png';
467 link.href = canvas.toDataURL('image/png'); 467 link.href = canvas.toDataURL('image/png');
468 link.click(); 468 link.click();
469 }; 469 };
470 } 470 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 return Promise.resolve(); 565 return Promise.resolve();
566 } 566 }
567 567
568 /** 568 /**
569 * @param {number} size 569 * @param {number} size
570 */ 570 */
571 _onMarkerClick(size) { 571 _onMarkerClick(size) {
572 this._applyCallback.call(null, size); 572 this._applyCallback.call(null, size);
573 } 573 }
574 }; 574 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698