From 839348a3b261d485aaa56b68e61a92ea9271fc5b Mon Sep 17 00:00:00 2001 From: ahocevar Date: Sat, 24 Oct 2009 04:41:36 +0000 Subject: [PATCH] added labelXOffset and labelYOffset symbolizer properties. Thanks madair for the original patch, and thanks jlacroix for turning it into symbolizer properties so nicely. p=jlacroix, r=me (fixes #2312) git-svn-id: http://svn.openlayers.org/trunk/openlayers@9755 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- examples/vector-features-with-text.html | 22 ++++++++++++++++++++-- lib/OpenLayers/Feature/Vector.js | 2 ++ lib/OpenLayers/Renderer.js | 9 ++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/examples/vector-features-with-text.html b/examples/vector-features-with-text.html index 06f78043e2..3f3eb2bc4e 100644 --- a/examples/vector-features-with-text.html +++ b/examples/vector-features-with-text.html @@ -33,7 +33,9 @@ fontSize: "12px", fontFamily: "Courier New, monospace", fontWeight: "bold", - labelAlign: "${align}" + labelAlign: "${align}", + labelXOffset: "${xOffset}", + labelYOffset: "${yOffset}" }}), renderers: renderer }); @@ -83,6 +85,22 @@ favColor: 'black', align: 'rt' }); + + // Create a point feature to show the label offset options + var labelOffsetPoint = new OpenLayers.Geometry.Point(-101.04, 35.68); + var labelOffsetFeature = new OpenLayers.Feature.Vector(labelOffsetPoint); + labelOffsetFeature.attributes = { + name: "offset", + age: 22, + favColor: 'blue', + align: "cm", + // positive value moves the label to the right + xOffset: 50, + // negative value moves the label down + yOffset: -15 + }; + + var nullFeature = new OpenLayers.Feature.Vector(null); nullFeature.attributes = { name: "toto is some text about the world", @@ -94,7 +112,7 @@ map.addLayer(vectorLayer); vectorLayer.drawFeature(multiFeature); map.setCenter(new OpenLayers.LonLat(point.x, point.y), 3); - vectorLayer.addFeatures([pointFeature, polygonFeature, multiFeature, nullFeature ]); + vectorLayer.addFeatures([pointFeature, polygonFeature, multiFeature, labelOffsetFeature, nullFeature ]); } diff --git a/lib/OpenLayers/Feature/Vector.js b/lib/OpenLayers/Feature/Vector.js index a4cc11dd44..a5f8d56ba5 100644 --- a/lib/OpenLayers/Feature/Vector.js +++ b/lib/OpenLayers/Feature/Vector.js @@ -356,6 +356,8 @@ OpenLayers.Feature.Vector = OpenLayers.Class(OpenLayers.Feature, { * alignment. Valid values for horizontal alignment: "l"=left, "c"=center, "r"=right. Valid values for vertical * alignment: "t"=top, "m"=middle, "b"=bottom. Example values: "lt", "cm", "rb". The canvas renderer does not * support vertical alignment, it will always use "b". + * labelXOffset - {Number} Pixel offset along the positive x axis for displacing the label. + * labelYOffset - {Number} Pixel offset along the positive y axis for displacing the label. * labelSelect - {Boolean} If set to true, labels will be selectable using SelectFeature or similar controls. * Default is false. * fontColor - {String} The font color for the label, to be provided like CSS. diff --git a/lib/OpenLayers/Renderer.js b/lib/OpenLayers/Renderer.js index 93e841f0f6..5e461d2c64 100644 --- a/lib/OpenLayers/Renderer.js +++ b/lib/OpenLayers/Renderer.js @@ -178,7 +178,14 @@ OpenLayers.Renderer = OpenLayers.Class({ } var rendered = this.drawGeometry(feature.geometry, style, feature.id); if(style.display != "none" && style.label && rendered !== false) { - this.drawText(feature.id, style, feature.geometry.getCentroid()); + var location = feature.geometry.getCentroid(); + if(style.labelXOffset || style.labelYOffset) { + xOffset = isNaN(style.labelXOffset) ? 0 : style.labelXOffset; + yOffset = isNaN(style.labelYOffset) ? 0 : style.labelYOffset; + var res = this.getResolution(); + location.move(xOffset*res, yOffset*res); + } + this.drawText(feature.id, style, location); } else { this.removeText(feature.id); }