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 |