diff --git a/changelog.txt b/changelog.txt index 01a3900f..0ae90cd2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -56,6 +56,7 @@ OPENSEADRAGON CHANGELOG * Viewer.innerTracker.scrollHandler: preventDefaultAction == true prevents viewer zooming on mousewheel/pinch * Fixed: IE8 error with custom buttons - "Object doesn't support this action" (#279) * Support IIIF servers that don't report tile dimensions (#286) +* Added a pollForResize option. Default is true. When set to false, the viewer takes no action when its container element is resized. 0.9.131: diff --git a/src/openseadragon.js b/src/openseadragon.js index 4a1fb29d..e4a05795 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -174,6 +174,9 @@ * image though it is less effective visually if the HTML5 Canvas is not * availble on the viewing device. * + * @param {Boolean} [options.pollForResize=true] + * Set to false to prevent polling for viewer size changes. Useful for providing custom resize behavior. + * * @param {Number} [options.visibilityRatio=0.5] * The percentage ( as a number from 0 to 1 ) of the source image which * must be kept within the viewport. If the image is dragged beyond that @@ -532,6 +535,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){ minZoomImageRatio: 0.9, //-> closer to 0 allows zoom out to infinity maxZoomPixelRatio: 1.1, //-> higher allows 'over zoom' into pixels pixelsPerWheelLine: 40, + pollForResize: true, //DEFAULT CONTROL SETTINGS showSequenceControl: true, //SEQUENCE diff --git a/src/viewer.js b/src/viewer.js index f528b411..82927b18 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -1657,14 +1657,16 @@ function updateOnce( viewer ) { //viewer.profiler.beginUpdate(); - containerSize = _getSafeElemSize( viewer.container ); - if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { - // maintain image position - var oldBounds = viewer.viewport.getBounds(); - var oldCenter = viewer.viewport.getCenter(); - resizeViewportAndRecenter(viewer, containerSize, oldBounds, oldCenter); - THIS[ viewer.hash ].prevContainerSize = containerSize; - THIS[ viewer.hash ].forceRedraw = true; + if ( viewer.pollForResize ) { + containerSize = _getSafeElemSize( viewer.container ); + if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { + // maintain image position + var oldBounds = viewer.viewport.getBounds(); + var oldCenter = viewer.viewport.getCenter(); + resizeViewportAndRecenter(viewer, containerSize, oldBounds, oldCenter); + THIS[ viewer.hash ].prevContainerSize = containerSize; + THIS[ viewer.hash ].forceRedraw = true; + } } animated = viewer.viewport.update(); diff --git a/src/viewport.js b/src/viewport.js index 12fbd956..c4cea72f 100644 --- a/src/viewport.js +++ b/src/viewport.js @@ -611,14 +611,15 @@ $.Viewport.prototype = { resize: function( newContainerSize, maintain ) { var oldBounds = this.getBounds(), newBounds = oldBounds, - widthDeltaFactor = newContainerSize.x / this.containerSize.x; + widthDeltaFactor; this.containerSize = new $.Point( newContainerSize.x, newContainerSize.y ); - if (maintain) { + if ( maintain ) { + widthDeltaFactor = newContainerSize.x / this.containerSize.x; newBounds.width = oldBounds.width * widthDeltaFactor; newBounds.height = newBounds.width / this.getAspectRatio(); }