From 12565dc4ace66296806c1c4baf58379300fe48a7 Mon Sep 17 00:00:00 2001 From: Samuel Mannehed Date: Tue, 2 Apr 2019 16:45:51 +0200 Subject: [PATCH] Allow autoscale() with zero height or width Commit 6e7e6f9 stopped the function from running if width or height was zero, this commit reverts that change. This commit also makes the resulting canvas 0x0 if autoscale is called with zero. By adding this special case we can avoid division by zero in the calculations. --- kasmweb/core/display.js | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/kasmweb/core/display.js b/kasmweb/core/display.js index 4df9d17..8c52c54 100644 --- a/kasmweb/core/display.js +++ b/kasmweb/core/display.js @@ -191,10 +191,16 @@ export default class Display { } absX(x) { + if (this._scale === 0) { + return 0; + } return x / this._scale + this._viewportLoc.x; } absY(y) { + if (this._scale === 0) { + return 0; + } return y / this._scale + this._viewportLoc.y; } @@ -503,20 +509,22 @@ export default class Display { } autoscale(containerWidth, containerHeight) { - if (containerWidth === 0 || containerHeight === 0) { - Log.Warn("Autoscale doesn't work when width or height is zero"); - return; - } - - const vp = this._viewportLoc; - const targetAspectRatio = containerWidth / containerHeight; - const fbAspectRatio = vp.w / vp.h; - let scaleRatio; - if (fbAspectRatio >= targetAspectRatio) { - scaleRatio = containerWidth / vp.w; + + if (containerWidth === 0 || containerHeight === 0) { + scaleRatio = 0; + } else { - scaleRatio = containerHeight / vp.h; + + const vp = this._viewportLoc; + const targetAspectRatio = containerWidth / containerHeight; + const fbAspectRatio = vp.w / vp.h; + + if (fbAspectRatio >= targetAspectRatio) { + scaleRatio = containerWidth / vp.w; + } else { + scaleRatio = containerHeight / vp.h; + } } this._rescale(scaleRatio);