mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-29 00:26:10 +03:00
Merge pull request #474 from nein09/issue-127
Add option for home button to fill viewer (issue 127)
This commit is contained in:
commit
356b7e1f5f
@ -221,6 +221,10 @@
|
|||||||
*
|
*
|
||||||
* @property {Number} [maxZoomLevel=null]
|
* @property {Number} [maxZoomLevel=null]
|
||||||
*
|
*
|
||||||
|
* @property {Boolean} [homeFillsViewer=false]
|
||||||
|
* Make the 'home' button fill the viewer and clip the image, instead
|
||||||
|
* of fitting the image to the viewer and letterboxing.
|
||||||
|
*
|
||||||
* @property {Boolean} [panHorizontal=true]
|
* @property {Boolean} [panHorizontal=true]
|
||||||
* Allow horizontal pan.
|
* Allow horizontal pan.
|
||||||
*
|
*
|
||||||
@ -912,6 +916,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
|
|||||||
defaultZoomLevel: 0,
|
defaultZoomLevel: 0,
|
||||||
minZoomLevel: null,
|
minZoomLevel: null,
|
||||||
maxZoomLevel: null,
|
maxZoomLevel: null,
|
||||||
|
homeFillsViewer: false,
|
||||||
|
|
||||||
//UI RESPONSIVENESS AND FEEL
|
//UI RESPONSIVENESS AND FEEL
|
||||||
clickTimeThreshold: 300,
|
clickTimeThreshold: 300,
|
||||||
|
@ -1937,7 +1937,8 @@ function openTileSource( viewer, source ) {
|
|||||||
degrees: _this.degrees //,
|
degrees: _this.degrees //,
|
||||||
//TODO: figure out how to support these in a way that makes sense
|
//TODO: figure out how to support these in a way that makes sense
|
||||||
//minZoomLevel: this.minZoomLevel,
|
//minZoomLevel: this.minZoomLevel,
|
||||||
//maxZoomLevel: this.maxZoomLevel
|
//maxZoomLevel: this.maxZoomLevel,
|
||||||
|
//homeFillsViewer: this.homeFillsViewer
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if( source ){
|
if( source ){
|
||||||
@ -1958,7 +1959,8 @@ function openTileSource( viewer, source ) {
|
|||||||
maxZoomLevel: _this.maxZoomLevel,
|
maxZoomLevel: _this.maxZoomLevel,
|
||||||
viewer: _this,
|
viewer: _this,
|
||||||
degrees: _this.degrees,
|
degrees: _this.degrees,
|
||||||
navigatorRotate: _this.navigatorRotate
|
navigatorRotate: _this.navigatorRotate,
|
||||||
|
homeFillsViewer: _this.homeFillsViewer
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +84,8 @@ $.Viewport = function( options ) {
|
|||||||
defaultZoomLevel: $.DEFAULT_SETTINGS.defaultZoomLevel,
|
defaultZoomLevel: $.DEFAULT_SETTINGS.defaultZoomLevel,
|
||||||
minZoomLevel: $.DEFAULT_SETTINGS.minZoomLevel,
|
minZoomLevel: $.DEFAULT_SETTINGS.minZoomLevel,
|
||||||
maxZoomLevel: $.DEFAULT_SETTINGS.maxZoomLevel,
|
maxZoomLevel: $.DEFAULT_SETTINGS.maxZoomLevel,
|
||||||
degrees: $.DEFAULT_SETTINGS.degrees
|
degrees: $.DEFAULT_SETTINGS.degrees,
|
||||||
|
homeFillsViewer: $.DEFAULT_SETTINGS.homeFillsViewer
|
||||||
|
|
||||||
}, options );
|
}, options );
|
||||||
|
|
||||||
@ -148,15 +149,21 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
* @function
|
* @function
|
||||||
*/
|
*/
|
||||||
getHomeZoom: function() {
|
getHomeZoom: function() {
|
||||||
var aspectFactor =
|
|
||||||
this.contentAspectX / this.getAspectRatio();
|
|
||||||
|
|
||||||
if( this.defaultZoomLevel ){
|
if( this.defaultZoomLevel ){
|
||||||
return this.defaultZoomLevel;
|
return this.defaultZoomLevel;
|
||||||
} else {
|
} else {
|
||||||
return ( aspectFactor >= 1 ) ?
|
var aspectFactor =
|
||||||
1 :
|
this.contentAspectX / this.getAspectRatio();
|
||||||
aspectFactor;
|
|
||||||
|
if( this.homeFillsViewer ){ // fill the viewer and clip the image
|
||||||
|
return ( aspectFactor >= 1) ?
|
||||||
|
aspectFactor :
|
||||||
|
1;
|
||||||
|
} else {
|
||||||
|
return ( aspectFactor >= 1 ) ?
|
||||||
|
1 :
|
||||||
|
aspectFactor;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -319,7 +326,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
return this.zoomSpring.target.value;
|
return this.zoomSpring.target.value;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function
|
* @function
|
||||||
* @private
|
* @private
|
||||||
@ -342,7 +349,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
bounds.width,
|
bounds.width,
|
||||||
bounds.height
|
bounds.height
|
||||||
);
|
);
|
||||||
|
|
||||||
horizontalThreshold = this.visibilityRatio * newBounds.width;
|
horizontalThreshold = this.visibilityRatio * newBounds.width;
|
||||||
verticalThreshold = this.visibilityRatio * newBounds.height;
|
verticalThreshold = this.visibilityRatio * newBounds.height;
|
||||||
|
|
||||||
@ -387,7 +394,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
newBounds.y = this.contentAspectY/2 - newBounds.height/2;
|
newBounds.y = this.contentAspectY/2 - newBounds.height/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( this.viewer ){
|
if( this.viewer ){
|
||||||
/**
|
/**
|
||||||
* Raised when the viewport constraints are applied (see {@link OpenSeadragon.Viewport#applyConstraints}).
|
* Raised when the viewport constraints are applied (see {@link OpenSeadragon.Viewport#applyConstraints}).
|
||||||
@ -403,10 +410,10 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
immediately: immediately
|
immediately: immediately
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return newBounds;
|
return newBounds;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function
|
* @function
|
||||||
* @return {OpenSeadragon.Viewport} Chainable.
|
* @return {OpenSeadragon.Viewport} Chainable.
|
||||||
@ -420,7 +427,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
),
|
),
|
||||||
bounds,
|
bounds,
|
||||||
constrainedBounds;
|
constrainedBounds;
|
||||||
|
|
||||||
if ( actualZoom != constrainedZoom ) {
|
if ( actualZoom != constrainedZoom ) {
|
||||||
this.zoomTo( constrainedZoom, this.zoomPoint, immediately );
|
this.zoomTo( constrainedZoom, this.zoomPoint, immediately );
|
||||||
}
|
}
|
||||||
@ -428,11 +435,11 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
bounds = this.getBounds();
|
bounds = this.getBounds();
|
||||||
|
|
||||||
constrainedBounds = this._applyBoundaryConstraints( bounds, immediately );
|
constrainedBounds = this._applyBoundaryConstraints( bounds, immediately );
|
||||||
|
|
||||||
if ( bounds.x !== constrainedBounds.x || bounds.y !== constrainedBounds.y || immediately ){
|
if ( bounds.x !== constrainedBounds.x || bounds.y !== constrainedBounds.y || immediately ){
|
||||||
this.fitBounds( constrainedBounds, immediately );
|
this.fitBounds( constrainedBounds, immediately );
|
||||||
}
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -443,7 +450,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
ensureVisible: function( immediately ) {
|
ensureVisible: function( immediately ) {
|
||||||
return this.applyConstraints( immediately );
|
return this.applyConstraints( immediately );
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function
|
* @function
|
||||||
* @private
|
* @private
|
||||||
@ -455,7 +462,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
options = options || {};
|
options = options || {};
|
||||||
var immediately = options.immediately || false;
|
var immediately = options.immediately || false;
|
||||||
var constraints = options.constraints || false;
|
var constraints = options.constraints || false;
|
||||||
|
|
||||||
var aspect = this.getAspectRatio(),
|
var aspect = this.getAspectRatio(),
|
||||||
center = bounds.getCenter(),
|
center = bounds.getCenter(),
|
||||||
newBounds = new $.Rect(
|
newBounds = new $.Rect(
|
||||||
@ -470,7 +477,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
referencePoint,
|
referencePoint,
|
||||||
newBoundsAspectRatio,
|
newBoundsAspectRatio,
|
||||||
newConstrainedZoom;
|
newConstrainedZoom;
|
||||||
|
|
||||||
if ( newBounds.getAspectRatio() >= aspect ) {
|
if ( newBounds.getAspectRatio() >= aspect ) {
|
||||||
newBounds.height = bounds.width / aspect;
|
newBounds.height = bounds.width / aspect;
|
||||||
newBounds.y = center.y - newBounds.height / 2;
|
newBounds.y = center.y - newBounds.height / 2;
|
||||||
@ -478,24 +485,24 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
newBounds.width = bounds.height * aspect;
|
newBounds.width = bounds.height * aspect;
|
||||||
newBounds.x = center.x - newBounds.width / 2;
|
newBounds.x = center.x - newBounds.width / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( constraints ) {
|
if ( constraints ) {
|
||||||
newBoundsAspectRatio = newBounds.getAspectRatio();
|
newBoundsAspectRatio = newBounds.getAspectRatio();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.panTo( this.getCenter( true ), true );
|
this.panTo( this.getCenter( true ), true );
|
||||||
this.zoomTo( this.getZoom( true ), null, true );
|
this.zoomTo( this.getZoom( true ), null, true );
|
||||||
|
|
||||||
oldBounds = this.getBounds();
|
oldBounds = this.getBounds();
|
||||||
oldZoom = this.getZoom();
|
oldZoom = this.getZoom();
|
||||||
newZoom = 1.0 / newBounds.width;
|
newZoom = 1.0 / newBounds.width;
|
||||||
|
|
||||||
if ( constraints ) {
|
if ( constraints ) {
|
||||||
newConstrainedZoom = Math.max(
|
newConstrainedZoom = Math.max(
|
||||||
Math.min(newZoom, this.getMaxZoom() ),
|
Math.min(newZoom, this.getMaxZoom() ),
|
||||||
this.getMinZoom()
|
this.getMinZoom()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (newZoom !== newConstrainedZoom) {
|
if (newZoom !== newConstrainedZoom) {
|
||||||
newZoom = newConstrainedZoom;
|
newZoom = newConstrainedZoom;
|
||||||
newBounds.width = 1.0 / newZoom;
|
newBounds.width = 1.0 / newZoom;
|
||||||
@ -503,14 +510,14 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
newBounds.height = newBounds.width / newBoundsAspectRatio;
|
newBounds.height = newBounds.width / newBoundsAspectRatio;
|
||||||
newBounds.y = center.y - newBounds.height / 2;
|
newBounds.y = center.y - newBounds.height / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
newBounds = this._applyBoundaryConstraints( newBounds, immediately );
|
newBounds = this._applyBoundaryConstraints( newBounds, immediately );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( newZoom == oldZoom || newBounds.width == oldBounds.width ) {
|
if ( newZoom == oldZoom || newBounds.width == oldBounds.width ) {
|
||||||
return this.panTo( constraints ? newBounds.getCenter() : center, immediately );
|
return this.panTo( constraints ? newBounds.getCenter() : center, immediately );
|
||||||
}
|
}
|
||||||
|
|
||||||
referencePoint = oldBounds.getTopLeft().times(
|
referencePoint = oldBounds.getTopLeft().times(
|
||||||
this.containerSize.x / oldBounds.width
|
this.containerSize.x / oldBounds.width
|
||||||
).minus(
|
).minus(
|
||||||
@ -521,10 +528,10 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
this.containerSize.x / oldBounds.width -
|
this.containerSize.x / oldBounds.width -
|
||||||
this.containerSize.x / newBounds.width
|
this.containerSize.x / newBounds.width
|
||||||
);
|
);
|
||||||
|
|
||||||
return this.zoomTo( newZoom, referencePoint, immediately );
|
return this.zoomTo( newZoom, referencePoint, immediately );
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function
|
* @function
|
||||||
* @param {OpenSeadragon.Rect} bounds
|
* @param {OpenSeadragon.Rect} bounds
|
||||||
@ -537,7 +544,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
constraints: false
|
constraints: false
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function
|
* @function
|
||||||
* @param {OpenSeadragon.Rect} bounds
|
* @param {OpenSeadragon.Rect} bounds
|
||||||
@ -550,7 +557,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
constraints: true
|
constraints: true
|
||||||
} );
|
} );
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function
|
* @function
|
||||||
* @param {Boolean} immediately
|
* @param {Boolean} immediately
|
||||||
@ -725,7 +732,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
degrees = ( degrees + 360 ) % 360;
|
degrees = ( degrees + 360 ) % 360;
|
||||||
this.degrees = degrees;
|
this.degrees = degrees;
|
||||||
this.viewer.forceRedraw();
|
this.viewer.forceRedraw();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Raised when rotation has been changed.
|
* Raised when rotation has been changed.
|
||||||
*
|
*
|
||||||
@ -1077,7 +1084,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
return viewerCoordinates.plus(
|
return viewerCoordinates.plus(
|
||||||
OpenSeadragon.getElementPosition( this.viewer.element ));
|
OpenSeadragon.getElementPosition( this.viewer.element ));
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert a viewport zoom to an image zoom.
|
* Convert a viewport zoom to an image zoom.
|
||||||
* Image zoom: ratio of the original image size to displayed image size.
|
* Image zoom: ratio of the original image size to displayed image size.
|
||||||
@ -1095,7 +1102,7 @@ $.Viewport.prototype = /** @lends OpenSeadragon.Viewport.prototype */{
|
|||||||
var viewportToImageZoomRatio = containerWidth / imageWidth;
|
var viewportToImageZoomRatio = containerWidth / imageWidth;
|
||||||
return viewportZoom * viewportToImageZoomRatio;
|
return viewportZoom * viewportToImageZoomRatio;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert an image zoom to a viewport zoom.
|
* Convert an image zoom to a viewport zoom.
|
||||||
* Image zoom: ratio of the original image size to displayed image size.
|
* Image zoom: ratio of the original image size to displayed image size.
|
||||||
|
Loading…
Reference in New Issue
Block a user