| OLD | NEW |
| (Empty) |
| 1 <!-- | |
| 2 Copyright 2014 The Chromium Authors. All rights reserved. | |
| 3 Use of this source code is governed by a BSD-style license that can be | |
| 4 found in the LICENSE file. | |
| 5 --> | |
| 6 | |
| 7 <polymer-element name="ct-results-comparison-zoomer" attributes="expectedUrl act
ualUrl diffUrl position"> | |
| 8 <template> | |
| 9 <style> | |
| 10 :host { | |
| 11 background-color: silver; | |
| 12 border: 1px solid gray; | |
| 13 box-shadow: 0 0 5px rgba(0, 0, 0, 0.75); | |
| 14 display: flex; | |
| 15 pointer-events: none; | |
| 16 position: fixed; | |
| 17 top: 0; | |
| 18 width: 100%; | |
| 19 z-index: 1; | |
| 20 } | |
| 21 | |
| 22 :host > * { | |
| 23 flex: 1; | |
| 24 } | |
| 25 | |
| 26 .label { | |
| 27 background-color: white; | |
| 28 text-align: center; | |
| 29 } | |
| 30 | |
| 31 .container { | |
| 32 border: 1px solid gray; | |
| 33 height: 400px; | |
| 34 line-height: 0; | |
| 35 } | |
| 36 | |
| 37 .container > img { | |
| 38 display: none; | |
| 39 } | |
| 40 </style> | |
| 41 | |
| 42 <div> | |
| 43 <div class="label">Expected</div> | |
| 44 <div id="expectedZoomer" class="container"> | |
| 45 <img src="{{ expectedUrl }}"> | |
| 46 <canvas></canvas> | |
| 47 </div> | |
| 48 </div> | |
| 49 | |
| 50 <div> | |
| 51 <div class="label">Actual</div> | |
| 52 <div id="actualZoomer" class="container"> | |
| 53 <img src="{{ actualUrl }}"> | |
| 54 <canvas></canvas> | |
| 55 </div> | |
| 56 </div> | |
| 57 | |
| 58 <div> | |
| 59 <div class="label">Diff</div> | |
| 60 <div id="diffZoomer" class="container"> | |
| 61 <img src="{{ diffUrl }}"> | |
| 62 <canvas></canvas> | |
| 63 </div> | |
| 64 </div> | |
| 65 </template> | |
| 66 <script> | |
| 67 (function() { | |
| 68 var kResultWidth = 800; | |
| 69 var kResultHeight = 600; | |
| 70 var kZoomFactor = 6; | |
| 71 var kZoomedResultWidth = kResultWidth * kZoomFactor; | |
| 72 var kZoomedResultHeight = kResultHeight * kZoomFactor; | |
| 73 | |
| 74 Polymer({ | |
| 75 expectedUrl: '', | |
| 76 actualUrl: '', | |
| 77 diffUrl: '', | |
| 78 position: null, | |
| 79 _drawScheduled: false, | |
| 80 | |
| 81 positionChanged: function() { | |
| 82 if (!this._drawScheduled) { | |
| 83 this._drawScheduled = true; | |
| 84 this.async(this._drawAll); | |
| 85 } | |
| 86 }, | |
| 87 | |
| 88 _drawAll: function() { | |
| 89 this._drawScheduled = false; | |
| 90 | |
| 91 if (!this.position) | |
| 92 return; | |
| 93 | |
| 94 this._draw(this.$.expectedZoomer); | |
| 95 this._draw(this.$.actualZoomer); | |
| 96 this._draw(this.$.diffZoomer); | |
| 97 }, | |
| 98 | |
| 99 _draw: function(imageContainer) { | |
| 100 var canvas = imageContainer.querySelector('canvas'); | |
| 101 canvas.width = imageContainer.clientWidth; | |
| 102 canvas.height = imageContainer.clientHeight; | |
| 103 this._drawCanvas(canvas.getContext('2d'), imageContainer); | |
| 104 }, | |
| 105 | |
| 106 _drawCanvas: function(context, imageContainer) { | |
| 107 context.imageSmoothingEnabled = false; | |
| 108 context.translate(imageContainer.clientWidth / 2, imageContainer.clientH
eight / 2); | |
| 109 context.translate(-this.position.x * kZoomedResultWidth, -this.position.
y * kZoomedResultHeight); | |
| 110 context.strokeRect(-1.5, -1.5, kZoomedResultWidth + 2, kZoomedResultHeig
ht + 2); | |
| 111 context.scale(kZoomFactor, kZoomFactor); | |
| 112 context.drawImage(imageContainer.querySelector('img'), 0, 0); | |
| 113 }, | |
| 114 }); | |
| 115 })(); | |
| 116 </script> | |
| 117 </polymer-element> | |
| OLD | NEW |