fix for #650 - if user specifies a layer as transparent and of format image/jpg, we change it to the appropriate type (gif or png). Sure, it's somewhat magical... but it will probably help people out in the long run

git-svn-id: http://svn.openlayers.org/trunk/openlayers@3554 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
euzuro
2007-07-02 22:11:16 +00:00
parent 71a140055e
commit d2c2b011e7
3 changed files with 45 additions and 15 deletions

View File

@@ -40,6 +40,9 @@ OpenLayers.Layer.WMS.prototype =
*/
reproject: true,
/** @type Boolean */
isBaseLayer: true,
/**
* Constructor: OpenLayers.Layer.WMS
* Create a new WMS layer object
@@ -70,13 +73,24 @@ OpenLayers.Layer.WMS.prototype =
OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)
);
// unless explicitly set in options, if the layer is transparent,
// it will be an overlay
if (options == null || options.isBaseLayer == null) {
this.isBaseLayer = ((this.params.TRANSPARENT != "TRUE") &&
(this.params.TRANSPARENT != "true") &&
(this.params.TRANSPARENT != true));
//layer is transparent
if (this.params.TRANSPARENT &&
this.params.TRANSPARENT.toString().toLowerCase() == "true") {
// unless explicitly set in options, make layer an overlay
if ( (options == null) || (!options.isBaseLayer) ) {
this.isBaseLayer = false;
}
// jpegs can never be transparent, so intelligently switch the
// format, depending on teh browser's capabilities
if (this.params.FORMAT == "image/jpeg") {
this.params.FORMAT = OpenLayers.Util.alphaHack() ? "image/gif"
: "image/png";
}
}
},
/**

View File

@@ -74,13 +74,23 @@ OpenLayers.Layer.WMS.Untiled.prototype =
OpenLayers.Util.upperCaseObject(this.DEFAULT_PARAMS)
);
// unless explicitly set in options, if the layer is transparent,
// it will be an overlay
if ((options == null) || (options.isBaseLayer == null)) {
this.isBaseLayer = ((this.params.TRANSPARENT != "TRUE") &&
(this.params.TRANSPARENT != "true") &&
(this.params.TRANSPARENT != true));
//layer is transparent
if (this.params.TRANSPARENT &&
this.params.TRANSPARENT.toString().toLowerCase() == "true") {
// unless explicitly set in options, make layer an overlay
if ( (options == null) || (!options.isBaseLayer) ) {
this.isBaseLayer = false;
}
// jpegs can never be transparent, so intelligently switch the
// format, depending on teh browser's capabilities
if (this.params.FORMAT == "image/jpeg") {
this.params.FORMAT = OpenLayers.Util.alphaHack() ? "image/gif"
: "image/png";
}
}
},
/**

View File

@@ -10,11 +10,14 @@
var url = "http://octo.metacarta.com/cgi-bin/mapserv";
var params = { map: '/mapdata/vmap_wms.map',
layers: 'basic',
format: 'image/png'};
format: 'image/jpeg'};
function test_01_Layer_WMS_constructor (t) {
t.plan( 10 );
t.plan( 13 );
var trans_format = "image/png";
if (OpenLayers.Util.alphaHack()) { trans_format = "image/gif"; }
var url = "http://octo.metacarta.com/cgi-bin/mapserv";
layer = new OpenLayers.Layer.WMS(name, url, params);
t.ok( layer instanceof OpenLayers.Layer.WMS, "new OpenLayers.Layer.WMS returns object" );
@@ -32,14 +35,17 @@
params.TRANSPARENT = "TRUE";
var layer3 = new OpenLayers.Layer.WMS(name, url, params);
t.eq(layer3.isBaseLayer, false, "transparency == 'TRUE', wms is not baselayer");
t.eq(layer3.params.FORMAT, trans_format, "transparent = TRUE causes non-image/jpeg format");
params.TRANSPARENT = "TRuE";
var layer4 = new OpenLayers.Layer.WMS(name, url, params);
t.eq(layer4.isBaseLayer, true, "transparency == 'TRuE', wms is baselayer");
t.eq(layer4.isBaseLayer, false, "transparency == 'TRuE', wms is not baselayer");
t.eq(layer4.params.FORMAT, trans_format, "transparent = TRuE causes non-image/jpeg format");
params.TRANSPARENT = true;
var layer5 = new OpenLayers.Layer.WMS(name, url, params);
t.eq(layer5.isBaseLayer, false, "transparency == true, wms is not baselayer");
t.eq(layer5.params.FORMAT, trans_format, "transparent = true causes non-image/jpeg format");
params.TRANSPARENT = false;
var layer6 = new OpenLayers.Layer.WMS(name, url, params);