Merge pull request #1733 from twpayne/zoomify-clean-ups

Zoomify clean-ups
This commit is contained in:
Tom Payne
2014-02-20 23:49:10 +01:00
2 changed files with 39 additions and 25 deletions

View File

@@ -1,6 +1,7 @@
goog.provide('ol.source.Zoomify');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.dom');
goog.require('goog.dom.TagName');
goog.require('ol.ImageTile');
@@ -12,6 +13,15 @@ goog.require('ol.source.TileImage');
goog.require('ol.tilegrid.Zoomify');
/**
* @enum {string}
*/
ol.source.ZoomifyTierSizeCalculation = {
DEFAULT: 'default',
TRUNCATED: 'truncated'
};
/**
* @constructor
@@ -24,37 +34,40 @@ ol.source.Zoomify = function(opt_options) {
var options = goog.isDef(opt_options) ? opt_options : {};
var size = options.size;
var tierSizeCalculation = 'default';
if (goog.isDef(options.tierSizeCalculation)) {
tierSizeCalculation = options.tierSizeCalculation;
}
var tierSizeCalculation = goog.isDef(options.tierSizeCalculation) ?
options.tierSizeCalculation :
ol.source.ZoomifyTierSizeCalculation.DEFAULT;
var imageWidth = size[0];
var imageHeight = size[1];
var tierSizeInTiles = [];
var tileSize = ol.DEFAULT_TILE_SIZE;
if (tierSizeCalculation === 'truncated') {
var width = imageWidth;
var height = imageHeight;
while (width > tileSize || height > tileSize) {
tierSizeInTiles.push([
Math.ceil(width / tileSize),
Math.ceil(height / tileSize)
]);
width >>= 1;
height >>= 1;
}
} else {
while (imageWidth > tileSize || imageHeight > tileSize) {
tierSizeInTiles.push([
Math.ceil(imageWidth / tileSize),
Math.ceil(imageHeight / tileSize)
]);
tileSize += tileSize;
}
switch (tierSizeCalculation) {
case ol.source.ZoomifyTierSizeCalculation.DEFAULT:
while (imageWidth > tileSize || imageHeight > tileSize) {
tierSizeInTiles.push([
Math.ceil(imageWidth / tileSize),
Math.ceil(imageHeight / tileSize)
]);
tileSize += tileSize;
}
break;
case ol.source.ZoomifyTierSizeCalculation.TRUNCATED:
var width = imageWidth;
var height = imageHeight;
while (width > tileSize || height > tileSize) {
tierSizeInTiles.push([
Math.ceil(width / tileSize),
Math.ceil(height / tileSize)
]);
width >>= 1;
height >>= 1;
}
break;
default:
goog.asserts.fail();
break;
}
tierSizeInTiles.push([1, 1]);