Deprecate TileSource.getTileSize(), add TileSource.getTileWidth() and TileSource.getTileHeight()

This commit is contained in:
Conner Wingard 2015-06-29 13:42:09 -04:00
parent 85241b1249
commit 827fe4e836
3 changed files with 62 additions and 37 deletions

View File

@ -185,15 +185,11 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, /** @lends OpenSea
* @function * @function
* @param {Number} level * @param {Number} level
*/ */
getTileSize: function( level ){ getTileSize: function( level ){
var scaleFactor = Math.pow(2, this.maxLevel - level); var scaleFactor = Math.pow(2, this.maxLevel - level);
// cache it in case any external code is going to read it directly // cache it in case any external code is going to read it directly
if (this.tileSizePerScaleFactor && this.tileSizePerScaleFactor[scaleFactor]) { if (this.tileSizePerScaleFactor && this.tileSizePerScaleFactor[scaleFactor]) {
this.tileSize = new $.Point( this.tileSize = this.tileSizePerScaleFactor[scaleFactor];
this.tileSizePerScaleFactor[scaleFactor],
this.tileSizePerScaleFactor[scaleFactor]
);
} }
return this.tileSize; return this.tileSize;
}, },
@ -233,8 +229,8 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, /** @lends OpenSea
tileSize = this.getTileSize(level); tileSize = this.getTileSize(level);
iiifTileSizeWidth = Math.ceil( tileSize.x / scale ); iiifTileSizeWidth = Math.ceil( tileSize / scale );
iiifTileSizeHeight = Math.ceil( tileSize.y / scale ); iiifTileSizeHeight = Math.ceil( tileSize / scale );
if ( this['@context'].indexOf('/1.0/context.json') > -1 || if ( this['@context'].indexOf('/1.0/context.json') > -1 ||
this['@context'].indexOf('/1.1/context.json') > -1 || this['@context'].indexOf('/1.1/context.json') > -1 ||
@ -244,7 +240,7 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, /** @lends OpenSea
iiifQuality = "default.jpg"; iiifQuality = "default.jpg";
} }
if ( levelWidth < tileSize.x && levelHeight < tileSize.y ){ if ( levelWidth < tileSize && levelHeight < tileSize ){
iiifSize = levelWidth + ","; iiifSize = levelWidth + ",";
iiifRegion = 'full'; iiifRegion = 'full';
} else { } else {

View File

@ -1036,7 +1036,7 @@ function onTileLoad( tiledImage, tile, time, image ) {
var finish = function() { var finish = function() {
var cutoff = Math.ceil( Math.log( var cutoff = Math.ceil( Math.log(
tiledImage.source.getTileSize(tile.level).x ) / Math.log( 2 ) ); tiledImage.source.getTileWidth(tile.level) ) / Math.log( 2 ) );
setTileLoaded(tiledImage, tile, image, cutoff); setTileLoaded(tiledImage, tile, image, cutoff);
}; };

View File

@ -146,7 +146,7 @@ $.TileSource = function( width, height, tileSize, tileOverlap, minLevel, maxLeve
* The size of the image tiles used to compose the image. * The size of the image tiles used to compose the image.
* Please note that tileSize may be deprecated in a future release. * Please note that tileSize may be deprecated in a future release.
* Instead the getTileSize(level) function should be used. * Instead the getTileSize(level) function should be used.
* @member {OpenSeadragon.Point} tileSize * @member {Number} tileSize
* @memberof OpenSeadragon.TileSource# * @memberof OpenSeadragon.TileSource#
*/ */
/** /**
@ -179,7 +179,7 @@ $.TileSource = function( width, height, tileSize, tileOverlap, minLevel, maxLeve
//async mechanism set some safe defaults first //async mechanism set some safe defaults first
this.aspectRatio = 1; this.aspectRatio = 1;
this.dimensions = new $.Point( 10, 10 ); this.dimensions = new $.Point( 10, 10 );
this.tileSize = new $.Point( 0, 0 ); this.tileSize = 0;
this.tileOverlap = 0; this.tileOverlap = 0;
this.minLevel = 0; this.minLevel = 0;
this.maxLevel = 0; this.maxLevel = 0;
@ -197,14 +197,9 @@ $.TileSource = function( width, height, tileSize, tileOverlap, minLevel, maxLeve
( options.width / options.height ) : 1; ( options.width / options.height ) : 1;
this.dimensions = new $.Point( options.width, options.height ); this.dimensions = new $.Point( options.width, options.height );
if( options.tileSize ){ this.tileSize = options.tileSize ? options.tileSize : 0;
this.tileSize = new $.Point(options.tileSize, options.tileSize); this.tileWidth = options.tileWidth;
} else { this.tileHeight = options.tileHeight;
this.tileSize = new $.Point(
(options.tileWidth ? options.tileWidth : 0),
(options.tileHeight ? options.tileHeight : 0)
);
}
this.tileOverlap = options.tileOverlap ? options.tileOverlap : 0; this.tileOverlap = options.tileOverlap ? options.tileOverlap : 0;
this.minLevel = options.minLevel ? options.minLevel : 0; this.minLevel = options.minLevel ? options.minLevel : 0;
@ -231,14 +226,50 @@ $.TileSource.prototype = /** @lends OpenSeadragon.TileSource.prototype */{
* Subclasses should override this if tileSizes can be different at different levels * Subclasses should override this if tileSizes can be different at different levels
* such as in IIIFTileSource. Code should use this function rather than reading * such as in IIIFTileSource. Code should use this function rather than reading
* from .tileSize directly. tileSize may be deprecated in a future release. * from .tileSize directly. tileSize may be deprecated in a future release.
* @deprecated
* @function * @function
* @param {Number} level * @param {Number} level
* @returns {OpenSeadragon.Point} The dimensions of tiles in level
*/ */
getTileSize: function( level ) { getTileSize: function( level ) {
$.console.error(
"[TileSource.getTileSize] is deprecated." +
"Use TileSource.getTileWidth() and TileSource.getTileHeight() instead"
);
return this.tileSize; return this.tileSize;
}, },
/**
* Return the tileWidth for a given level.
* Subclasses should override this if tileWidth can be different at different levels
* such as in IIIFTileSource. Code should use this function rather than reading
* from .tileWidth directly.
* @function
* @param {Number} level
*/
getTileWidth: function( level ) {
// If tileWidth was not set, fallback by setting it to tileSize
if( this.tileWidth === undefined){
this.tileWidth = this.tileSize;
}
return this.tileWidth;
},
/**
* Return the tileHeight for a given level.
* Subclasses should override this if tileHeight can be different at different levels
* such as in IIIFTileSource. Code should use this function rather than reading
* from .tileHeight directly.
* @function
* @param {Number} level
*/
getTileHeight: function( level ) {
// If tileHeight was not set, fallback by setting it to tileSize
if( this.tileHeight === undefined ){
this.tileHeight = this.tileSize;
}
return this.tileHeight;
},
/** /**
* @function * @function
* @param {Number} level * @param {Number} level
@ -265,8 +296,8 @@ $.TileSource.prototype = /** @lends OpenSeadragon.TileSource.prototype */{
*/ */
getNumTiles: function( level ) { getNumTiles: function( level ) {
var scale = this.getLevelScale( level ), var scale = this.getLevelScale( level ),
x = Math.ceil( scale * this.dimensions.x / this.getTileSize(level).x ), x = Math.ceil( scale * this.dimensions.x / this.getTileWidth(level) ),
y = Math.ceil( scale * this.dimensions.y / this.getTileSize(level).y ); y = Math.ceil( scale * this.dimensions.y / this.getTileHeight(level) );
return new $.Point( x, y ); return new $.Point( x, y );
}, },
@ -291,19 +322,16 @@ $.TileSource.prototype = /** @lends OpenSeadragon.TileSource.prototype */{
getClosestLevel: function( rect ) { getClosestLevel: function( rect ) {
var i, var i,
tilesPerSide, tilesPerSide,
tiles, tiles;
tileSize;
for( i = this.minLevel; i < this.maxLevel; i++ ){ for( i = this.minLevel; i < this.maxLevel; i++ ){
tiles = this.getNumTiles( i ); tiles = this.getNumTiles( i );
tileSize = this.getTileSize(i);
tilesPerSide = new $.Point( tilesPerSide = new $.Point(
Math.floor( rect.x / tileSize.x ), Math.floor( rect.x / this.getTileWidth(i) ),
Math.floor( rect.y / tileSize.y ) Math.floor( rect.y / this.getTileHeight(i) )
); );
if( tiles.x + 1 >= tilesPerSide.x && tiles.y + 1 >= tilesPerSide.y ){ if( tiles.x + 1 >= tilesPerSide.x || tiles.y + 1 >= tilesPerSide.y ){
break; break;
} }
} }
@ -317,8 +345,8 @@ $.TileSource.prototype = /** @lends OpenSeadragon.TileSource.prototype */{
*/ */
getTileAtPoint: function( level, point ) { getTileAtPoint: function( level, point ) {
var pixel = point.times( this.dimensions.x ).times( this.getLevelScale(level) ), var pixel = point.times( this.dimensions.x ).times( this.getLevelScale(level) ),
tx = Math.floor( pixel.x / this.getTileSize(level).x ), tx = Math.floor( pixel.x / this.getTileWidth(level) ),
ty = Math.floor( pixel.y / this.getTileSize(level).y ); ty = Math.floor( pixel.y / this.getTileHeight(level) );
return new $.Point( tx, ty ); return new $.Point( tx, ty );
}, },
@ -331,11 +359,12 @@ $.TileSource.prototype = /** @lends OpenSeadragon.TileSource.prototype */{
*/ */
getTileBounds: function( level, x, y ) { getTileBounds: function( level, x, y ) {
var dimensionsScaled = this.dimensions.times( this.getLevelScale( level ) ), var dimensionsScaled = this.dimensions.times( this.getLevelScale( level ) ),
tileSize = this.getTileSize(level), tileWidth = this.getTileWidth(level),
px = ( x === 0 ) ? 0 : tileSize.x * x - this.tileOverlap, tileHeight = this.getTileHeight(level),
py = ( y === 0 ) ? 0 : tileSize.y * y - this.tileOverlap, px = ( x === 0 ) ? 0 : tileWidth * x - this.tileOverlap,
sx = tileSize.x + ( x === 0 ? 1 : 2 ) * this.tileOverlap, py = ( y === 0 ) ? 0 : tileHeight * y - this.tileOverlap,
sy = tileSize.y + ( y === 0 ? 1 : 2 ) * this.tileOverlap, sx = tileWidth + ( x === 0 ? 1 : 2 ) * this.tileOverlap,
sy = tileHeight + ( y === 0 ? 1 : 2 ) * this.tileOverlap,
scale = 1.0 / dimensionsScaled.x; scale = 1.0 / dimensionsScaled.x;
sx = Math.min( sx, dimensionsScaled.x - px ); sx = Math.min( sx, dimensionsScaled.x - px );