GUACAMOLE-1204: Add convenient mechanism for automatically scaling mouse events.

This commit is contained in:
Michael Jumper
2021-02-06 22:57:50 -08:00
parent 7d53fe4f09
commit 1ce4e975eb
2 changed files with 22 additions and 31 deletions

View File

@@ -323,19 +323,33 @@ Guacamole.Client = function(tunnel) {
* Sends a mouse event having the properties provided by the given mouse * Sends a mouse event having the properties provided by the given mouse
* state. * state.
* *
* @param {Guacamole.Mouse.State} mouseState The state of the mouse to send * @param {Guacamole.Mouse.State} mouseState
* in the mouse event. * The state of the mouse to send in the mouse event.
*
* @param {Boolean} [applyDisplayScale=false]
* Whether the provided mouse state uses local display units, rather
* than remote display units, and should be scaled to match the
* {@link Guacamole.Display}.
*/ */
this.sendMouseState = function(mouseState) { this.sendMouseState = function sendMouseState(mouseState, applyDisplayScale) {
// Do not send requests if not connected // Do not send requests if not connected
if (!isConnected()) if (!isConnected())
return; return;
var x = mouseState.x;
var y = mouseState.y;
// Translate for display units if requested
if (applyDisplayScale) {
x /= display.getScale();
y /= display.getScale();
}
// Update client-side cursor // Update client-side cursor
display.moveCursor( display.moveCursor(
Math.floor(mouseState.x), Math.floor(x),
Math.floor(mouseState.y) Math.floor(y)
); );
// Build mask // Build mask
@@ -347,7 +361,7 @@ Guacamole.Client = function(tunnel) {
if (mouseState.down) buttonMask |= 16; if (mouseState.down) buttonMask |= 16;
// Send message // Send message
tunnel.sendMessage("mouse", Math.floor(mouseState.x), Math.floor(mouseState.y), buttonMask); tunnel.sendMessage("mouse", Math.floor(x), Math.floor(y), buttonMask);
}; };
/** /**

View File

@@ -185,29 +185,6 @@ angular.module('client').directive('guacClient', [function guacClient() {
}; };
/**
* Sends the given mouse state to the current client.
*
* @param {Guacamole.Mouse.State} mouseState The mouse state to
* send.
*/
var sendScaledMouseState = function sendScaledMouseState(mouseState) {
// Scale event by current scale
var scaledState = new Guacamole.Mouse.State(
mouseState.x / display.getScale(),
mouseState.y / display.getScale(),
mouseState.left,
mouseState.middle,
mouseState.right,
mouseState.up,
mouseState.down);
// Send mouse event
client.sendMouseState(scaledState);
};
/** /**
* Handles a mouse event originating from the user's actual mouse. * Handles a mouse event originating from the user's actual mouse.
* This differs from handleEmulatedMouseState() in that the * This differs from handleEmulatedMouseState() in that the
@@ -226,7 +203,7 @@ angular.module('client').directive('guacClient', [function guacClient() {
// Send mouse state, show cursor if necessary // Send mouse state, show cursor if necessary
display.showCursor(!localCursor); display.showCursor(!localCursor);
sendScaledMouseState(mouseState); client.sendMouseState(mouseState, true);
}; };
@@ -251,7 +228,7 @@ angular.module('client').directive('guacClient', [function guacClient() {
// Send mouse state, ensure cursor is visible // Send mouse state, ensure cursor is visible
scrollToMouse(mouseState); scrollToMouse(mouseState);
sendScaledMouseState(mouseState); client.sendMouseState(mouseState, true);
}; };