From 1c14f5cc9430b060a152a92a40e2c43b938e7dd9 Mon Sep 17 00:00:00 2001 From: Grant Echols Date: Mon, 22 Jun 2015 13:26:24 -0600 Subject: [PATCH 1/5] Added code to handle the case where autoResize=false. In this mode the image size is preserved and the center is maintained. This may be considered changing the default behavior so I'd welcome a suggestion to add a configuration parameter to help preserve the default behavior. --- src/viewer.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/viewer.js b/src/viewer.js index 7143443d..26ac3aa2 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -2835,6 +2835,28 @@ function updateOnce( viewer ) { THIS[ viewer.hash ].forceRedraw = true; } } + else { + var containerSize = _getSafeElemSize( viewer.container ); + if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { + var prevContainerSize = THIS[ viewer.hash ].prevContainerSize; + var bounds = viewer.viewport.getBounds(true); + var deltaX = (containerSize.x - prevContainerSize.x); + var deltaY = (containerSize.y - prevContainerSize.y); + var viewportDiff = viewer.viewport.deltaPointsFromPixels(new OpenSeadragon.Point(deltaX, deltaY), true); + viewer.viewport.resize(new OpenSeadragon.Point(containerSize.x, containerSize.y), false); + + // Keep the center of the image in the center and just adjust the amount of image shown + bounds.width += viewportDiff.x; + bounds.height += viewportDiff.y; + bounds.x -= (viewportDiff.x / 2); + bounds.y -= (viewportDiff.y / 2); + viewer.viewport.fitBounds(bounds, true); + viewer.forceRedraw(); + + THIS[ viewer.hash ].prevContainerSize = containerSize; + THIS[ viewer.hash ].forceRedraw = true; + } + } var viewportChange = viewer.viewport.update(); var animated = viewer.world.update() || viewportChange; From 57c06a9a199ae85b5dd3a8275bc133339297ce08 Mon Sep 17 00:00:00 2001 From: Grant Echols Date: Mon, 22 Jun 2015 13:35:45 -0600 Subject: [PATCH 2/5] Fixed problem with build complaining about variable name reuse. --- src/viewer.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/viewer.js b/src/viewer.js index 26ac3aa2..efe1ea36 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -2824,8 +2824,9 @@ function updateOnce( viewer ) { return; } + var containerSize; if ( viewer.autoResize ) { - var containerSize = _getSafeElemSize( viewer.container ); + containerSize = _getSafeElemSize( viewer.container ); if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { // maintain image position var oldBounds = viewer.viewport.getBounds(); @@ -2836,7 +2837,7 @@ function updateOnce( viewer ) { } } else { - var containerSize = _getSafeElemSize( viewer.container ); + containerSize = _getSafeElemSize( viewer.container ); if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { var prevContainerSize = THIS[ viewer.hash ].prevContainerSize; var bounds = viewer.viewport.getBounds(true); From fb21dabd7687c4d0ba80252025328e0644d04cec Mon Sep 17 00:00:00 2001 From: Grant Echols Date: Tue, 23 Jun 2015 10:55:57 -0600 Subject: [PATCH 3/5] Added configuration parameter: preserveImageSizeOnResize to preserve the default behavior. Changed fitBounds to fitBoundsWithConstraints as per Ian's instructions. --- src/openseadragon.js | 4 ++++ src/viewer.js | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/openseadragon.js b/src/openseadragon.js index 461f9d22..0c6df401 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -252,6 +252,9 @@ * @property {Boolean} [autoResize=true] * Set to false to prevent polling for viewer size changes. Useful for providing custom resize behavior. * + * @property {Boolean} [preserveImageSizeOnResize=false] + * Set to true to have the image size preserved when the viewer is resized. This requires autoResize=false. + * * @property {Number} [pixelsPerWheelLine=40] * For pixel-resolution scrolling devices, the number of pixels equal to one scroll line. * @@ -987,6 +990,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){ maxZoomPixelRatio: 1.1, //-> higher allows 'over zoom' into pixels pixelsPerWheelLine: 40, autoResize: true, + preserveImageSizeOnResize: false, // requires autoResize=false //DEFAULT CONTROL SETTINGS showSequenceControl: true, //SEQUENCE diff --git a/src/viewer.js b/src/viewer.js index efe1ea36..50dd8831 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -408,6 +408,7 @@ $.Viewer = function( options ) { width: this.navigatorWidth, height: this.navigatorHeight, autoResize: this.navigatorAutoResize, + preserveImageSizeOnResize: this.preserveImageSizeOnResize, prefixUrl: this.prefixUrl, viewer: this, navigatorRotate: this.navigatorRotate, @@ -2836,7 +2837,7 @@ function updateOnce( viewer ) { THIS[ viewer.hash ].forceRedraw = true; } } - else { + else if ( viewer.preserveImageSizeOnResize ) { containerSize = _getSafeElemSize( viewer.container ); if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { var prevContainerSize = THIS[ viewer.hash ].prevContainerSize; @@ -2851,7 +2852,7 @@ function updateOnce( viewer ) { bounds.height += viewportDiff.y; bounds.x -= (viewportDiff.x / 2); bounds.y -= (viewportDiff.y / 2); - viewer.viewport.fitBounds(bounds, true); + viewer.viewport.fitBoundsWithConstraints(bounds, true); viewer.forceRedraw(); THIS[ viewer.hash ].prevContainerSize = containerSize; From df878f6f82a77081671eeab50aca9e23437d6e85 Mon Sep 17 00:00:00 2001 From: Grant Echols Date: Wed, 24 Jun 2015 10:48:00 -0600 Subject: [PATCH 4/5] Changed preserveImageSizeOnResize to require autoResize=true. Refactored resizing code to share more code. Removed preserveImageSizeOnResize parameter from viewer. --- src/openseadragon.js | 2 +- src/viewer.js | 46 +++++++++++++++++++------------------------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/openseadragon.js b/src/openseadragon.js index 0c6df401..b7f7f5c1 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -253,7 +253,7 @@ * Set to false to prevent polling for viewer size changes. Useful for providing custom resize behavior. * * @property {Boolean} [preserveImageSizeOnResize=false] - * Set to true to have the image size preserved when the viewer is resized. This requires autoResize=false. + * Set to true to have the image size preserved when the viewer is resized. This requires autoResize=true (default). * * @property {Number} [pixelsPerWheelLine=40] * For pixel-resolution scrolling devices, the number of pixels equal to one scroll line. diff --git a/src/viewer.js b/src/viewer.js index 50dd8831..3e318528 100644 --- a/src/viewer.js +++ b/src/viewer.js @@ -408,7 +408,6 @@ $.Viewer = function( options ) { width: this.navigatorWidth, height: this.navigatorHeight, autoResize: this.navigatorAutoResize, - preserveImageSizeOnResize: this.preserveImageSizeOnResize, prefixUrl: this.prefixUrl, viewer: this, navigatorRotate: this.navigatorRotate, @@ -2829,32 +2828,27 @@ function updateOnce( viewer ) { if ( viewer.autoResize ) { 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; - } - } - else if ( viewer.preserveImageSizeOnResize ) { - containerSize = _getSafeElemSize( viewer.container ); - if ( !containerSize.equals( THIS[ viewer.hash ].prevContainerSize ) ) { - var prevContainerSize = THIS[ viewer.hash ].prevContainerSize; - var bounds = viewer.viewport.getBounds(true); - var deltaX = (containerSize.x - prevContainerSize.x); - var deltaY = (containerSize.y - prevContainerSize.y); - var viewportDiff = viewer.viewport.deltaPointsFromPixels(new OpenSeadragon.Point(deltaX, deltaY), true); - viewer.viewport.resize(new OpenSeadragon.Point(containerSize.x, containerSize.y), false); - - // Keep the center of the image in the center and just adjust the amount of image shown - bounds.width += viewportDiff.x; - bounds.height += viewportDiff.y; - bounds.x -= (viewportDiff.x / 2); - bounds.y -= (viewportDiff.y / 2); - viewer.viewport.fitBoundsWithConstraints(bounds, true); - viewer.forceRedraw(); + if ( viewer.preserveImageSizeOnResize ) { + var prevContainerSize = THIS[ viewer.hash ].prevContainerSize; + var bounds = viewer.viewport.getBounds(true); + var deltaX = (containerSize.x - prevContainerSize.x); + var deltaY = (containerSize.y - prevContainerSize.y); + var viewportDiff = viewer.viewport.deltaPointsFromPixels(new OpenSeadragon.Point(deltaX, deltaY), true); + viewer.viewport.resize(new OpenSeadragon.Point(containerSize.x, containerSize.y), false); + // Keep the center of the image in the center and just adjust the amount of image shown + bounds.width += viewportDiff.x; + bounds.height += viewportDiff.y; + bounds.x -= (viewportDiff.x / 2); + bounds.y -= (viewportDiff.y / 2); + viewer.viewport.fitBoundsWithConstraints(bounds, true); + } + else { + // 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; } From 0806e4d4ed445fbef748c68b62bf9c678e46a4b1 Mon Sep 17 00:00:00 2001 From: Grant Echols Date: Thu, 25 Jun 2015 14:14:05 -0600 Subject: [PATCH 5/5] Fixed comment regarding autoResize. --- src/openseadragon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openseadragon.js b/src/openseadragon.js index b7f7f5c1..e20926bd 100644 --- a/src/openseadragon.js +++ b/src/openseadragon.js @@ -990,7 +990,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){ maxZoomPixelRatio: 1.1, //-> higher allows 'over zoom' into pixels pixelsPerWheelLine: 40, autoResize: true, - preserveImageSizeOnResize: false, // requires autoResize=false + preserveImageSizeOnResize: false, // requires autoResize=true //DEFAULT CONTROL SETTINGS showSequenceControl: true, //SEQUENCE