14 context.fillStyle = "red";
15 context.fillRect(0, 0, 100, 100);
17 property int paintCount:spyPaint.count
18 property int paintedCount:spyPainted.count
19 property int canvasSizeChangedCount:spyCanvasSizeChanged.count
20 property int tileSizeChangedCount:spyTileSizeChanged.count
21 property int renderInThreadChangedCount:spyRenderInThreadChanged.count
22 property int canvasWindowChangedCount:spyCanvasWindowChanged.count
23 property int renderTargetChangedCount:spyRenderTargetChanged.count
24 property int imageLoadedCount:spyImageLoaded.count
26 SignalSpy {id: spyPaint;target:c;signalName: "paint"}
27 SignalSpy {id: spyPainted;target:c;signalName: "painted"}
28 SignalSpy {id: spyCanvasSizeChanged;target:c;signalName: "canvasSizeChanged"}
29 SignalSpy {id: spyTileSizeChanged;target:c;signalName: "tileSizeChanged"}
30 SignalSpy {id: spyRenderInThreadChanged;target:c;signalName: "renderInThreadChanged"}
31 SignalSpy {id: spyCanvasWindowChanged;target:c;signalName: "canvasWindowChanged"}
32 SignalSpy {id: spyRenderTargetChanged;target:c;signalName: "renderTargetChanged"}
33 SignalSpy {id: spyImageLoaded;target:c;signalName: "imageLoaded"}
38 name: "Canvas"; when: windowShown
39 function test_canvasSize() {
40 var c = canvas.createObject();
43 //by default canvasSize is same with canvas' actual size
44 // when canvas size changes, canvasSize should be changed as well.
45 compare(c.canvasSize.width, c.width);
46 compare(c.canvasSize.height, c.height);
48 compare(c.canvasSize.width, 20);
49 compare(c.canvasSizeChangedCount, 1);
51 compare(c.canvasSizeChangedCount, 2);
52 compare(c.canvasSize.height, 5);
54 //change canvasSize manually, then canvasSize detaches from canvas
56 c.canvasSize.width = 100;
57 compare(c.canvasSizeChangedCount, 3);
58 compare(c.canvasSize.width, 100);
60 c.canvasSize.height = 50;
61 compare(c.canvasSizeChangedCount, 4);
62 compare(c.canvasSize.height, 50);
66 compare(c.canvasSizeChangedCount, 4);
67 compare(c.canvasSize.width, 100);
68 compare(c.canvasSize.height, 50);
71 compare(c.canvasSizeChangedCount, 4);
72 compare(c.canvasSize.width, 100);
73 compare(c.canvasSize.height, 50);
76 function test_tileSize() {
77 var c = canvas.createObject();
80 compare(c.tileSize.width, c.width);
81 compare(c.tileSize.height, c.height);
83 compare(c.tileSize.width, 20);
84 compare(c.tileSizeChangedCount, 1);
86 compare(c.tileSizeChangedCount, 2);
87 compare(c.tileSize.height, 5);
89 c.tileSize.width = 100;
90 compare(c.tileSizeChangedCount, 3);
91 compare(c.tileSize.width, 100);
93 c.tileSize.height = 50;
94 compare(c.tileSizeChangedCount, 4);
95 compare(c.tileSize.height, 50);
99 compare(c.tileSizeChangedCount, 4);
100 compare(c.tileSize.width, 100);
101 compare(c.tileSize.height, 50);
104 compare(c.tileSizeChangedCount, 4);
105 compare(c.tileSize.width, 100);
106 compare(c.tileSize.height, 50);
111 function test_canvasWindow() {
112 var c = canvas.createObject();
114 compare(c.canvasWindow.x, 0);
115 compare(c.canvasWindow.y, 0);
116 compare(c.canvasWindow.width, c.width);
117 compare(c.canvasWindow.height, c.height);
120 compare(c.canvasWindow.width, 20);
121 compare(c.canvasWindowChangedCount, 1);
123 compare(c.canvasWindowChangedCount, 2);
124 compare(c.canvasWindow.height, 5);
126 c.canvasWindow.x = 5;
127 c.canvasWindow.y = 6;
128 c.canvasWindow.width = 10;
129 c.canvasWindow.height =20;
130 compare(c.canvasWindowChangedCount, 6);
131 compare(c.canvasWindow.width, 10);
132 compare(c.canvasWindow.height, 20);
133 compare(c.canvasWindow.x, 5);
134 compare(c.canvasWindow.y, 6);
138 function test_renderTargetAndThread() {
139 var c = canvas.createObject();
142 compare(c.renderTarget, Canvas.FramebufferObject);
143 verify(!c.renderInThread);
144 c.renderTarget = Canvas.Image;
145 compare(c.renderTargetChangedCount, 1);
146 compare(c.renderInThreadChangedCount, 0);
148 compare(c.renderTarget, Canvas.Image);
149 verify(!c.renderInThread);
150 c.renderInThread = true;
151 verify(c.renderInThread);
152 compare(c.renderTargetChangedCount, 1);
153 compare(c.renderInThreadChangedCount, 1);
155 ignoreWarning("Canvas: render target does not support thread rendering, force to non-thread rendering mode.");
156 c.renderTarget = Canvas.FramebufferObject;
157 verify(!c.renderInThread);
158 compare(c.renderTargetChangedCount, 2);
159 compare(c.renderInThreadChangedCount, 2);
163 function test_save() {
164 var c = canvas.createObject();
167 c.renderTarget = Canvas.Image;
170 verify(c.save("c.png"));
171 c.loadImage("c.png");
173 compare(c.imageLoadedCount, 1);
174 verify(c.isImageLoaded("c.png"));
175 verify(!c.isImageLoading("c.png"));
176 verify(!c.isImageError("c.png"));
180 function test_toDataURL_data() {
181 return [{mimeType:"image/png"},
182 {mimeType:"image/bmp"},
183 {mimeType:"image/jpeg"},
184 {mimeType:"image/x-portable-pixmap"},
185 {mimeType:"image/tiff"},
186 {mimeType:"image/xpm"},
190 function test_toDataURL(data) {
191 var c = canvas.createObject();
194 c.renderTarget = Canvas.Image;
195 var ctx = c.getContext();
196 ctx.fillStyle = "red";
197 ctx.fillRect(0, 0, c.width, c.height);
201 var dataUrl = c.toDataURL();
202 verify(dataUrl != "data:,");
203 dataUrl = c.toDataURL("image/invalid");
204 verify(dataUrl == "data:,");
206 dataUrl = c.toDataURL(data.mimeType);
207 verify(dataUrl != "data:,");
209 ctx.fillStyle = "blue";
210 ctx.fillRect(0, 0, c.width, c.height);
214 var dataUrl2 = c.toDataURL(data.mimeType);
215 verify (dataUrl2 != "data:,");
216 verify (dataUrl2 != dataUrl);
220 function test_paint() {
221 var c = canvas.createObject();
224 c.renderTarget = Canvas.Image;
225 c.renderInThread = true;
226 var ctx = c.getContext();
227 ctx.fillRect(0, 0, c.width, c.height);
231 compare(c.paintedCount, 1);
232 compare(c.paintCount, 1);
236 function test_loadImage() {
237 var c = canvas.createObject();
240 c.loadImage("red.png");
242 compare(c.imageLoadedCount, 1);
243 verify(c.isImageLoaded("red.png"));
244 verify(!c.isImageLoading("red.png"));
245 verify(!c.isImageError("red.png"));
247 c.unloadImage("red.png");
248 verify(!c.isImageLoaded("red.png"));
249 verify(!c.isImageLoading("red.png"));
250 verify(!c.isImageError("red.png"));
255 function test_getContext() {
256 var c = canvas.createObject();
259 var ctx = c.getContext();
261 compare(ctx.canvas, c);
262 ctx = c.getContext('2d');
264 compare(ctx.canvas, c);
265 ctx = c.getContext('2D');
267 compare(ctx.canvas, c);
268 ctx = c.getContext('invalid');