[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