diff --git a/lib/OpenLayers/Layer/WMS.js b/lib/OpenLayers/Layer/WMS.js index 5bacc2764d..e530e5c8ea 100644 --- a/lib/OpenLayers/Layer/WMS.js +++ b/lib/OpenLayers/Layer/WMS.js @@ -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"; + } } + }, /** diff --git a/lib/OpenLayers/Layer/WMS/Untiled.js b/lib/OpenLayers/Layer/WMS/Untiled.js index acb8357844..10d9a8d367 100644 --- a/lib/OpenLayers/Layer/WMS/Untiled.js +++ b/lib/OpenLayers/Layer/WMS/Untiled.js @@ -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"; + } } + }, /** diff --git a/tests/Layer/test_WMS.html b/tests/Layer/test_WMS.html index 0dbdf5b111..d17230c9c7 100644 --- a/tests/Layer/test_WMS.html +++ b/tests/Layer/test_WMS.html @@ -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);