diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index 15eaff2417..5ca50bdeb3 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -381,6 +381,14 @@ OpenLayers.Layer.prototype = { this.setTileSize(); } }, + + /** + * @returns The size that the image should be, taking into account gutters + * @tile OpenLayers.Size + */ + getImageSize: function() { + return (this.imageSize || this.tileSize); + }, /** * APIMethod: setTileSize @@ -405,11 +413,6 @@ OpenLayers.Layer.prototype = { this.imageOffset = new OpenLayers.Pixel(-this.gutter, -this.gutter); this.imageSize = new OpenLayers.Size(tileSize.w + (2 * this.gutter), tileSize.h + (2 * this.gutter)); - } else { - // layers without gutters may have null tile size - as long - // as they don't rely on Tile.Image - this.imageSize = tileSize; - this.imageOffset = new OpenLayers.Pixel(0, 0); } }, diff --git a/lib/OpenLayers/Layer/Image.js b/lib/OpenLayers/Layer/Image.js index 81b7142c10..acb60c94f2 100644 --- a/lib/OpenLayers/Layer/Image.js +++ b/lib/OpenLayers/Layer/Image.js @@ -172,15 +172,12 @@ OpenLayers.Layer.Image.prototype = }, /** - * Set the tile size based on the map size. This also sets layer.imageSize - * and layer.imageOffset for use by Tile.Image. + * Set the tile size based on the map size. */ setTileSize: function() { var tileWidth = this.extent.getWidth() / this.map.getResolution(); var tileHeight = this.extent.getHeight() / this.map.getResolution(); this.tileSize = new OpenLayers.Size(tileWidth, tileHeight); - this.imageSize = this.tileSize; - this.imageOffset = new OpenLayers.Pixel(0, 0); }, /** diff --git a/lib/OpenLayers/Layer/MapServer.js b/lib/OpenLayers/Layer/MapServer.js index d8595f515b..c448ccb9e9 100644 --- a/lib/OpenLayers/Layer/MapServer.js +++ b/lib/OpenLayers/Layer/MapServer.js @@ -119,15 +119,17 @@ OpenLayers.Layer.MapServer.prototype = bounds = this.adjustBounds(bounds); // Make a list, so that getFullRequestString uses literal "," var extent = [bounds.left, bounds. bottom, bounds.right, bounds.top]; + + var imageSize = this.getImageSize(); // make lists, so that literal ','s are used var url = this.getFullRequestString( {mapext: extent, imgext: extent, - map_size: [this.imageSize.w, this.imageSize.h], - imgx: this.imageSize.w / 2, - imgy: this.imageSize.h / 2, - imgxy: [this.imageSize.w, this.imageSize.h] + map_size: [imageSize.w, imageSize.h], + imgx: imageSize.w / 2, + imgy: imageSize.h / 2, + imgxy: [imageSize.w, imageSize.h] }); return url; diff --git a/lib/OpenLayers/Layer/MapServer/Untiled.js b/lib/OpenLayers/Layer/MapServer/Untiled.js index 093e6b62fb..e64651d382 100644 --- a/lib/OpenLayers/Layer/MapServer/Untiled.js +++ b/lib/OpenLayers/Layer/MapServer/Untiled.js @@ -125,16 +125,13 @@ OpenLayers.Layer.MapServer.Untiled.prototype = /** * Method: setTileSize - * Set the tile size based on the map size. This also sets layer.imageSize - * and layer.imageOffset for use by Tile.Image. + * Set the tile size based on the map size. */ setTileSize: function() { var tileSize = this.map.getSize(); tileSize.w = tileSize.w * this.ratio; tileSize.h = tileSize.h * this.ratio; this.tileSize = tileSize; - this.imageSize = tileSize; - this.imageOffset = new OpenLayers.Pixel(0, 0); }, /** diff --git a/lib/OpenLayers/Layer/WMS.js b/lib/OpenLayers/Layer/WMS.js index e530e5c8ea..71b017a2e6 100644 --- a/lib/OpenLayers/Layer/WMS.js +++ b/lib/OpenLayers/Layer/WMS.js @@ -142,10 +142,12 @@ OpenLayers.Layer.WMS.prototype = */ getURL: function (bounds) { bounds = this.adjustBounds(bounds); + + var imageSize = this.getImageSize(); return this.getFullRequestString( {BBOX:bounds.toBBOX(), - WIDTH:this.imageSize.w, - HEIGHT:this.imageSize.h}); + WIDTH:imageSize.w, + HEIGHT:imageSize.h}); }, /** diff --git a/lib/OpenLayers/Layer/WMS/Untiled.js b/lib/OpenLayers/Layer/WMS/Untiled.js index 10d9a8d367..11c09b9e4d 100644 --- a/lib/OpenLayers/Layer/WMS/Untiled.js +++ b/lib/OpenLayers/Layer/WMS/Untiled.js @@ -147,16 +147,13 @@ OpenLayers.Layer.WMS.Untiled.prototype = /** * Method: setTileSize - * Set the tile size based on the map size. This also sets layer.imageSize - * and layer.imageOffset for use by Tile.Image. + * Set the tile size based on the map size. */ setTileSize: function() { var tileSize = this.map.getSize(); tileSize.w = tileSize.w * this.ratio; tileSize.h = tileSize.h * this.ratio; this.tileSize = tileSize; - this.imageSize = tileSize; - this.imageOffset = new OpenLayers.Pixel(0, 0); }, /** diff --git a/lib/OpenLayers/Tile/Image.js b/lib/OpenLayers/Tile/Image.js index 89d5f97798..8e9b391bdc 100644 --- a/lib/OpenLayers/Tile/Image.js +++ b/lib/OpenLayers/Tile/Image.js @@ -107,13 +107,14 @@ OpenLayers.Tile.Image.prototype = OpenLayers.Util.modifyDOMElement(this.frame, null, this.position, this.size); + var imageSize = this.layer.getImageSize(); if (this.layer.alpha) { OpenLayers.Util.modifyAlphaImageDiv(this.imgDiv, - null, null, this.layer.imageSize, this.url); + null, null, imageSize, this.url); } else { this.imgDiv.src = this.url; OpenLayers.Util.modifyDOMElement(this.imgDiv, - null, null, this.layer.imageSize) ; + null, null, imageSize) ; } this.drawn = true; return true; @@ -153,10 +154,14 @@ OpenLayers.Tile.Image.prototype = * Creates the imgDiv property on the tile. */ initImgDiv: function() { + + var offset = this.layer.imageOffset; + var size = this.layer.getImageSize(); + if (this.layer.alpha) { this.imgDiv = OpenLayers.Util.createAlphaImageDiv(null, - this.layer.imageOffset, - this.layer.imageSize, + offset, + size, null, "relative", null, @@ -165,8 +170,8 @@ OpenLayers.Tile.Image.prototype = true); } else { this.imgDiv = OpenLayers.Util.createImage(null, - this.layer.imageOffset, - this.layer.imageSize, + offset, + size, null, "relative", null, diff --git a/tests/Layer/test_Image.html b/tests/Layer/test_Image.html index a1b38a0985..7288b6ccf2 100644 --- a/tests/Layer/test_Image.html +++ b/tests/Layer/test_Image.html @@ -39,7 +39,7 @@ } function test_50_Layer_Image_tileTests (t) { - t.plan(9); + t.plan(6); var map = new OpenLayers.Map('map'); layer = new OpenLayers.Layer.Image('Test Layer', @@ -49,9 +49,6 @@ map.addLayer(layer); map.zoomToMaxExtent(); - t.ok(layer.imageSize, "layer.imageSize is set"); - t.ok(layer.tileSize, "layer.tileSize is set"); - t.ok(layer.tileSize.equals(layer.imageSize), "tileSize equals imageSize"); // no resolution info was sent, so maxResolution should be calculated // by aspectRatio*extent/size (this is the pixel aspect ratio) diff --git a/tests/Tile/test_Image.html b/tests/Tile/test_Image.html index 00cbfb8aeb..32b0a3b4e3 100644 --- a/tests/Tile/test_Image.html +++ b/tests/Tile/test_Image.html @@ -188,11 +188,11 @@ map.setCenter(new OpenLayers.LonLat(0,0), 5); var tile = layer.grid[0][0]; - t.ok(tile.layer.imageSize.equals(tile.size), - "zero size gutter doesn't change image size"); + t.ok(tile.layer.imageSize == null, + "zero size gutter doesn't set image size"); - t.ok(tile.layer.imageOffset.equals(new OpenLayers.Pixel(0, 0)), - "zero size gutter doesn't affect image offset"); + t.ok(tile.layer.imageOffset == null, + "zero size gutter doesn't set image offset"); var zero_gutter_bounds = tile.bounds;