OLD | NEW |
| (Empty) |
1 <!doctype html> | |
2 <html> | |
3 <head> | |
4 <title>Check repaint region of fillRect() and drawImage() with different com
posite modes.</title> | |
5 <style type="text/css"> | |
6 body { margin: 5px; font-family: arial,verdana,helvetica; background: #fff
; } | |
7 canvas { border: 1px solid #999; } | |
8 div { margin: 10px; } | |
9 #output h1 { font-size: medium; font-weight: normal; } | |
10 #output h2 { font-size: small; font-weight: normal; } | |
11 #output div { font-size: small; margin: 0px; } | |
12 #output .pass { color: green; } | |
13 #output .fail { color: rgb(255, 0, 0); } | |
14 #output .error { color: rgb(255, 0, 64); } | |
15 td { padding: 2px 5px; } | |
16 table { border-collapse: collapse; } | |
17 </style> | |
18 </head> | |
19 <body> | |
20 <div>Test Results</div> | |
21 <div><table id='outputtable'></table></div> | |
22 <div>Test Image</div> | |
23 <div><img id = "image" src="data:image/png;base64, | |
24 iVBORw0KGgoAAAANSUhEUgAAAJYAAAA8CAIAAAAL5NQ9AAAACXBIWXMAAAsTAAALEwEAmpwY | |
25 AAAAB3RJTUUH2woaBQc4oLEFpAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeB | |
26 DhcAAACMSURBVHja7dNBEYAgFEVRPhHMYgAzUIsmVnFvB/fsoQb+ObfBmzMvxneW1D1vzz2w | |
27 FiEUQiFEKIRCKIQIhVAIhRChEAqhECIUQiEUQoRCKIRCiFAIhVAIEep3xTWTLzzu5oVCKIRC | |
28 iFAIhVAIEQqhEAohQiEUQiFEKIRCKIQIhVAIhRChEAqhECLUZi3VEwcBMGr1NgAAAABJRU5E | |
29 rkJggg== | |
30 "></div> | |
31 <div>Test Canvas</div> | |
32 <div><canvas id = "source-canvas"></canvas></div> | |
33 <div>Test Video</div> | |
34 <div><video id="video"> | |
35 <source src="resources/canvas_video.mp4" type='video/mp4' /> | |
36 <source src="resources/canvas_video.webm" type='video/webm' /> | |
37 <source src="resources/canvas_video.ogv" type='video/ogg' /> | |
38 </video></div> | |
39 <script src="../repaint/resources/text-based-repaint.js"></script> | |
40 <script type="application/x-javascript"> | |
41 // These map to the rows of the table | |
42 var compositeTypes = [ | |
43 'source-over','source-in','source-out','source-atop', | |
44 'destination-over','destination-in','destination-out','destination-atop', | |
45 'lighter','copy','xor' | |
46 ]; | |
47 | |
48 // These map to the columns of the table | |
49 var testNames = [ | |
50 'solid color', 'image', 'canvas', 'video' | |
51 ]; | |
52 | |
53 function createOutputTable() { | |
54 var tableEl = document.getElementById('outputtable'); | |
55 var row = tableEl.insertRow(-1); | |
56 var cell = row.insertCell(-1); | |
57 var label; | |
58 for (var j = 0; j < testNames.length; j++) { | |
59 cell = row.insertCell(-1); | |
60 label = document.createTextNode(testNames[j]); | |
61 cell.appendChild(label); | |
62 } | |
63 for (var i = 0; i < compositeTypes.length; i++) { | |
64 row = tableEl.insertRow(-1); | |
65 cell = row.insertCell(-1); | |
66 label = document.createTextNode(compositeTypes[i]); | |
67 cell.appendChild(label); | |
68 for (var j = 0; j < testNames.length; j++) { | |
69 var canvas = document.createElement('canvas'); | |
70 canvas.width = 130; | |
71 canvas.height = 40; | |
72 canvas.id = compositeTypes[i] + testNames[j]; | |
73 cell = row.insertCell(-1); | |
74 cell.appendChild(canvas); | |
75 } | |
76 } | |
77 } | |
78 | |
79 function getContext(compositeIndex, testIndex) { | |
80 var id = compositeTypes[compositeIndex] + testNames[testIndex]; | |
81 var context = document.getElementById(id).getContext('2d'); | |
82 return context; | |
83 } | |
84 | |
85 function setupContext(context) { | |
86 context.fillStyle = 'blue'; | |
87 context.fillRect(5, 5, 120, 30); | |
88 context.beginPath(); | |
89 context.moveTo(0, 0); | |
90 context.lineTo(0, 45); | |
91 context.lineTo(80, 45); | |
92 context.lineTo(80, 0); | |
93 context.clip(); | |
94 context.translate(40, -10); | |
95 context.scale(0.4, 0.6); | |
96 context.rotate(Math.PI / 8); | |
97 context.translate(-10, -10); | |
98 } | |
99 | |
100 function prepareRepaintTest() { | |
101 if (window.testRunner) | |
102 testRunner.dumpAsText(); | |
103 createOutputTable(); | |
104 for (var i = 0; i < compositeTypes.length; i++) { | |
105 for (var j = 0; j < testNames.length; j++) { | |
106 var context = getContext(i, j); | |
107 context.save(); | |
108 setupContext(context); | |
109 } | |
110 } | |
111 } | |
112 | |
113 function drawRect(context) { | |
114 context.fillStyle = 'green'; | |
115 context.fillRect(10, 10, 150, 60); | |
116 } | |
117 | |
118 function drawImage(context) { | |
119 context.drawImage(document.getElementById('image'), 10, 10); | |
120 } | |
121 | |
122 function drawCanvas(context) { | |
123 context.drawImage(document.getElementById('source-canvas'), 10, 10); | |
124 } | |
125 | |
126 function drawVideo(context) { | |
127 context.drawImage(document.getElementById('video'), 10, 10); | |
128 } | |
129 | |
130 // callback from text-based-repaint.js | |
131 function repaintTest() { | |
132 for (var i = 0; i < compositeTypes.length; i++) { | |
133 for (var j = 0; j < testNames.length; j++) { | |
134 var context = getContext(i, j); | |
135 context.globalCompositeOperation = compositeTypes[i]; | |
136 switch (testNames[j]) { | |
137 case 'solid color': | |
138 drawRect(context); | |
139 break; | |
140 case 'image': | |
141 drawImage(context); | |
142 break; | |
143 case 'canvas': | |
144 drawCanvas(context); | |
145 break; | |
146 case 'video': | |
147 drawVideo(context); | |
148 } | |
149 context.restore(); | |
150 } | |
151 } | |
152 // Because canvas invalidations are processed at the end of the current ta
sk, | |
153 // the repaint test has to end in a subsequent task in order to capture th
e repaint. | |
154 setTimeout(finishRepaintTest, 0); | |
155 } | |
156 | |
157 // we can start this test after the video can be played. | |
158 function startTest() { | |
159 video.removeEventListener("playing", startTest, true); | |
160 prepareRepaintTest(); | |
161 runRepaintTest(); | |
162 } | |
163 | |
164 var video = document.getElementById("video"); | |
165 video.addEventListener("playing", startTest, true); | |
166 video.play(); | |
167 | |
168 var imageElement = document.getElementById('image'); | |
169 var canvas = document.getElementById('source-canvas'); | |
170 canvas.width = imageElement.width; | |
171 canvas.height = imageElement.height; | |
172 var context = canvas.getContext('2d'); | |
173 context.drawImage(imageElement, 0, 0); | |
174 | |
175 window.testIsAsync = true; | |
176 </script> | |
177 </body> | |
178 </html> | |
OLD | NEW |