1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
description("This test ensures that paths are correctly handled over save/restore boundaries");
function dataToArray(data) {
var result = new Array(data.length)
for (var i = 0; i < data.length; i++)
result[i] = data[i];
return result;
}
function getPixel(x, y) {
var data = context.getImageData(x,y,1,1);
if (!data) // getImageData failed, which should never happen
return [-1,-1,-1,-1];
return dataToArray(data.data);
}
function pixelShouldBe(x, y, colour) {
shouldBe("getPixel(" + [x, y] +")", "["+colour+"]");
}
var canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;
var context = canvas.getContext("2d");
context.fillStyle = "red";
context.fillRect(0,0,100,100);
context.fillStyle = "green";
// Test translate
context.beginPath();
context.save();
context.translate(100, 100);
context.rect(-100, -100, 50, 50);
context.restore();
context.fill();
pixelShouldBe(25, 25, [0, 128, 0, 255]);
// Test scale
context.beginPath();
context.save();
context.scale(2, 2);
context.rect(25, 0,25,25);
context.restore();
context.fill();
pixelShouldBe(75, 25, [0, 128, 0, 255]);
pixelShouldBe(75, 75, [255, 0, 0, 255]);
// Test rotate
context.beginPath();
context.save();
context.rotate(90/180 * Math.PI);
context.rect(50, -50, 50, 50);
context.restore();
context.fill();
pixelShouldBe(25, 75, [0, 128, 0, 255]);
pixelShouldBe(75, 75, [255, 0, 0, 255]);
// Test transform
context.beginPath();
context.save();
context.transform(1, 0, 0, 1, 50, 50);
context.rect(0, 0, 50, 50);
context.restore();
context.fill();
pixelShouldBe(75, 75, [0, 128, 0, 255]);
|