From 69b4a84381f3532d212f48e1e4e3852bc7057822 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Wed, 12 May 2010 20:58:13 +0000 Subject: [PATCH] replaced Renderer.Elements' minimumSymbolizer and Renderer.Canvas' symbolizer defaults with a new Renderer.defaultSymbolizer. r=elemoine (closes #2584) git-svn-id: http://svn.openlayers.org/trunk/openlayers@10316 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Renderer.js | 60 ++++++++++++++++++++++++++++- lib/OpenLayers/Renderer/Canvas.js | 13 ++----- lib/OpenLayers/Renderer/Elements.js | 14 +------ lib/OpenLayers/Renderer/SVG.js | 2 +- lib/OpenLayers/Renderer/VML.js | 3 +- 5 files changed, 66 insertions(+), 26 deletions(-) diff --git a/lib/OpenLayers/Renderer.js b/lib/OpenLayers/Renderer.js index 5e461d2c64..ecc611b0ee 100644 --- a/lib/OpenLayers/Renderer.js +++ b/lib/OpenLayers/Renderer.js @@ -303,6 +303,64 @@ OpenLayers.Renderer = OpenLayers.Class({ getRenderLayerId: function() { return this.container.id; }, + + /** + * Method: applyDefaultSymbolizer + * + * Parameters: + * symbolizer - {Object} + * + * Returns: + * {Object} + */ + applyDefaultSymbolizer: function(symbolizer) { + var result = OpenLayers.Util.extend({}, + OpenLayers.Renderer.defaultSymbolizer); + if(symbolizer.stroke !== true && + symbolizer.strokeWidth === undefined && + symbolizer.strokeColor === undefined && + symbolizer.strokeOpacity === undefined) { + delete result.strokeWidth; + delete result.strokeColor; + } + if(symbolizer.fill !== true && + symbolizer.fillColor === undefined && + symbolizer.fillOpacity === undefined) { + delete result.fillColor; + } + OpenLayers.Util.extend(result, symbolizer); + return result; + }, CLASS_NAME: "OpenLayers.Renderer" -}); \ No newline at end of file +}); + +/** + * Constant: OpenLayers.Renderer.defaultSymbolizer + * {Object} Properties from this symbolizer will be applied to symbolizers + * with missing properties. This can also be used to set a global + * symbolizer default in OpenLayers. To be SLD 1.x compliant, add the + * following code before rendering any vector features: + * (code) + * OpenLayers.Renderer.defaultSymbolizer = { + * fillColor: "#808080", + * fillOpacity: 1, + * strokeColor: "#000000", + * strokeOpacity: 1, + * strokeWidth: 1, + * strokeDashstyle: "solid", + * pointRadius: 3, + * graphicName: "square" + * }; + * (end) + */ +OpenLayers.Renderer.defaultSymbolizer = { + fillColor: "#000000", + strokeColor: "#000000", + strokeWidth: 2, + fillOpacity: 1, + strokeOpacity: 1, + strokeDashstyle: "solid", + pointRadius: 0 +}; + diff --git a/lib/OpenLayers/Renderer/Canvas.js b/lib/OpenLayers/Renderer/Canvas.js index f54fe79c61..6701c20ae8 100644 --- a/lib/OpenLayers/Renderer/Canvas.js +++ b/lib/OpenLayers/Renderer/Canvas.js @@ -118,16 +118,9 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, { * style - {} */ drawFeature: function(feature, style) { - if(style == null) { - style = feature.style; - } - style = OpenLayers.Util.extend({ - 'fillColor': '#000000', - 'strokeColor': '#000000', - 'strokeWidth': 2, - 'fillOpacity': 1, - 'strokeOpacity': 1 - }, style); + style = style || feature.style; + style = this.applyDefaultSymbolizer(style); + this.features[feature.id] = [feature, style]; if (feature.geometry) { this.geometryMap[feature.geometry.id] = feature.id; diff --git a/lib/OpenLayers/Renderer/Elements.js b/lib/OpenLayers/Renderer/Elements.js index 38b30ba0a5..8c99d55352 100644 --- a/lib/OpenLayers/Renderer/Elements.js +++ b/lib/OpenLayers/Renderer/Elements.js @@ -394,18 +394,6 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, { */ LABEL_ID_SUFFIX: "_label", - /** - * Property: minimumSymbolizer - * {Object} - */ - minimumSymbolizer: { - strokeLinecap: "round", - strokeOpacity: 1, - strokeDashstyle: "solid", - fillOpacity: 1, - pointRadius: 0 - }, - /** * Constructor: OpenLayers.Renderer.Elements * @@ -655,7 +643,7 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, { */ drawGeometryNode: function(node, geometry, style) { style = style || node._style; - OpenLayers.Util.applyDefaults(style, this.minimumSymbolizer); + style = this.applyDefaultSymbolizer(style); var options = { 'isFilled': style.fill === undefined ? diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index d9c9fb1b17..a141d49587 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -367,7 +367,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { node.setAttributeNS(null, "stroke", style.strokeColor); node.setAttributeNS(null, "stroke-opacity", style.strokeOpacity); node.setAttributeNS(null, "stroke-width", style.strokeWidth * widthFactor); - node.setAttributeNS(null, "stroke-linecap", style.strokeLinecap); + node.setAttributeNS(null, "stroke-linecap", style.strokeLinecap || "round"); // Hard-coded linejoin for now, to make it look the same as in VML. // There is no strokeLinejoin property yet for symbolizers. node.setAttributeNS(null, "stroke-linejoin", "round"); diff --git a/lib/OpenLayers/Renderer/VML.js b/lib/OpenLayers/Renderer/VML.js index 79e76a54ad..1590591b17 100644 --- a/lib/OpenLayers/Renderer/VML.js +++ b/lib/OpenLayers/Renderer/VML.js @@ -328,7 +328,8 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { node.appendChild(stroke); } stroke.opacity = style.strokeOpacity; - stroke.endcap = !style.strokeLinecap || style.strokeLinecap == 'butt' ? 'flat' : style.strokeLinecap; + stroke.endcap = style.strokeLinecap == 'butt' ? 'flat' : + (style.strokeLinecap || 'round'); stroke.dashstyle = this.dashStyle(style); }