Hide display object from RFB callers

This commit is contained in:
Pierre Ossman 2017-10-13 12:46:47 +02:00
parent 6929a0a183
commit b9854a5ca5
3 changed files with 72 additions and 38 deletions

View File

@ -1216,11 +1216,10 @@ var UI = {
var screen = UI.screenSize(); var screen = UI.screenSize();
if (screen && UI.connected && UI.rfb.get_display()) { if (screen && UI.connected) {
var display = UI.rfb.get_display();
var resizeMode = UI.getSetting('resize'); var resizeMode = UI.getSetting('resize');
display.set_scale(1); UI.rfb.set_scale(1);
// Make sure the viewport is adjusted first // Make sure the viewport is adjusted first
UI.updateViewClip(); UI.updateViewClip();
@ -1258,13 +1257,12 @@ var UI = {
var screen = UI.screenSize(); var screen = UI.screenSize();
if (!screen || !UI.connected || !UI.rfb.get_display()) { if (!screen || !UI.connected) {
return; return;
} }
var display = UI.rfb.get_display();
var downscaleOnly = resizeMode === 'downscale'; var downscaleOnly = resizeMode === 'downscale';
display.autoscale(screen.w, screen.h, downscaleOnly); UI.rfb.autoscale(screen.w, screen.h, downscaleOnly);
UI.fixScrollbars(); UI.fixScrollbars();
}, },
@ -1302,8 +1300,7 @@ var UI = {
updateViewClip: function() { updateViewClip: function() {
if (!UI.rfb) return; if (!UI.rfb) return;
var display = UI.rfb.get_display(); var cur_clip = UI.rfb.get_viewport();
var cur_clip = display.get_viewport();
var new_clip = UI.getSetting('view_clip'); var new_clip = UI.getSetting('view_clip');
var resizeSetting = UI.getSetting('resize'); var resizeSetting = UI.getSetting('resize');
@ -1316,7 +1313,7 @@ var UI = {
} }
if (cur_clip !== new_clip) { if (cur_clip !== new_clip) {
display.set_viewport(new_clip); UI.rfb.set_viewport(new_clip);
} }
var size = UI.screenSize(); var size = UI.screenSize();
@ -1324,7 +1321,7 @@ var UI = {
if (new_clip && size) { if (new_clip && size) {
// When clipping is enabled, the screen is limited to // When clipping is enabled, the screen is limited to
// the size of the browser window. // the size of the browser window.
display.viewportChangeSize(size.w, size.h); UI.rfb.viewportChangeSize(size.w, size.h);
UI.fixScrollbars(); UI.fixScrollbars();
} }
@ -1374,8 +1371,8 @@ var UI = {
// Check if viewport drag is possible. It is only possible // Check if viewport drag is possible. It is only possible
// if the remote display is clipping the client display. // if the remote display is clipping the client display.
if (UI.rfb.get_display().get_viewport() && if (UI.rfb.get_viewport() &&
UI.rfb.get_display().clippingDisplay()) { UI.rfb.clippingDisplay()) {
clipping = true; clipping = true;
} }

View File

@ -338,6 +338,21 @@ RFB.prototype = {
RFB.messages.clientCutText(this._sock, text); RFB.messages.clientCutText(this._sock, text);
}, },
autoscale: function (width, height, downscaleOnly) {
if (this._rfb_connection_state !== 'connected') { return; }
this._display.autoscale(width, height, downscaleOnly);
},
viewportChangeSize: function(width, height) {
if (this._rfb_connection_state !== 'connected') { return; }
this._display.viewportChangeSize(width, height);
},
clippingDisplay: function () {
if (this._rfb_connection_state !== 'connected') { return false; }
return this._display.clippingDisplay();
},
// Requests a change of remote desktop size. This message is an extension // Requests a change of remote desktop size. This message is an extension
// and may only be sent if we have received an ExtendedDesktopSize message // and may only be sent if we have received an ExtendedDesktopSize message
requestDesktopSize: function (width, height) { requestDesktopSize: function (width, height) {
@ -1478,6 +1493,8 @@ make_properties(RFB, [
['local_cursor', 'rw', 'bool'], // Request locally rendered cursor ['local_cursor', 'rw', 'bool'], // Request locally rendered cursor
['shared', 'rw', 'bool'], // Request shared mode ['shared', 'rw', 'bool'], // Request shared mode
['view_only', 'rw', 'bool'], // Disable client mouse/keyboard ['view_only', 'rw', 'bool'], // Disable client mouse/keyboard
['scale', 'rw', 'float'], // Display area scale factor
['viewport', 'rw', 'bool'], // Use viewport clipping
['xvp_password_sep', 'rw', 'str'], // Separator for XVP password fields ['xvp_password_sep', 'rw', 'str'], // Separator for XVP password fields
['disconnectTimeout', 'rw', 'int'], // Time (s) to wait for disconnection ['disconnectTimeout', 'rw', 'int'], // Time (s) to wait for disconnection
['wsProtocols', 'rw', 'arr'], // Protocols to use in the WebSocket connection ['wsProtocols', 'rw', 'arr'], // Protocols to use in the WebSocket connection
@ -1532,7 +1549,22 @@ RFB.prototype.set_view_only = function (view_only) {
} }
}; };
RFB.prototype.get_display = function () { return this._display; }; RFB.prototype.set_scale = function (scale) {
this._display.set_scale(scale);
};
RFB.prototype.get_scale = function () {
return this._display.get_scale();
};
RFB.prototype.set_viewport = function (viewport) {
this._display.set_viewport(viewport);
};
RFB.prototype.get_viewport = function () {
return this._display.get_viewport();
};
RFB.prototype.get_keyboard = function () { return this._keyboard; }; RFB.prototype.get_keyboard = function () { return this._keyboard; };
RFB.prototype.get_mouse = function () { return this._mouse; }; RFB.prototype.get_mouse = function () { return this._mouse; };

View File

@ -28,12 +28,14 @@ attribute mode is one of the following:
WO - write once WO - write once
| name | type | mode | default | description | name | type | mode | default | description
| ----------------- | ---- | ---- | ---------- | ------------ | ----------------- | ----- | ---- | ---------- | ------------
| target | DOM | WO | null | Canvas element for rendering (passed to Display, Mouse and Keyboard) | target | DOM | WO | null | Canvas element for rendering (passed to Display, Mouse and Keyboard)
| encrypt | bool | RW | false | Use TLS/SSL encryption | encrypt | bool | RW | false | Use TLS/SSL encryption
| local_cursor | bool | RW | false | Request locally rendered cursor | local_cursor | bool | RW | false | Request locally rendered cursor
| shared | bool | RW | true | Request shared VNC mode | shared | bool | RW | true | Request shared VNC mode
| view_only | bool | RW | false | Disable client mouse/keyboard | view_only | bool | RW | false | Disable client mouse/keyboard
| scale | float | RW | 1.0 | Display area scale factor
| viewport | bool | RW | false | Use viewport clipping
| xvp_password_sep | str | RW | '@' | Separator for XVP password fields | xvp_password_sep | str | RW | '@' | Separator for XVP password fields
| disconnectTimeout | int | RW | 3 | Time (in seconds) to wait for disconnection | disconnectTimeout | int | RW | 3 | Time (in seconds) to wait for disconnection
| wsProtocols | arr | RW | ['binary'] | Protocols to use in the WebSocket connection | wsProtocols | arr | RW | ['binary'] | Protocols to use in the WebSocket connection
@ -48,7 +50,7 @@ attributes, the RFB object has other methods that are available in the
object instance. object instance.
| name | parameters | description | name | parameters | description
| ------------------ | ---------------------------- | ------------ | ------------------ | ------------------------------ | ------------
| connect | (host, port, password, path) | Connect to the given host:port/path. Optional password and path. | connect | (host, port, password, path) | Connect to the given host:port/path. Optional password and path.
| disconnect | () | Disconnect | disconnect | () | Disconnect
| sendPassword | (passwd) | Send password after onPasswordRequired callback | sendPassword | (passwd) | Send password after onPasswordRequired callback
@ -59,7 +61,10 @@ object instance.
| xvpReset | () | Send XVP reset. | xvpReset | () | Send XVP reset.
| sendKey | (keysym, code, down) | Send a key press event. If down not specified, send a down and up event. | sendKey | (keysym, code, down) | Send a key press event. If down not specified, send a down and up event.
| clipboardPasteFrom | (text) | Send a clipboard paste event | clipboardPasteFrom | (text) | Send a clipboard paste event
| autoscale | (width, height, downscaleOnly) | Scale the display
| clippingDisplay | () | Check if the remote display is larger than the client display
| requestDesktopSize | (width, height) | Send a request to change the remote desktop size. | requestDesktopSize | (width, height) | Send a request to change the remote desktop size.
| viewportChangeSize | (width, height) | Change size of the viewport
## 3 Callbacks ## 3 Callbacks