]> git.proxmox.com Git - mirror_novnc.git/blame - tests/viewport.html
Enable noVNC to become Browserifiable
[mirror_novnc.git] / tests / viewport.html
CommitLineData
4245363c
JM
1<!DOCTYPE html>
2<html>
ec40268e 3 <head><title>Viewport Test</title>
a5df24b4 4 <link rel="stylesheet" href="viewport.css">
ec40268e
JM
5 <!--
6 <meta name="apple-mobile-web-app-capable" content="yes" />
7 <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
8 -->
9 <meta name=viewport content="width=device-width, initial-scale=1.0, user-scalable=no">
10 </head>
4245363c 11 <body>
54e7cbdf
JM
12 <div class="flex-layout">
13 <div>
14 Canvas:
15 <input id="move-selector" type="button" value="Move"
16 onclick="toggleMove();">
17 <br>
18 </div>
19 <div class="container flex-box">
20 <canvas id="canvas" class="canvas">
21 Canvas not supported.
22 </canvas>
23 <br>
24 </div>
25 <div>
26 <br>
27 Results:<br>
28 <textarea id="messages" style="font-size: 9;" cols=80 rows=8></textarea>
29 </div>
ec40268e 30 </div>
4245363c
JM
31 </body>
32
33 <!--
34 <script type='text/javascript'
35 src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
36 -->
37 <script src="../include/util.js"></script>
38 <script src="../include/webutil.js"></script>
39 <script src="../include/base64.js"></script>
2ea40fdf 40 <script src="../include/keysymdef.js"></script>
41 <script src="../include/keyboard.js"></script>
4245363c
JM
42 <script src="../include/input.js"></script>
43 <script src="../include/display.js"></script>
44 <script>
45 var msg_cnt = 0, iterations,
4245363c
JM
46 penDown = false, doMove = false,
47 inMove = false, lastPos = {},
54e7cbdf
JM
48 padW = 0, padH = 0,
49 display, ctx, keyboard, mouse;
4245363c
JM
50
51 var newline = "\n";
52 if (Util.Engine.trident) {
53 var newline = "<br>\n";
54 }
55
56 function message(str) {
57 console.log(str);
58 cell = $D('messages');
59 cell.innerHTML += msg_cnt + ": " + str + newline;
60 cell.scrollTop = cell.scrollHeight;
61 msg_cnt++;
62 }
63
64 function mouseButton(x, y, down, bmask) {
65 //msg = 'mouse x,y: ' + x + ',' + y + ' down: ' + down;
66 //msg += ' bmask: ' + bmask;
67 //message(msg);
68
69 if (doMove) {
70 if (down && !inMove) {
71 inMove = true;
72 lastPos = {'x': x, 'y': y};
4245363c
JM
73 } else if (!down && inMove) {
74 inMove = false;
54e7cbdf 75 //dirtyRedraw();
4245363c
JM
76 }
77 return;
78 }
79
80 if (down && ! penDown) {
81 penDown = true;
82 ctx.beginPath();
83 ctx.moveTo(x, y);
84 } else if (!down && penDown) {
85 penDown = false;
86 ctx.closePath();
87 }
88 }
89
90 function mouseMove(x, y) {
608e0f52 91 var deltaX, deltaY;
4245363c
JM
92
93 if (inMove) {
54e7cbdf
JM
94 //deltaX = x - lastPos.x; // drag viewport
95 deltaX = lastPos.x - x; // drag frame buffer
96 //deltaY = y - lastPos.y; // drag viewport
97 deltaY = lastPos.y - y; // drag frame buffer
98 lastPos = {'x': x, 'y': y};
99
636be753 100 display.viewportChangePos(deltaX, deltaY);
4245363c
JM
101 return;
102 }
103
104 if (penDown) {
105 ctx.lineTo(x, y);
106 ctx.stroke();
107 }
108 }
109
54e7cbdf
JM
110 function dirtyRedraw() {
111 if (inMove) {
112 // Wait for user to stop moving viewport
ec40268e
JM
113 return;
114 }
ec40268e 115
54e7cbdf 116 var d = display.getCleanDirtyReset();
4245363c 117
54e7cbdf
JM
118 for (i = 0; i < d.dirtyBoxes.length; i++) {
119 //showBox(d.dirtyBoxes[i], "dirty[" + i + "]: ");
120 drawArea(d.dirtyBoxes[i]);
4245363c
JM
121 }
122 }
123
54e7cbdf
JM
124 function drawArea(b) {
125 var data = [], pixel, x, y;
4245363c 126
54e7cbdf 127 //message("draw "+b.x+","+b.y+" ("+b.w+","+b.h+")");
4245363c 128
54e7cbdf
JM
129 for (var i = 0; i < b.w; i++) {
130 x = b.x + i;
131 for (var j = 0; j < b.h; j++) {
132 y = b.y + j;
133 pixel = (j * b.w * 4 + i * 4);
134 data[pixel + 0] = ((x * y) / 13) % 256;
135 data[pixel + 1] = ((x * y) + 392) % 256;
136 data[pixel + 2] = ((x + y) + 256) % 256;
4245363c
JM
137 data[pixel + 3] = 255;
138 }
139 }
140 //message("i: " + i + ", j: " + j + ", pixel: " + pixel);
54e7cbdf 141 display.blitImage(b.x, b.y, b.w, b.h, data, 0);
4245363c
JM
142 }
143
144 function toggleMove() {
145 if (doMove) {
146 doMove = false;
147 $D('move-selector').style.backgroundColor = "";
148 $D('move-selector').style.color = "";
149 } else {
150 doMove = true;
151 $D('move-selector').style.backgroundColor = "black";
152 $D('move-selector').style.color = "lightgray";
153 }
154 }
155
54e7cbdf
JM
156 function detectPad() {
157 var c = $D('canvas'), p = c.parentNode;
158 c.width = 10;
159 c.height = 10;
160 padW = c.offsetWidth - 10;
161 padH = c.offsetHeight - 10;
162 message("padW: " + padW + ", padH: " + padH);
163 }
ec40268e 164
54e7cbdf
JM
165 function doResize() {
166 var p = $D('canvas').parentNode;
167 message("doResize1: [" + (p.offsetWidth - padW) +
168 "," + (p.offsetHeight - padH) + "]");
636be753 169 display.viewportChangeSize(p.offsetWidth - padW, p.offsetHeight - padH);
a5df24b4
JM
170 /*
171 var pos, new_w, new_h;pos
172 pos = Util.getPosition($D('canvas').parentNode);
173 new_w = window.innerWidth - pos.x;
174 new_h = window.innerHeight - pos.y;
636be753 175 display.viewportChangeSize(new_w, new_h);
a5df24b4 176 */
54e7cbdf 177 }
ec40268e 178
4245363c 179 window.onload = function() {
54e7cbdf 180 detectPad();
a5df24b4 181
54e7cbdf
JM
182 display = new Display({'target': $D('canvas')});
183 display.resize(1600, 1024);
a5df24b4 184 display.set_viewport(true);
54e7cbdf 185 ctx = display.get_context();
a5df24b4 186
4245363c
JM
187 mouse = new Mouse({'target': $D('canvas'),
188 'onMouseButton': mouseButton,
189 'onMouseMove': mouseMove});
a5df24b4
JM
190 mouse.grab();
191
4245363c 192
54e7cbdf 193 Util.addEvent(window, 'resize', doResize);
a5df24b4
JM
194 // Shrink viewport for first resize call so that the
195 // scrollbars are disabled
636be753 196 display.viewportChangeSize(10, 10);
54e7cbdf
JM
197 setTimeout(doResize, 1);
198 setInterval(dirtyRedraw, 50);
4245363c 199
ec40268e
JM
200 message("Display initialized");
201 };
4245363c
JM
202 </script>
203</html>