]> git.proxmox.com Git - mirror_novnc.git/commitdiff
Allow autoscale() with zero height or width
authorSamuel Mannehed <samuel@cendio.se>
Tue, 2 Apr 2019 14:45:51 +0000 (16:45 +0200)
committerSamuel Mannehed <samuel@cendio.se>
Tue, 2 Apr 2019 14:51:18 +0000 (16:51 +0200)
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.

core/display.js

index 25a959546784b266f3fdc701745cff8365630d74..1528384d3afd69efc87788bea12a465cdd86561c 100644 (file)
@@ -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;
     }
 
@@ -495,20 +501,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;
-        }
+        let scaleRatio;
 
-        const vp = this._viewportLoc;
-        const targetAspectRatio = containerWidth / containerHeight;
-        const fbAspectRatio = vp.w / vp.h;
+        if (containerWidth === 0 || containerHeight === 0) {
+            scaleRatio = 0;
 
-        let scaleRatio;
-        if (fbAspectRatio >= targetAspectRatio) {
-            scaleRatio = containerWidth / vp.w;
         } 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);