Making sure that new base layer becomes visible.

The new base layer may previously have been out of range, in which case setVisibility(true) would do nothing if the layer was visible already. So we check if it was previously out of range, and redraw it if necessary.
This commit is contained in:
ahocevar
2012-02-02 13:53:37 +01:00
parent aba04d7c42
commit abdd3a2e5b
2 changed files with 21 additions and 3 deletions

View File

@@ -1161,6 +1161,11 @@ OpenLayers.Map = OpenLayers.Class({
if(!this.allOverlays || this.baseLayer.visibility) {
this.baseLayer.setVisibility(true);
// Layer may previously have been visible but not in range.
// In this case we need to redraw it to make it visible.
if (this.baseLayer.inRange === false) {
this.baseLayer.redraw();
}
}
// recenter the map

View File

@@ -763,7 +763,7 @@
}
function test_Map_setBaseLayer(t) {
t.plan( 4 );
t.plan( 6 );
map = new OpenLayers.Map('map');
@@ -791,6 +791,20 @@
t.ok(map.baseLayer == wmslayer2, "setbaselayer correctly sets 'baseLayer' property");
map.destroy();
var l1 = new OpenLayers.Layer(),
l2 = new OpenLayers.Layer(null, {maxResolution: 1.4});
map = new OpenLayers.Map({
div: 'map',
allOverlays: true,
layers: [l1, l2],
zoom: 0,
center: [0, 0]
});
t.eq(l2.div.style.display, "none", "Layer invisible because not in range");
map.raiseLayer(l1, 1);
t.eq(l2.div.style.display, "block", "Layer visible after base layer change because in range now");
map.destroy();
}
function test_Map_removeLayer(t) {
@@ -1276,10 +1290,10 @@
t.eq(res, null, "getResolutionForZoom returns null for no base layer");
map.fractionalZoom = true;
var layer = new OpenLayers.Layer("test", {isBaseLayer: true});
map.addLayer(layer);
layer.getResolutionForZoom = function() {
t.ok(true, "getResolutionForZoom calls base layer getResolutionForZoom");
}
map.addLayer(layer);
var res = map.getResolutionForZoom();
layer.destroy();
map.destroy();
@@ -2006,7 +2020,6 @@
map.moveTo([16, 48], 0);
t.eq(map.getCenter().toShortString(), "0, 0", "no panning when moveTo is called with invalid zoom");
}
</script>
</head>
<body>