From 567d32f35fadd1c980b4c9c6c4b9f0f753213e7e Mon Sep 17 00:00:00 2001 From: ahocevar Date: Thu, 19 Mar 2009 18:53:15 +0000 Subject: [PATCH] Suport for tooltips on externalGraphics using the graphicTitle symbolizer property. Only supported in IE and FF. Patch by zspitzer, modified by me (added some docs, moved code that sets the title tag so it gets executed for externalGraphics. p=zspitzer, r=me (closes #1946) git-svn-id: http://svn.openlayers.org/trunk/openlayers@9097 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- examples/vector-features.html | 2 ++ lib/OpenLayers/Feature/Vector.js | 1 + lib/OpenLayers/Renderer/Canvas.js | 4 ++++ lib/OpenLayers/Renderer/SVG.js | 5 ++++- lib/OpenLayers/Renderer/VML.js | 3 +++ 5 files changed, 14 insertions(+), 1 deletion(-) diff --git a/examples/vector-features.html b/examples/vector-features.html index bd64da23ac..743cd40d09 100644 --- a/examples/vector-features.html +++ b/examples/vector-features.html @@ -62,6 +62,8 @@ style_mark.graphicXOffset = -(style_mark.graphicWidth/2); // this is the default value style_mark.graphicYOffset = -style_mark.graphicHeight; style_mark.externalGraphic = "../img/marker.png"; + // graphicTitle only works in Firefox and Internet Explorer + style_mark.graphicTitle = "this is a test tooltip"; var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry", {style: layer_style}); diff --git a/lib/OpenLayers/Feature/Vector.js b/lib/OpenLayers/Feature/Vector.js index bd704d4cf9..0c4ac678a7 100644 --- a/lib/OpenLayers/Feature/Vector.js +++ b/lib/OpenLayers/Feature/Vector.js @@ -332,6 +332,7 @@ OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, { * graphicZIndex - {Number} The integer z-index value to use in rendering. * graphicName - {String} Named graphic to use when rendering points. Supported values include "circle" (default), * "square", "star", "x", "cross", "triangle". + * graphicTitle - {String} Tooltip for an external graphic. Only supported in Firefox and Internet Explorer. * backgroundGraphic - {String} Url to a graphic to be used as the background under an externalGraphic. * backgroundGraphicZIndex - {Number} The integer z-index value to use in rendering the background graphic. * backgroundXOffset - {Number} The x offset (in pixels) for the background graphic. diff --git a/lib/OpenLayers/Renderer/Canvas.js b/lib/OpenLayers/Renderer/Canvas.js index 727261732c..8f74bca196 100644 --- a/lib/OpenLayers/Renderer/Canvas.js +++ b/lib/OpenLayers/Renderer/Canvas.js @@ -190,6 +190,10 @@ OpenLayers.Renderer.Canvas = OpenLayers.Class(OpenLayers.Renderer, { drawExternalGraphic: function(pt, style) { var img = new Image(); img.src = style.externalGraphic; + + if(style.graphicTitle) { + img.title=style.graphicTitle; + } var width = style.graphicWidth || style.graphicHeight; var height = style.graphicHeight || style.graphicWidth; diff --git a/lib/OpenLayers/Renderer/SVG.js b/lib/OpenLayers/Renderer/SVG.js index 58d0b42809..ee630ce7df 100644 --- a/lib/OpenLayers/Renderer/SVG.js +++ b/lib/OpenLayers/Renderer/SVG.js @@ -250,6 +250,9 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { if (style.externalGraphic) { pos = this.getPosition(node); + if (style.graphicTitle) { + node.setAttributeNS(null, "title", style.graphicTitle); + } if (style.graphicWidth && style.graphicHeight) { node.setAttributeNS(null, "preserveAspectRatio", "none"); } @@ -330,7 +333,7 @@ OpenLayers.Renderer.SVG = OpenLayers.Class(OpenLayers.Renderer.Elements, { if (style.pointerEvents) { node.setAttributeNS(null, "pointer-events", style.pointerEvents); } - + if (style.cursor != null) { node.setAttributeNS(null, "cursor", style.cursor); } diff --git a/lib/OpenLayers/Renderer/VML.js b/lib/OpenLayers/Renderer/VML.js index 5cce601a48..b4d01bdae3 100644 --- a/lib/OpenLayers/Renderer/VML.js +++ b/lib/OpenLayers/Renderer/VML.js @@ -199,6 +199,9 @@ OpenLayers.Renderer.VML = OpenLayers.Class(OpenLayers.Renderer.Elements, { if (node._geometryClass == "OpenLayers.Geometry.Point") { if (style.externalGraphic) { this.drawGraphic(node, geometry, style); + if (style.graphicTitle) { + node.title=style.graphicTitle; + } // modify style/options for fill and stroke styling below style.fillColor = "none"; options.isStroked = false;