From 9c6d78d5d472c32efb9bdc369dd450b06c6ec815 Mon Sep 17 00:00:00 2001 From: Michael Jumper <mike.jumper@guac-dev.org> Date: Thu, 24 Apr 2014 16:30:57 -0700 Subject: [PATCH] GUAC-647: Fix auto-fit logic - calculations weren't properly handling very small displays (like 1x1 or 0x0). --- .../src/main/webapp/scripts/client-ui.js | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/guacamole/src/main/webapp/scripts/client-ui.js b/guacamole/src/main/webapp/scripts/client-ui.js index bfd05bca6..408b6aac3 100644 --- a/guacamole/src/main/webapp/scripts/client-ui.js +++ b/guacamole/src/main/webapp/scripts/client-ui.js @@ -799,22 +799,25 @@ GuacUI.Client.setScale = function(new_scale) { */ GuacUI.Client.updateDisplayScale = function() { - // Currently attacched client + // Determine whether display is currently fit to the screen var guac = GuacUI.Client.attachedClient; + var auto_fit = (guac.getScale() === GuacUI.Client.min_zoom); // Calculate scale to fit screen - var min_zoom = Math.min( - window.innerWidth / guac.getWidth(), - window.innerHeight / guac.getHeight() + GuacUI.Client.min_zoom = Math.min( + window.innerWidth / Math.max(guac.getWidth(), 1), + window.innerHeight / Math.max(guac.getHeight(), 1) ); - // Clamp scale to minimum zoom level, keep at minimum zoom if at minimum zoom before - if (guac.getScale() < min_zoom || guac.getScale() === GuacUI.Client.min_zoom) { - GuacUI.Client.min_zoom = min_zoom; - GuacUI.Client.setScale(min_zoom); - } - else - GuacUI.Client.min_zoom = min_zoom; + // Calculate appropriate maximum zoom level + GuacUI.Client.max_zoom = Math.max(GuacUI.Client.min_zoom, 3); + + // Clamp zoom level, maintain auto-fit + if (guac.getScale() < GuacUI.Client.min_zoom || auto_fit) + GuacUI.Client.setScale(GuacUI.Client.min_zoom); + + else if (guac.getScale() > GuacUI.Client.max_zoom) + GuacUI.Client.setScale(GuacUI.Client.max_zoom); }; -- GitLab