Render PNG images in order. Update TODO.
This commit is contained in:
parent
3954ae149a
commit
6a52558dd8
45
docs/TODO
45
docs/TODO
|
@ -1,9 +1,50 @@
|
||||||
- Make C version of wsproxy.py
|
Medium Term:
|
||||||
|
|
||||||
|
- Implement Cursor pseudo-encoding (CSS cursor)
|
||||||
|
http://en.wikipedia.org/wiki/ICO_(file_format)
|
||||||
|
https://developer.mozilla.org/en/Using_URL_values_for_the_cursor_property
|
||||||
|
|
||||||
- Implement UI option for VNC shared mode.
|
- Implement UI option for VNC shared mode.
|
||||||
|
|
||||||
- implement tight and ZRLE encoding
|
- Status bar buttons:
|
||||||
|
- Isolate menu UI in DefaultControls.js
|
||||||
|
- Icons in status area upper left
|
||||||
|
- Dialogs float over canvas
|
||||||
|
- Turn off events while menu open (but still update display)
|
||||||
|
- Explanatory hover text over buttons
|
||||||
|
|
||||||
|
- Connect/disconnect button
|
||||||
|
|
||||||
|
- Configuration menu:
|
||||||
|
- Store in cookies
|
||||||
|
- Items (move to public settings):
|
||||||
|
- Host
|
||||||
|
- Port
|
||||||
|
- Password
|
||||||
|
- Encrypt
|
||||||
|
- TrueColor
|
||||||
|
- speed vs. bandwidth selection
|
||||||
|
- b64encoding
|
||||||
|
- shared mode
|
||||||
|
|
||||||
|
- Keyboard menu:
|
||||||
|
- Send CtrlAltDel
|
||||||
|
- Ctrl Lock, Alt Lock, SysRq Lock
|
||||||
|
- Highlight menu icon when keys are locked
|
||||||
|
|
||||||
|
- Clipboard button -> popup:
|
||||||
|
- text, clear and send buttons
|
||||||
|
|
||||||
|
- password popup:
|
||||||
|
- when none set, but password required
|
||||||
|
- session only, should not store in cookie
|
||||||
|
|
||||||
|
|
||||||
|
Longer Term:
|
||||||
|
|
||||||
- Get web-socket-js RFC2817 proxying working again.
|
- Get web-socket-js RFC2817 proxying working again.
|
||||||
|
|
||||||
- Support for Spice protocol.
|
- Support for Spice protocol.
|
||||||
|
|
||||||
|
- Implement tight and ZRLE encoding
|
||||||
|
|
||||||
|
|
39
vnc.js
39
vnc.js
|
@ -54,6 +54,15 @@ RFB = {
|
||||||
/*
|
/*
|
||||||
* External interface variables and methods
|
* External interface variables and methods
|
||||||
*/
|
*/
|
||||||
|
host : '',
|
||||||
|
port : 5900,
|
||||||
|
password : '',
|
||||||
|
encrypt : true,
|
||||||
|
true_color : false,
|
||||||
|
|
||||||
|
b64encode : true, // false means UTF-8 on the wire
|
||||||
|
//b64encode : false, // false means UTF-8 on the wire
|
||||||
|
|
||||||
clipboardFocus : false,
|
clipboardFocus : false,
|
||||||
|
|
||||||
// In preference order
|
// In preference order
|
||||||
|
@ -195,9 +204,8 @@ clipboardPasteFrom: function (text) {
|
||||||
|
|
||||||
ws : null, // Web Socket object
|
ws : null, // Web Socket object
|
||||||
sendID : null,
|
sendID : null,
|
||||||
|
scanID : null, // TIGHT_PNG render image scanner
|
||||||
use_seq : false,
|
use_seq : false,
|
||||||
b64encode : true, // false means UTF-8 on the wire
|
|
||||||
//b64encode : false, // false means UTF-8 on the wire
|
|
||||||
|
|
||||||
// Receive and send queues
|
// Receive and send queues
|
||||||
RQ : [], // Receive Queue
|
RQ : [], // Receive Queue
|
||||||
|
@ -221,10 +229,10 @@ FBU : {
|
||||||
height : 0,
|
height : 0,
|
||||||
encoding : 0,
|
encoding : 0,
|
||||||
subencoding : -1,
|
subencoding : -1,
|
||||||
background : null
|
background : null,
|
||||||
|
imgs : [] // TIGHT_PNG image queue
|
||||||
},
|
},
|
||||||
|
|
||||||
true_color : false,
|
|
||||||
fb_Bpp : 4,
|
fb_Bpp : 4,
|
||||||
fb_depth : 3,
|
fb_depth : 3,
|
||||||
|
|
||||||
|
@ -237,13 +245,10 @@ ct_length : 0,
|
||||||
|
|
||||||
shared : 1,
|
shared : 1,
|
||||||
check_rate : 217,
|
check_rate : 217,
|
||||||
|
scan_imgs_rate : 100,
|
||||||
req_rate : 1413,
|
req_rate : 1413,
|
||||||
last_req : 0,
|
last_req : 0,
|
||||||
|
|
||||||
host : '',
|
|
||||||
port : 5900,
|
|
||||||
password : '',
|
|
||||||
|
|
||||||
canvasID : 'VNC_canvas',
|
canvasID : 'VNC_canvas',
|
||||||
fb_width : 0,
|
fb_width : 0,
|
||||||
fb_height : 0,
|
fb_height : 0,
|
||||||
|
@ -457,6 +462,7 @@ init_msg: function () {
|
||||||
|
|
||||||
/* Start pushing/polling */
|
/* Start pushing/polling */
|
||||||
RFB.checkEvents.delay(RFB.check_rate);
|
RFB.checkEvents.delay(RFB.check_rate);
|
||||||
|
RFB.scan_tight_imgs.delay(RFB.scan_imgs_rate)
|
||||||
|
|
||||||
RFB.updateState('normal', "Connected to: " + RFB.fb_name);
|
RFB.updateState('normal', "Connected to: " + RFB.fb_name);
|
||||||
break;
|
break;
|
||||||
|
@ -914,12 +920,16 @@ display_tight_png: function() {
|
||||||
//console.log(" png, RQ.length: " + RQ.length + ", clength[0]: " + clength[0] + ", clength[1]: " + clength[1]);
|
//console.log(" png, RQ.length: " + RQ.length + ", clength[0]: " + clength[0] + ", clength[1]: " + clength[1]);
|
||||||
RQ.shiftBytes(1 + clength[0]); // shift off ctl + compact length
|
RQ.shiftBytes(1 + clength[0]); // shift off ctl + compact length
|
||||||
img = new Image();
|
img = new Image();
|
||||||
|
img.onload = RFB.scan_tight_imgs;
|
||||||
|
FBU.imgs.push([img, FBU.x, FBU.y]);
|
||||||
img.src = "data:image/" + cmode +
|
img.src = "data:image/" + cmode +
|
||||||
RFB.extract_data_uri(RQ.shiftBytes(clength[1]));
|
RFB.extract_data_uri(RQ.shiftBytes(clength[1]));
|
||||||
|
/*
|
||||||
img.onload = (function () {
|
img.onload = (function () {
|
||||||
var x = FBU.x, y = FBU.y, me = img;
|
var x = FBU.x, y = FBU.y, me = img;
|
||||||
return function () { Canvas.ctx.drawImage(me, x, y); };
|
return function () { Canvas.ctx.drawImage(me, x, y); };
|
||||||
})();
|
})();
|
||||||
|
*/
|
||||||
img = null;
|
img = null;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -938,6 +948,18 @@ extract_data_uri : function (arr) {
|
||||||
return ";base64," + Base64.encode(arr);
|
return ";base64," + Base64.encode(arr);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
scan_tight_imgs : function () {
|
||||||
|
var i, imgs;
|
||||||
|
if (RFB.state === 'normal') {
|
||||||
|
imgs = RFB.FBU.imgs;
|
||||||
|
while ((imgs.length > 0) && (imgs[0][0].complete)) {
|
||||||
|
img = imgs.shift();
|
||||||
|
Canvas.ctx.drawImage(img[0], img[1], img[2]);
|
||||||
|
}
|
||||||
|
RFB.scan_tight_imgs.delay(RFB.scan_imgs_rate);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
set_desktopsize : function () {
|
set_desktopsize : function () {
|
||||||
console.log(">> set_desktopsize");
|
console.log(">> set_desktopsize");
|
||||||
RFB.fb_width = RFB.FBU.width;
|
RFB.fb_width = RFB.FBU.width;
|
||||||
|
@ -1444,6 +1466,7 @@ init_vars: function () {
|
||||||
RFB.FBU.subrects = 0; // RRE and HEXTILE
|
RFB.FBU.subrects = 0; // RRE and HEXTILE
|
||||||
RFB.FBU.lines = 0; // RAW
|
RFB.FBU.lines = 0; // RAW
|
||||||
RFB.FBU.tiles = 0; // HEXTILE
|
RFB.FBU.tiles = 0; // HEXTILE
|
||||||
|
RFB.FBU.imgs = []; // TIGHT_PNG image queue
|
||||||
RFB.mouse_buttonmask = 0;
|
RFB.mouse_buttonmask = 0;
|
||||||
RFB.mouse_arr = [];
|
RFB.mouse_arr = [];
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue