implement remote cursor rendering
This commit is contained in:
parent
edc7520e27
commit
88de0610ad
|
|
@ -67,7 +67,7 @@ Please tweet [@noVNC](http://www.twitter.com/noVNC) if you do.
|
||||||
* Supports all modern browsers including mobile (iOS, Android)
|
* Supports all modern browsers including mobile (iOS, Android)
|
||||||
* Supported VNC encodings: raw, copyrect, rre, hextile, tight, tightPNG
|
* Supported VNC encodings: raw, copyrect, rre, hextile, tight, tightPNG
|
||||||
* Supports scaling, clipping and resizing the desktop
|
* Supports scaling, clipping and resizing the desktop
|
||||||
* Local cursor rendering
|
* Local or remote cursor rendering
|
||||||
* Clipboard copy/paste
|
* Clipboard copy/paste
|
||||||
* Translations
|
* Translations
|
||||||
* Touch gestures for emulating common mouse actions
|
* Touch gestures for emulating common mouse actions
|
||||||
|
|
|
||||||
13
core/rfb.js
13
core/rfb.js
|
|
@ -285,6 +285,7 @@ export default class RFB extends EventTargetMixin {
|
||||||
this.focusOnClick = true;
|
this.focusOnClick = true;
|
||||||
|
|
||||||
this._viewOnly = false;
|
this._viewOnly = false;
|
||||||
|
this._remoteCursor = false;
|
||||||
this._clipViewport = false;
|
this._clipViewport = false;
|
||||||
this._scaleViewport = false;
|
this._scaleViewport = false;
|
||||||
this._resizeSession = false;
|
this._resizeSession = false;
|
||||||
|
|
@ -315,6 +316,16 @@ export default class RFB extends EventTargetMixin {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get remoteCursor() { return this._remoteCursor; }
|
||||||
|
set remoteCursor(remoteCursor) {
|
||||||
|
this._remoteCursor = remoteCursor;
|
||||||
|
|
||||||
|
this._cursor.setVisibility(!remoteCursor);
|
||||||
|
if (this._rfbConnectionState === "connected") {
|
||||||
|
this._sendEncodings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
get capabilities() { return this._capabilities; }
|
get capabilities() { return this._capabilities; }
|
||||||
|
|
||||||
get touchButton() { return 0; }
|
get touchButton() { return 0; }
|
||||||
|
|
@ -2072,7 +2083,7 @@ export default class RFB extends EventTargetMixin {
|
||||||
encs.push(encodings.pseudoEncodingDesktopName);
|
encs.push(encodings.pseudoEncodingDesktopName);
|
||||||
encs.push(encodings.pseudoEncodingExtendedClipboard);
|
encs.push(encodings.pseudoEncodingExtendedClipboard);
|
||||||
|
|
||||||
if (this._fbDepth == 24) {
|
if (this._fbDepth == 24 && !this._remoteCursor) {
|
||||||
encs.push(encodings.pseudoEncodingVMwareCursor);
|
encs.push(encodings.pseudoEncodingVMwareCursor);
|
||||||
encs.push(encodings.pseudoEncodingCursor);
|
encs.push(encodings.pseudoEncodingCursor);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,8 @@ const useFallback = !supportsCursorURIs || isTouchDevice;
|
||||||
|
|
||||||
export default class Cursor {
|
export default class Cursor {
|
||||||
constructor() {
|
constructor() {
|
||||||
this._target = null;
|
this._target = null;
|
||||||
|
this._visible = true;
|
||||||
|
|
||||||
this._canvas = document.createElement('canvas');
|
this._canvas = document.createElement('canvas');
|
||||||
|
|
||||||
|
|
@ -109,6 +110,15 @@ export default class Cursor {
|
||||||
this._hotSpot.y = 0;
|
this._hotSpot.y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setVisibility(visible) {
|
||||||
|
this._visible = visible;
|
||||||
|
if (visible) {
|
||||||
|
this._showCursor();
|
||||||
|
} else {
|
||||||
|
this._hideCursor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Mouse events might be emulated, this allows
|
// Mouse events might be emulated, this allows
|
||||||
// moving the cursor in such cases
|
// moving the cursor in such cases
|
||||||
move(clientX, clientY) {
|
move(clientX, clientY) {
|
||||||
|
|
@ -201,6 +211,9 @@ export default class Cursor {
|
||||||
if (!target) {
|
if (!target) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!this._visible) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
// Easy case
|
// Easy case
|
||||||
if (target === this._target) {
|
if (target === this._target) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,14 @@ protocol stream.
|
||||||
movement) should be prevented from being sent to the server.
|
movement) should be prevented from being sent to the server.
|
||||||
Disabled by default.
|
Disabled by default.
|
||||||
|
|
||||||
|
`remoteCursor`
|
||||||
|
- Is a `boolean` indicating if the cursor should be drawn on the server.
|
||||||
|
Usually the cursor is drawn on the client because it provides a more
|
||||||
|
responsive user experience. However in certain situations, for example
|
||||||
|
in conjuction with `viewOnly` it might be desirable to render the
|
||||||
|
mouse cursor on the server.
|
||||||
|
Disabled by default.
|
||||||
|
|
||||||
`focusOnClick`
|
`focusOnClick`
|
||||||
- Is a `boolean` indicating if keyboard focus should automatically be
|
- Is a `boolean` indicating if keyboard focus should automatically be
|
||||||
moved to the remote session when a `mousedown` or `touchstart`
|
moved to the remote session when a `mousedown` or `touchstart`
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue