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 } |
| 20 |
| 21 :host > * { |
| 22 flex: 1; |
| 23 } |
| 24 |
| 25 .label { |
| 26 background-color: white; |
| 27 text-align: center; |
| 28 } |
| 29 |
| 30 .container { |
| 31 border: 1px solid gray; |
| 32 height: 400px; |
| 33 line-height: 0; |
| 34 } |
| 35 |
| 36 .container > img { |
| 37 display: none; |
| 38 } |
| 39 </style> |
| 40 |
| 41 <div> |
| 42 <div class="label">Expected</div> |
| 43 <div id="expectedZoomer" class="container"> |
| 44 <img src="{{ expectedUrl }}"> |
| 45 <canvas></canvas> |
| 46 </div> |
| 47 </div> |
| 48 |
| 49 <div> |
| 50 <div class="label">Actual</div> |
| 51 <div id="actualZoomer" class="container"> |
| 52 <img src="{{ actualUrl }}"> |
| 53 <canvas></canvas> |
| 54 </div> |
| 55 </div> |
| 56 |
| 57 <div> |
| 58 <div class="label">Diff</div> |
| 59 <div id="diffZoomer" class="container"> |
| 60 <img src="{{ diffUrl }}"> |
| 61 <canvas></canvas> |
| 62 </div> |
| 63 </div> |
| 64 </template> |
| 65 <script> |
| 66 (function() { |
| 67 var kResultWidth = 800; |
| 68 var kResultHeight = 600; |
| 69 var kZoomFactor = 6; |
| 70 var kZoomedResultWidth = kResultWidth * kZoomFactor; |
| 71 var kZoomedResultHeight = kResultHeight * kZoomFactor; |
| 72 |
| 73 Polymer({ |
| 74 expectedUrl: '', |
| 75 actualUrl: '', |
| 76 diffUrl: '', |
| 77 position: null, |
| 78 _drawScheduled: false, |
| 79 |
| 80 positionChanged: function() { |
| 81 if (!this._drawScheduled) { |
| 82 this._drawScheduled = true; |
| 83 this.async(this._drawAll); |
| 84 } |
| 85 }, |
| 86 |
| 87 _drawAll: function() { |
| 88 this._drawScheduled = false; |
| 89 |
| 90 if (!this.position) |
| 91 return; |
| 92 |
| 93 this._draw(this.$.expectedZoomer); |
| 94 this._draw(this.$.actualZoomer); |
| 95 this._draw(this.$.diffZoomer); |
| 96 }, |
| 97 |
| 98 _draw: function(imageContainer) { |
| 99 var canvas = imageContainer.querySelector('canvas'); |
| 100 canvas.width = imageContainer.clientWidth; |
| 101 canvas.height = imageContainer.clientHeight; |
| 102 |
| 103 var ctx = canvas.getContext('2d'); |
| 104 ctx.imageSmoothingEnabled = false; |
| 105 ctx.translate(imageContainer.clientWidth / 2, imageContainer.clientHeigh
t / 2); |
| 106 ctx.translate(-this.position.y * kZoomedResultWidth, -this.position.x *
kZoomedResultHeight); |
| 107 ctx.strokeRect(-1.5, -1.5, kZoomedResultWidth + 2, kZoomedResultHeight +
2); |
| 108 ctx.scale(kZoomFactor, kZoomFactor); |
| 109 ctx.drawImage(imageContainer.querySelector('img'), 0, 0); |
| 110 }, |
| 111 }); |
| 112 })(); |
| 113 </script> |
| 114 </polymer-element> |
OLD | NEW |