Changeset 5323
- Timestamp:
- 12/01/07 17:57:58 (1 year ago)
- Files:
-
- trunk/openlayers/lib/OpenLayers/Renderer/Elements.js (modified) (4 diffs)
- trunk/openlayers/lib/OpenLayers/Renderer/SVG.js (modified) (3 diffs)
- trunk/openlayers/lib/OpenLayers/Renderer/VML.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openlayers/lib/OpenLayers/Renderer/Elements.js
r5213 r5323 85 85 * Method: getNodeType 86 86 * This function is in charge of asking the specific renderer which type 87 * of node to create for the given geometry . All geometries in an88 * Elements-based renderer consist of one node and some attributes. We89 * have the nodeFactory() function which creates a node for us, but it90 * takes a 'type' as input, and that is precisely what this function91 * t ells us.87 * of node to create for the given geometry and style. All geometries 88 * in an Elements-based renderer consist of one node and some 89 * attributes. We have the nodeFactory() function which creates a node 90 * for us, but it takes a 'type' as input, and that is precisely what 91 * this function tells us. 92 92 * 93 93 * Parameters: 94 94 * geometry - {<OpenLayers.Geometry>} 95 * style - {Object} 95 96 * 96 97 * Returns: 97 98 * {String} The corresponding node type for the specified geometry 98 99 */ 99 getNodeType: function(geometry ) { },100 getNodeType: function(geometry, style) { }, 100 101 101 102 /** … … 123 124 124 125 //first we create the basic node and add it to the root 125 var nodeType = this.getNodeType(geometry );126 var nodeType = this.getNodeType(geometry, style); 126 127 var node = this.nodeFactory(geometry.id, nodeType); 127 128 node._featureId = featureId; … … 132 133 node = this.drawGeometryNode(node, geometry); 133 134 this.root.appendChild(node); 135 this.postDraw(node); 134 136 }, 135 137 … … 183 185 return this.setStyle(node, style, options, geometry); 184 186 }, 187 188 /** 189 * Method: postDraw 190 * Things that have do be done after the geometry node is appended 191 * to its parent node. To be overridden by subclasses. 192 * 193 * Parameters: 194 * node - {DOMElement} 195 */ 196 postDraw: function(node) {}, 185 197 186 198 /** trunk/openlayers/lib/OpenLayers/Renderer/SVG.js
r5217 r5323 148 148 * Parameters: 149 149 * geometry - {<OpenLayers.Geometry>} 150 * style - {Object} 150 151 * 151 152 * Returns: 152 153 * {String} The corresponding node type for the specified geometry 153 154 */ 154 getNodeType: function(geometry ) {155 getNodeType: function(geometry, style) { 155 156 var nodeType = null; 156 157 switch (geometry.CLASS_NAME) { 157 158 case "OpenLayers.Geometry.Point": 158 nodeType = "circle";159 nodeType = style.externalGraphic ? "image" : "circle"; 159 160 break; 160 161 case "OpenLayers.Geometry.Rectangle": … … 197 198 if (node._geometryClass == "OpenLayers.Geometry.Point") { 198 199 if (style.externalGraphic) { 199 // remove old node200 var id = node.getAttributeNS(null, "id");201 200 var x = parseFloat(node.getAttributeNS(null, "cx")); 202 201 var y = parseFloat(node.getAttributeNS(null, "cy")); 203 var _featureId = node._featureId;204 var _geometryClass = node._geometryClass;205 var _style = node._style;206 202 207 // create new image node208 node = this.createNode("image", id);209 node._featureId = _featureId;210 node._geometryClass = _geometryClass;211 node._style = _style;212 213 // now style the new node214 203 if (style.graphicWidth && style.graphicHeight) { 215 204 node.setAttributeNS(null, "preserveAspectRatio", "none"); … … 223 212 var yOffset = (style.graphicYOffset != undefined) ? 224 213 style.graphicYOffset : -(0.5 * height); 214 225 215 var opacity = style.graphicOpacity || style.fillOpacity; 226 216 trunk/openlayers/lib/OpenLayers/Renderer/VML.js
r5287 r5323 106 106 /** 107 107 * Method: getNodeType 108 * Get the noode type for a geometry 109 * 110 * Parameters: 111 * geometry - {<OpenLayers.Geometry>} 108 * Get the noode type for a geometry and style 109 * 110 * Parameters: 111 * geometry - {<OpenLayers.Geometry>} 112 * style - {Object} 112 113 * 113 114 * Returns: 114 115 * {String} The corresponding node type for the specified geometry 115 116 */ 116 getNodeType: function(geometry ) {117 getNodeType: function(geometry, style) { 117 118 var nodeType = null; 118 119 switch (geometry.CLASS_NAME) { 119 120 case "OpenLayers.Geometry.Point": 120 nodeType = "v:oval";121 nodeType = style.externalGraphic ? "v:rect" : "v:oval"; 121 122 break; 122 123 case "OpenLayers.Geometry.Rectangle": … … 154 155 if (node._geometryClass == "OpenLayers.Geometry.Point") { 155 156 if (style.externalGraphic) { 156 // remove old node157 var id = node.id;158 var _featureId = node._featureId;159 var _geometryClass = node._geometryClass;160 var _style = node._style;161 162 // create new image node163 node = this.createNode("v:rect", id);164 var fill = this.createNode("v:fill", id+"_image");165 node.appendChild(fill);166 node._featureId = _featureId;167 node._geometryClass = _geometryClass;168 node._style = _style;169 170 fill.src = style.externalGraphic;171 fill.type = "frame";172 node.style.flip = "y";173 174 if (!(style.graphicWidth && style.graphicHeight)) {175 fill.aspect = "atmost";176 }177 178 // now style the new node179 157 var width = style.graphicWidth || style.graphicHeight; 180 158 var height = style.graphicHeight || style.graphicWidth; … … 193 171 node.style.height = height; 194 172 195 // modify fill style for rectstyling below173 // modify style/options for fill and stroke styling below 196 174 style.fillColor = "none"; 197 style.strokeColor = "none";175 options.isStroked = false; 198 176 199 177 } else { … … 217 195 if (!fill) { 218 196 fill = this.createNode('v:fill', node.id + "_fill"); 197 198 if (style.fillOpacity) { 199 fill.setAttribute("opacity", style.fillOpacity); 200 } 201 202 if (node._geometryClass == "OpenLayers.Geometry.Point" && 203 style.externalGraphic) { 204 205 // override fillOpacity 206 if (style.graphicOpacity) { 207 fill.setAttribute("opacity", style.graphicOpacity); 208 } 209 210 fill.setAttribute("src", style.externalGraphic); 211 fill.setAttribute("type", "frame"); 212 node.style.flip = "y"; 213 214 if (!(style.graphicWidth && style.graphicHeight)) { 215 fill.aspect = "atmost"; 216 } 217 } 219 218 node.appendChild(fill); 220 }221 // if graphicOpacity is set use it in priority for external graphic222 if (node._geometryClass == "OpenLayers.Geometry.Point" &&223 style.externalGraphic &&224 style.graphicOpacity) {225 fill.setAttribute("opacity", style.graphicOpacity);226 } else if (style.fillOpacity) {227 fill.setAttribute("opacity", style.fillOpacity);228 219 } 229 220 } … … 256 247 } 257 248 return node; 249 }, 250 251 /** 252 * Method: postDraw 253 * Some versions of Internet Explorer seem to be unable to set fillcolor 254 * and strokecolor to "none" correctly before the fill node is appended to 255 * a visible vml node. This method takes care of that and sets fillcolor 256 * and strokecolor again if needed. 257 * 258 * Parameters: 259 * node - {DOMElement} 260 */ 261 postDraw: function(node) { 262 var fillColor = node._style.fillColor; 263 var strokeColor = node._style.strokeColor; 264 if (fillColor == "none" && 265 node.getAttribute("fillcolor") != fillColor) { 266 node.setAttribute("fillcolor", fillColor); 267 } 268 if (strokeColor == "none" && 269 node.getAttribute("strokecolor") != strokeColor) { 270 node.setAttribute("strokecolor", strokeColor) 271 } 258 272 }, 259 273
