From 69297c01815723f8b4927c0cc808fcecccd85e92 Mon Sep 17 00:00:00 2001 From: Tom Date: Tue, 13 Dec 2022 16:49:23 -0500 Subject: [PATCH] Updated resize behavior --- src/viewer.js | 40 +++++++++---- test/demo/resizeviewer.html | 114 ++++++++++-------------------------- 2 files changed, 59 insertions(+), 95 deletions(-) diff --git a/src/viewer.js b/src/viewer.js index b7a1362f..4af8a714 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -204,6 +204,7 @@ $.Viewer = function( options ) { prevContainerSize: null, animating: false, forceRedraw: false, + needsResize: false, mouseInside: false, group: null, // whether we should be continuously zooming @@ -332,10 +333,9 @@ $.Viewer = function( options ) { this._origViewerResize = origViewerResize; //for testing logic changes if(window.ResizeObserver){ this._autoResizePolling = false; - this._resizeObserver = new ResizeObserver(function(){ if(_this.autoResize){ - _this._onViewerResize(_this, _getSafeElemSize(_this.container)); + THIS[_this.hash].needsResize = true; } }); @@ -1702,8 +1702,8 @@ $.extend( $.Viewer.prototype, $.EventSource.prototype, $.ControlDock.prototype, /** * Force the viewer to reset its size to match its container. */ - forceImmediateResize: function() { - this._onViewerResize(this, _getSafeElemSize(this.container)); + forceResize: function() { + THIS[this.hash].needsResize = true; }, /** @@ -3594,18 +3594,25 @@ function origViewerResize(viewer, containerSize){ } function onViewerResize(viewer, containerSize){ var viewport = viewer.viewport; - var resizeRatio = THIS[viewer.hash].prevContainerSize.x / containerSize.x; var zoom = viewport.getZoom(); var center = viewport.getCenter(); viewport.resize(containerSize, viewer.preserveImageSizeOnResize); viewport.panTo(center, true); + var resizeRatio; if (viewer.preserveImageSizeOnResize) { - viewport.zoomTo(zoom * resizeRatio, null, true); + resizeRatio = THIS[viewer.hash].prevContainerSize.x / containerSize.x; + // viewport.zoomTo(zoom * resizeRatio, null, true); } else { - viewport.zoomTo(zoom, null, true); + var o = new $.Point(0, 0); + var prevDiag = new $.Point(THIS[viewer.hash].prevContainerSize.x, THIS[viewer.hash].prevContainerSize.y).distanceTo(o); + var newDiag = new $.Point(containerSize.x, containerSize.y).distanceTo(o); + resizeRatio = newDiag / prevDiag * THIS[viewer.hash].prevContainerSize.x / containerSize.x; + // viewport.zoomTo(zoom, null, true); } + viewport.zoomTo(zoom * resizeRatio, null, true); THIS[viewer.hash].prevContainerSize = containerSize; THIS[viewer.hash].forceRedraw = true; + THIS[viewer.hash].needsResize = false; } function updateOnce( viewer ) { @@ -3614,14 +3621,23 @@ function updateOnce( viewer ) { if (viewer._opening || !THIS[viewer.hash]) { return; } - if (viewer.autoResize && viewer._autoResizePolling){ - var containerSize = _getSafeElemSize(viewer.container); - var prevContainerSize = THIS[viewer.hash].prevContainerSize; - if (!containerSize.equals(prevContainerSize)) { - viewer._onViewerResize(viewer, containerSize); + if (viewer.autoResize){ + var containerSize; + if(viewer._autoResizePolling){ + containerSize = _getSafeElemSize(viewer.container); + var prevContainerSize = THIS[viewer.hash].prevContainerSize; + if (!containerSize.equals(prevContainerSize)) { + THIS[viewer.hash].needsResize = true; + } } + if(THIS[viewer.hash].needsResize){ + viewer._onViewerResize(viewer, containerSize || _getSafeElemSize(viewer.container)); + } + } + + var viewportChange = viewer.viewport.update(); var animated = viewer.world.update() || viewportChange; diff --git a/test/demo/resizeviewer.html b/test/demo/resizeviewer.html index 9341feb7..74777552 100644 --- a/test/demo/resizeviewer.html +++ b/test/demo/resizeviewer.html @@ -4,6 +4,8 @@ OpenSeadragon Viewer Resizing Demo + +