| <!DOCTYPE HTML> |
| <html> |
| <body> |
| <script src="../../resources/js-test-pre.js"></script> |
| <script type="text/javascript" src="canvas-blending-helpers.js"></script> |
| <script type="text/javascript"> |
| |
| description("Series of tests to ensure correct results on applying different blend modes when drawing with clipped regions."); |
| |
| var context; |
| function actualColor(x, y) { |
| return context.getImageData(x, y, 1, 1).data; |
| } |
| |
| function checkBlendModeResult(i, context, sigma) { |
| var expectedColor = blendColors([129 / 255, 1, 129 / 255, 1], [1, 129 / 255, 129 / 255, 1], i); |
| var ac = "actualColor(0, 0)"; |
| shouldBeCloseTo(ac + "[0]", 0, sigma); |
| shouldBeCloseTo(ac + "[1]", 0, sigma); |
| shouldBeCloseTo(ac + "[2]", 0, sigma); |
| shouldBeCloseTo(ac + "[3]", 0, sigma); |
| |
| ac = "actualColor(5, 5)"; |
| shouldBeCloseTo(ac + "[0]", expectedColor[0], sigma); |
| shouldBeCloseTo(ac + "[1]", expectedColor[1], sigma); |
| shouldBeCloseTo(ac + "[2]", expectedColor[2], sigma); |
| shouldBeCloseTo(ac + "[3]", expectedColor[3], sigma); |
| } |
| |
| function runTest(width, height) { |
| var canvas = document.createElement("canvas"); |
| var sigma = 5; |
| canvas.width = width; |
| canvas.height = height; |
| context = canvas.getContext("2d"); |
| document.body.appendChild(canvas); |
| |
| for (var i = 0; i < blendModes.length; ++i) { |
| debug("Testing blend mode " + blendModes[i]); |
| |
| context.clearRect(0, 0, 10, 10); |
| context.save(); |
| context.beginPath(); |
| context.moveTo(3, 3); |
| context.lineTo(3, 7); |
| context.lineTo(7, 7); |
| context.lineTo(7, 3); |
| context.lineTo(3, 3); |
| context.clip(); |
| |
| drawBackdropColorInContext(context); |
| context.globalCompositeOperation = blendModes[i]; |
| drawSourceColorInContext(context); |
| checkBlendModeResult(i, context, sigma); |
| context.restore(); |
| debug(''); |
| } |
| } |
| |
| debug('Running test in non accelerated mode\n'); |
| runTest(10, 10); |
| debug('Running test in hardware accelerated mode\n'); |
| runTest(100, 100); |
| |
| </script> |
| <script src="../../resources/js-test-post.js"></script> |
| </body> |
| </html> |