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
This commit is contained in:
ahocevar
2010-05-12 20:58:13 +00:00
parent c4e779b992
commit 69b4a84381
5 changed files with 66 additions and 26 deletions

View File

@@ -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"
});
});
/**
* 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
};

View File

@@ -118,16 +118,9 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, {
* style - {<Object>}
*/
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;

View File

@@ -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 ?

View File

@@ -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");

View File

@@ -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);
}