From e4ba2100207d472ecbfb26af89212926ee3c3077 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 23 Jan 2012 12:06:46 -0800 Subject: [PATCH] Experimental auto-scroll of UI when mouse goes offscreen. --- .../src/main/webapp/scripts/interface.js | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/guacamole/src/main/webapp/scripts/interface.js b/guacamole/src/main/webapp/scripts/interface.js index e18f524b3..3fe51b9b0 100644 --- a/guacamole/src/main/webapp/scripts/interface.js +++ b/guacamole/src/main/webapp/scripts/interface.js @@ -261,7 +261,38 @@ GuacamoleUI.attach = function(guac) { var mouse = new Guacamole.Mouse(GuacamoleUI.display); mouse.onmousedown = mouse.onmouseup = mouse.onmousemove = function(mouseState) { + + // Determine mouse position within view + var mouse_view_x = mouseState.x + GuacamoleUI.display.offsetLeft - window.pageXOffset; + var mouse_view_y = mouseState.y + GuacamoleUI.display.offsetTop - window.pageYOffset; + + var view_width = document.body.clientWidth; + var view_height = document.body.clientHeight; + + // Determine scroll amounts based on mouse position relative to document + + var scroll_amount_x; + if (mouse_view_x > view_width) + scroll_amount_x = mouse_view_x - view_width; + else if (mouse_view_x < 0) + scroll_amount_x = mouse_view_x; + else + scroll_amount_x = 0; + + var scroll_amount_y; + if (mouse_view_y > view_height) + scroll_amount_y = mouse_view_y - view_height; + else if (mouse_view_y < 0) + scroll_amount_y = mouse_view_y; + else + scroll_amount_y = 0; + + // Scroll (if necessary) to keep mouse on screen. + window.scrollBy(scroll_amount_x, scroll_amount_y); + + // Send mouse event guac.sendMouseState(mouseState); + }; // Keyboard