From 197043d24902df1c041b8f3e11bec2b885c16b49 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Fri, 1 Aug 2008 21:35:35 +0000 Subject: [PATCH] fixed event handling and rendering of graphicName symbols for Safari and Opera. r=crschmidt (closes #1653) git-svn-id: http://svn.openlayers.org/trunk/openlayers@7671 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Renderer/Elements.js | 7 +++++-- lib/OpenLayers/Renderer/SVG.js | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/lib/OpenLayers/Renderer/Elements.js b/lib/OpenLayers/Renderer/Elements.js index 65ff0a1574..09dc7cea2e 100644 --- a/lib/OpenLayers/Renderer/Elements.js +++ b/lib/OpenLayers/Renderer/Elements.js @@ -692,8 +692,11 @@ OpenLayers.Renderer.Elements = OpenLayers.Class(OpenLayers.Renderer, { * happened on a layer. */ getFeatureIdFromEvent: function(evt) { - var node = evt.target || evt.srcElement; - return node._featureId; + var target = evt.target; + var useElement = target && target.correspondingUseElement; + var node = useElement ? useElement : (target || evt.srcElement); + var featureId = node._featureId; + return featureId; }, /** diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index 4aad563b06..2f2f8370aa 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -250,11 +250,19 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { // This is a workaround for strange rendering behavior in FF3. if (node.getAttributeNS(this.xlinkns, "href") != href) { node.setAttributeNS(this.xlinkns, "href", href); + } else if (size != parseFloat(node.getAttributeNS(null, "width"))) { + // hide the element (and force a reflow so it really gets + // hidden. This workaround is needed for Safari. + node.style.visibility = "hidden"; + this.container.scrollLeft = this.container.scrollLeft; } node.setAttributeNS(null, "width", size); node.setAttributeNS(null, "height", size); node.setAttributeNS(null, "x", pos.x - offset); node.setAttributeNS(null, "y", pos.y - offset); + // set the visibility back to normal (after the Safari + // workaround above) + node.style.visibility = ""; } else { node.setAttributeNS(null, "r", style.pointRadius); }