GUAC-647: Fix auto-fit logic - calculations weren't properly handling very small displays (like 1x1 or 0x0).

This commit is contained in:
Michael Jumper
2014-04-24 16:30:57 -07:00
parent ed5b3cd886
commit 9c6d78d5d4

View File

@@ -799,22 +799,25 @@ GuacUI.Client.setScale = function(new_scale) {
*/ */
GuacUI.Client.updateDisplayScale = function() { GuacUI.Client.updateDisplayScale = function() {
// Currently attacched client // Determine whether display is currently fit to the screen
var guac = GuacUI.Client.attachedClient; var guac = GuacUI.Client.attachedClient;
var auto_fit = (guac.getScale() === GuacUI.Client.min_zoom);
// Calculate scale to fit screen // Calculate scale to fit screen
var min_zoom = Math.min( GuacUI.Client.min_zoom = Math.min(
window.innerWidth / guac.getWidth(), window.innerWidth / Math.max(guac.getWidth(), 1),
window.innerHeight / guac.getHeight() window.innerHeight / Math.max(guac.getHeight(), 1)
); );
// Clamp scale to minimum zoom level, keep at minimum zoom if at minimum zoom before // Calculate appropriate maximum zoom level
if (guac.getScale() < min_zoom || guac.getScale() === GuacUI.Client.min_zoom) { GuacUI.Client.max_zoom = Math.max(GuacUI.Client.min_zoom, 3);
GuacUI.Client.min_zoom = min_zoom;
GuacUI.Client.setScale(min_zoom); // Clamp zoom level, maintain auto-fit
} if (guac.getScale() < GuacUI.Client.min_zoom || auto_fit)
else GuacUI.Client.setScale(GuacUI.Client.min_zoom);
GuacUI.Client.min_zoom = min_zoom;
else if (guac.getScale() > GuacUI.Client.max_zoom)
GuacUI.Client.setScale(GuacUI.Client.max_zoom);
}; };