From 35168dc219a4a8ee9b001e7d0b93a72c19419dc8 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Sat, 20 Mar 2010 21:33:36 +0000 Subject: [PATCH] fixing rotation so previously rotated geometries will be rotated back if the rotation symbolizer attribute is not set any more. r=bartvde (closes #2500) git-svn-id: http://svn.openlayers.org/trunk/openlayers@10135 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Renderer/SVG.js | 9 ++++++--- lib/OpenLayers/Renderer/VML.js | 13 ++++++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index 34d676ccca..c1887d7105 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -335,15 +335,18 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { node.setAttributeNS(null, "r", style.pointRadius); } - if (typeof style.rotation != "undefined" && pos) { + var rotation = style.rotation; + if (node._rotation !== rotation && pos) { + node._rotation = rotation; + rotation |= 0; if(node.nodeName !== "svg") { node.setAttributeNS(null, "transform", - "rotate(" + style.rotation + " " + pos.x + " " + + "rotate(" + rotation + " " + pos.x + " " + pos.y + ")"); } else { var symbolCenter = 0.5 * this.symbolSize[id] / 3; node.firstChild.setAttributeNS(null, "transform", - "rotate(" + style.rotation + " " + symbolCenter + + "rotate(" + rotation + " " + symbolCenter + " " + symbolCenter + ")"); } } diff --git a/lib/OpenLayers/Renderer/VML.js b/lib/OpenLayers/Renderer/VML.js index ebc6789eb8..c06d583e87 100644 --- a/lib/OpenLayers/Renderer/VML.js +++ b/lib/OpenLayers/Renderer/VML.js @@ -294,7 +294,9 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { } // additional rendering for rotated graphics or symbols - if (typeof style.rotation != "undefined") { + var rotation = style.rotation; + if (rotation !== node._rotation) { + node._rotation = rotation; if (style.externalGraphic) { this.graphicRotate(node, xOffset, yOffset, style); // make the fill fully transparent, because we now have @@ -303,7 +305,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { // in graphicRotate fill.opacity = 0; } else if(node._geometryClass === "OpenLayers.Geometry.Point") { - node.style.rotation = style.rotation; + node.style.rotation = rotation || 0; } } @@ -359,6 +361,7 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { graphicRotate: function(node, xOffset, yOffset, style) { var style = style || node._style; var options = node._options; + var rotation = style.rotation || 0; var aspectRatio, size; if (!(style.graphicWidth && style.graphicHeight)) { @@ -412,9 +415,9 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { "progid:DXImageTransform.Microsoft.AlphaImageLoader(" + "src='', sizingMethod='scale')"; - var rotation = style.rotation * Math.PI / 180; - var sintheta = Math.sin(rotation); - var costheta = Math.cos(rotation); + var rot = rotation * Math.PI / 180; + var sintheta = Math.sin(rot); + var costheta = Math.cos(rot); // do the rotation on the image var filter =