Ticket #1172: Renderer.diff
| File Renderer.diff, 10.0 kB (added by ahocevar, 1 year ago) |
|---|
-
lib/OpenLayers/Renderer/Elements.js
old new 84 84 /** 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 … … 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 /** 102 103 * Method: drawGeometry … … 122 123 }; 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; 128 129 node._geometryClass = geometry.CLASS_NAME; … … 131 132 //now actually draw the node, and style it 132 133 node = this.drawGeometryNode(node, geometry); 133 134 this.root.appendChild(node); 135 this.postDraw(node); 134 136 }, 135 137 136 138 /** … … 184 186 }, 185 187 186 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) {}, 197 198 /** 187 199 * Method: drawPoint 188 200 * Virtual function for drawing Point Geometry. 189 201 * Should be implemented by subclasses. -
lib/OpenLayers/Renderer/SVG.js
old new 147 147 * 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 … … 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": 161 162 nodeType = "rect"; … … 196 197 options = options || node._options; 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"); 216 205 } … … 222 211 style.graphicXOffset : -(0.5 * width); 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 227 217 node.setAttributeNS(null, "x", (x + xOffset).toFixed()); -
lib/OpenLayers/Renderer/VML.js
old new 105 105 106 106 /** 107 107 * Method: getNodeType 108 * Get the noode type for a geometry 108 * Get the noode type for a geometry and style 109 109 * 110 110 * Parameters: 111 111 * geometry - {<OpenLayers.Geometry>} 112 * style - {Object} 112 113 * 113 114 * Returns: 114 115 * {String} The corresponding node type for the specified geometry … … 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": 123 124 nodeType = "v:rect"; … … 153 154 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; 181 159 width = width ? width : style.pointRadius*2; … … 192 170 node.style.width = width; 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 { 200 178 this.drawCircle(node, geometry, style.pointRadius); … … 216 194 } 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 219 } 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 }229 220 } 230 221 231 222 … … 257 248 return node; 258 249 }, 259 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 } 272 }, 273 260 274 261 275 /** 262 276 * Method: setNodeDimension
