blob: 569a470b4e430f51b7a7f9e5213e2655b58a36b0 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Canvas Incremental Repaint</title>
<style type="text/css" media="screen">
canvas {
width: 200px;
height: 150px;
border: 20px solid black;
}
</style>
<script type="text/javascript" charset="utf-8">
if (window.testRunner) {
testRunner.dumpAsText(true);
testRunner.waitUntilDone();
}
var appleImage;
function runRepaintTest()
{
if (window.testRunner) {
document.body.offsetTop;
testRunner.displayAndTrackRepaints();
repaintTest();
testRunner.notifyDone();
} else {
setTimeout(repaintTest, 0);
}
}
function initializeCanvas()
{
var canvas = document.getElementById('canvas1');
canvas.width = 170; // deliberately different from element size, for scaling
canvas.height = 125;
// prep for clearRect test
canvas = document.getElementById('canvas2');
var ctx = canvas.getContext('2d');
ctx.fillStyle = '#888888';
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
function repaintTest()
{
var canvas = document.getElementById('canvas1');
var ctx = canvas.getContext('2d');
// Test with default CTM
ctx.fillStyle = 'black';
ctx.strokeStyle = 'green';
ctx.lineWidth = 12;
ctx.save();
ctx.scale(1.5, 0.8);
ctx.fillRect(30, 40, 70, 80);
ctx.strokeRect(30, 40, 70, 80);
ctx.restore();
// Test clearRect
canvas = document.getElementById('canvas2');
ctx = canvas.getContext('2d');
// clearRect is affected by the transform, and does shadows
ctx.shadowOffsetX = 20;
ctx.shadowOffsetY = 20;
ctx.shadowBlur = 40;
ctx.shadowColor = '#0000AA';
ctx.translate(50, 10);
ctx.clearRect(10, 10, 80, 80);
// Test with stroke
canvas = document.getElementById('canvas3');
ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(100, 20);
ctx.bezierCurveTo(150, 20, 150, 120, 100, 120);
ctx.bezierCurveTo(50, 120, 50, 20, 100, 20);
ctx.closePath();
ctx.lineWidth = 20;
ctx.strokeStyle = 'black';
ctx.stroke();
// Test with thick stroke and transform, and shadow
canvas = document.getElementById('canvas4');
ctx = canvas.getContext('2d');
ctx.shadowOffsetX = 20;
ctx.shadowOffsetY = 20;
ctx.shadowBlur = 40;
ctx.shadowColor = 'blue'
ctx.lineWidth = 50;
ctx.rotate(Math.PI / 5);
ctx.scale(1.2, 1.2);
ctx.strokeRect(100, 0, 1, 1);
// Mitre test
canvas = document.getElementById('canvas5');
ctx = canvas.getContext('2d');
ctx.moveTo(15, 40);
ctx.lineTo(190, 60);
ctx.lineTo(15, 80);
ctx.lineWidth = 20;
ctx.strokeStyle = '#222222';
ctx.stroke();
// Text test
canvas = document.getElementById('canvas6');
ctx = canvas.getContext('2d');
ctx.font = "80px 'Times New Roman'";
ctx.lineWidth = 40;
ctx.scale(1, 0.9);
ctx.strokeStyle = 'black';
ctx.strokeText("WebKit", 20, 100);
ctx.fillStyle = 'green';
ctx.fillText("WebKit", 20, 100);
// drawImage test
canvas = document.getElementById('canvas7');
ctx = canvas.getContext('2d');
ctx.shadowOffsetX = 20;
ctx.shadowOffsetY = 20;
ctx.shadowBlur = 40;
ctx.shadowColor = 'blue';
ctx.translate(60, 0);
ctx.drawImage(appleImage, 10, 10, 100, 100);
// clip test
canvas = document.getElementById('canvas8');
ctx = canvas.getContext('2d');
ctx.shadowOffsetX = 20;
ctx.shadowOffsetY = 20;
ctx.shadowBlur = 40;
ctx.shadowColor = 'blue';
ctx.beginPath();
ctx.rect(50, 30, 80, 80);
ctx.closePath();
ctx.clip();
ctx.translate(40, 0);
ctx.drawImage(appleImage, 10, 10, 100, 100);
// ImageData test
canvas = document.getElementById('canvas9');
ctx = canvas.getContext('2d');
ctx.drawImage(appleImage, 10, 10, 100, 100);
var imageData = ctx.getImageData(15, 15, 90, 90);
// putImageData ignores shadow, transform and clip, but set the to test
ctx.shadowOffsetX = 20;
ctx.shadowOffsetY = 20;
ctx.shadowBlur = 40;
ctx.translate(160, 50);
ctx.beginPath();
ctx.rect(50, 30, 80, 80);
ctx.closePath();
ctx.clip();
ctx.putImageData(imageData, 150, 20);
}
function pageLoaded()
{
initializeCanvas();
appleImage = new Image();
appleImage.onload = function() {
runRepaintTest();
}
appleImage.src = "resources/apple.gif";
}
</script>
</head>
<body onload="pageLoaded()">
<canvas id="canvas1"></canvas>
<canvas id="canvas2"></canvas>
<canvas id="canvas3"></canvas><br>
<canvas id="canvas4"></canvas>
<canvas id="canvas5"></canvas>
<canvas id="canvas6"></canvas><br>
<canvas id="canvas7"></canvas>
<canvas id="canvas8"></canvas>
<canvas id="canvas9"></canvas>
</body>
</html>