After r10021 we lost the ability to set the opacity of a Google layer. This makes layer.setOpacity work again by setting the opactiy of the shared GMap container. r=bartvde (pullup #2562)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@10174 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -263,7 +263,10 @@ OpenLayers.Layer.Google = OpenLayers.Class(
|
|||||||
*/
|
*/
|
||||||
setVisibility: function(visible) {
|
setVisibility: function(visible) {
|
||||||
this.setGMapVisibility(visible);
|
this.setGMapVisibility(visible);
|
||||||
|
// sharing a map container, opacity has to be set per layer
|
||||||
|
var opacity = this.opacity == null ? 1 : this.opacity;
|
||||||
OpenLayers.Layer.EventPane.prototype.setVisibility.apply(this, arguments);
|
OpenLayers.Layer.EventPane.prototype.setVisibility.apply(this, arguments);
|
||||||
|
this.setOpacity(opacity);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -303,6 +306,33 @@ OpenLayers.Layer.Google = OpenLayers.Class(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIMethod: setOpacity
|
||||||
|
* Sets the opacity for the entire layer (all images)
|
||||||
|
*
|
||||||
|
* Parameter:
|
||||||
|
* opacity - {Float}
|
||||||
|
*/
|
||||||
|
setOpacity: function(opacity) {
|
||||||
|
if (opacity !== this.opacity) {
|
||||||
|
if (this.map != null) {
|
||||||
|
this.map.events.triggerEvent("changelayer", {
|
||||||
|
layer: this,
|
||||||
|
property: "opacity"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.opacity = opacity;
|
||||||
|
}
|
||||||
|
// Though this layer's opacity may not change, we're sharing a container
|
||||||
|
// and need to update the opacity for the entire container.
|
||||||
|
if (this.getVisibility()) {
|
||||||
|
var container = this.mapObject.getContainer();
|
||||||
|
OpenLayers.Util.modifyDOMElement(
|
||||||
|
container, null, null, null, null, null, null, opacity
|
||||||
|
);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIMethod: destroy
|
* APIMethod: destroy
|
||||||
* Clean up this layer.
|
* Clean up this layer.
|
||||||
|
|||||||
@@ -236,6 +236,56 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_setOpacity(t) {
|
||||||
|
|
||||||
|
t.plan(6);
|
||||||
|
|
||||||
|
var map = new OpenLayers.Map("map");
|
||||||
|
var gmap = new OpenLayers.Layer.Google(
|
||||||
|
"Google Streets", // the default
|
||||||
|
{numZoomLevels: 20}
|
||||||
|
);
|
||||||
|
var ghyb = new OpenLayers.Layer.Google(
|
||||||
|
"Google Hybrid",
|
||||||
|
{type: G_HYBRID_MAP, numZoomLevels: 20}
|
||||||
|
);
|
||||||
|
var gsat = new OpenLayers.Layer.Google(
|
||||||
|
"Google Satellite",
|
||||||
|
{type: G_SATELLITE_MAP, numZoomLevels: 22}
|
||||||
|
);
|
||||||
|
map.addLayers([gmap, ghyb, gsat]);
|
||||||
|
map.zoomToMaxExtent();
|
||||||
|
|
||||||
|
var container = map.baseLayer.mapObject.getContainer();
|
||||||
|
var opacityCheck = function(opacity) {
|
||||||
|
var style = container.style;
|
||||||
|
var current = style.opacity === "" ? 1 : parseFloat(style.opacity);
|
||||||
|
if (style.filter && !style.opacity) {
|
||||||
|
current = Number(style.filter.replace(/alpha\(opacity=(.+?)\)/, "$1"));
|
||||||
|
}
|
||||||
|
return (current === opacity);
|
||||||
|
};
|
||||||
|
|
||||||
|
gmap.setOpacity(0.5);
|
||||||
|
t.ok(opacityCheck(0.5), "container opacity set for visible layer");
|
||||||
|
|
||||||
|
ghyb.setOpacity(0.75);
|
||||||
|
t.ok(opacityCheck(0.5), "container opacity not changed if layer not visible");
|
||||||
|
map.setBaseLayer(ghyb);
|
||||||
|
t.ok(opacityCheck(0.75), "container opacity changed to 0.75 when layer becomes visible");
|
||||||
|
|
||||||
|
map.setBaseLayer(gsat);
|
||||||
|
t.ok(opacityCheck(1), "container opacity set to 1 by default");
|
||||||
|
gsat.setOpacity(0.25);
|
||||||
|
t.ok(opacityCheck(0.25), "container opacity changed to 0.25 for visible layer");
|
||||||
|
|
||||||
|
map.setBaseLayer(gmap);
|
||||||
|
t.ok(opacityCheck(0.5), "container opacity set to layer opacity");
|
||||||
|
|
||||||
|
map.destroy();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function test_Layer_Google_setGMapVisibility(t) {
|
function test_Layer_Google_setGMapVisibility(t) {
|
||||||
if(validkey) {
|
if(validkey) {
|
||||||
t.plan(4);
|
t.plan(4);
|
||||||
|
|||||||
Reference in New Issue
Block a user