[OpenLayers-Commits] r12312 - in sandbox/camptocamp/clientzoom:
lib/OpenLayers/Tile tests/Tile
commits-20090109 at openlayers.org
commits-20090109 at openlayers.org
Thu Sep 1 10:38:57 EDT 2011
Author: erilem
Date: 2011-09-01 07:38:56 -0700 (Thu, 01 Sep 2011)
New Revision: 12312
Modified:
sandbox/camptocamp/clientzoom/lib/OpenLayers/Tile/BackBufferable.js
sandbox/camptocamp/clientzoom/tests/Tile/BackBufferable.html
Log:
disable backbuffering when the layer div is stretched or about to be stretched
Modified: sandbox/camptocamp/clientzoom/lib/OpenLayers/Tile/BackBufferable.js
===================================================================
--- sandbox/camptocamp/clientzoom/lib/OpenLayers/Tile/BackBufferable.js 2011-09-01 09:24:43 UTC (rev 12311)
+++ sandbox/camptocamp/clientzoom/lib/OpenLayers/Tile/BackBufferable.js 2011-09-01 14:38:56 UTC (rev 12312)
@@ -120,7 +120,8 @@
tile = this.getTile(),
backBuffer = data.tile,
resolution = data.resolution,
- ratio = resolution ? resolution / map.getResolution() : 1,
+ mapResolution = map.getResolution(),
+ ratio = resolution ? resolution / mapResolution : 1,
// Cases where we don't position and return a back buffer, but only
// update backBufferData and return undefined:
@@ -131,8 +132,12 @@
// (3) we don't have a tile available that we could use as buffer
noTile = !(tile && tile.childNodes.length > 0),
// (4) no backbuffer is displayed for a tile that's still loading
- noBackBuffer = !backBuffer && this.isLoading;
- if (notNeeded || noParent || noTile || noBackBuffer) {
+ noBackBuffer = !backBuffer && this.isLoading,
+ // (5) the layer div is scaled or is to be scaled
+ scaledLayer = layer.getResolutionScale() != 1 ||
+ layer.getServerSupportedResolution(mapResolution)
+ != mapResolution;
+ if (notNeeded || noParent || noTile || noBackBuffer || scaledLayer) {
this.setBackBufferData();
return;
}
Modified: sandbox/camptocamp/clientzoom/tests/Tile/BackBufferable.html
===================================================================
--- sandbox/camptocamp/clientzoom/tests/Tile/BackBufferable.html 2011-09-01 09:24:43 UTC (rev 12311)
+++ sandbox/camptocamp/clientzoom/tests/Tile/BackBufferable.html 2011-09-01 14:38:56 UTC (rev 12312)
@@ -106,9 +106,88 @@
map.destroy();
}
+ function test_updateBackBuffer_scaled_layer(t) {
+ t.plan(11);
+
+ var resolution, serverSupportedResolution, backBuffer, scale;
+
+ var map = new OpenLayers.Map('map');
+ map.addLayer(layer);
+ map.zoomToMaxExtent();
+
+ tile = new OpenLayers.Tile.Image(layer, position, bounds, null);
+
+ // mock createBackBuffer to avoid removing the image
+ // div from the tile
+ tile.createBackBuffer = function() {
+ return this.frame.cloneNode(false);
+ };
+
+ map.getResolution = function() {
+ return resolution;
+ };
+
+ layer.getServerSupportedResolution = function() {
+ return serverSupportedResolution;
+ };
+
+ layer.getResolutionScale = function() {
+ return scale;
+ };
+
+ resolution = 32, serverSupportedResolution = 32, scale = 1;
+ tile.draw();
+ // check initial state
+ t.eq(tile.backBufferData.resolution, 32,
+ '[0] resolution 2 is set in the back buffer data');
+
+ tile.isLoading = false;
+
+ // change to a server-supported resolution
+ resolution = 16, serverSupportedResolution = 16, scale = 1;
+ backBuffer = tile.updateBackBuffer();
+ t.ok(backBuffer != undefined,
+ '[1] updateBackBuffer returns a back buffer tile');
+ t.eq(backBuffer.style.width, '512%',
+ '[1] back buffer width is as expected');
+ t.eq(backBuffer.style.width, '512%',
+ '[1] back buffer height is as expected');
+ tile.resetBackBuffer();
+
+ // change to a server-unsupported resolution
+ resolution = 8, serverSupportedResolution = 16, scale = 1;
+ backBuffer = tile.updateBackBuffer();
+ t.ok(backBuffer == undefined,
+ '[2] updateBackBuffer returns undefined');
+ t.eq(tile.backBufferData.resolution, 8,
+ '[2] updateBackBuffer correctly sets the back buffer data');
+
+ // change back to a server-supported resolution
+ resolution = 16, serverSupportedResolution = 16, scale = 2;
+ backBuffer = tile.updateBackBuffer();
+ t.ok(backBuffer == undefined,
+ '[3] updateBackBuffer returns undefined');
+ t.eq(tile.backBufferData.resolution, 16,
+ '[3] updateBackBuffer correctly sets the back buffer data');
+
+ // change to a server-supported resolution
+ resolution = 32, serverSupportedResolution = 32, scale = 1;
+ backBuffer = tile.updateBackBuffer();
+ t.ok(backBuffer != undefined,
+ '[3] updateBackBuffer returns a back buffer tile');
+ t.eq(backBuffer.style.width, '128%',
+ '[3] back buffer width is as expected');
+ t.eq(backBuffer.style.width, '128%',
+ '[3] back buffer height is as expected');
+ tile.resetBackBuffer();
+
+ delete layer.getServerSupportedResolution;
+ map.removeLayer(layer);
+ map.destroy();
+ }
</script>
</head>
<body>
<div id="map" style="height:550px;width:500px"></div>
</body>
-</html>
\ No newline at end of file
+</html>
More information about the Commits
mailing list