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) {
|
||||
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);
|
||||
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
|
||||
* Clean up this layer.
|
||||
|
||||
@@ -234,7 +234,57 @@
|
||||
t.debug_print("Google tests can't be run from " +
|
||||
window.location.host);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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) {
|
||||
if(validkey) {
|
||||
|
||||
Reference in New Issue
Block a user