From da8766d9d6a2753fe96cc0d79a7072488b035824 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Wed, 1 Dec 2010 19:40:17 +0000 Subject: [PATCH] give ModifyFeature control a vertexRenderIntent property. r=tschaub (closes #2955) git-svn-id: http://svn.openlayers.org/trunk/openlayers@10938 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Control/ModifyFeature.js | 16 +++++++++++- tests/Control/ModifyFeature.html | 34 ++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/lib/OpenLayers/Control/ModifyFeature.js b/lib/OpenLayers/Control/ModifyFeature.js index 72ee2193c9..3a23de62fe 100644 --- a/lib/OpenLayers/Control/ModifyFeature.js +++ b/lib/OpenLayers/Control/ModifyFeature.js @@ -113,6 +113,15 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { * {Object} A symbolizer to be used for virtual vertices. */ virtualStyle: null, + + /** + * APIProperty: vertexRenderIntent + * {String} The renderIntent to use for vertices. If no is + * provided, this renderIntent will also be used for virtual vertices, with + * a fillOpacity and strokeOpacity of 0.3. Default is null, which means + * that the layer's default style will be used for vertices. + */ + vertexRenderIntent: null, /** * APIProperty: mode @@ -193,11 +202,14 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { * control. */ initialize: function(layer, options) { + options = options || {}; this.layer = layer; this.vertices = []; this.virtualVertices = []; this.virtualStyle = OpenLayers.Util.extend({}, - this.layer.style || this.layer.styleMap.createSymbolizer()); + this.layer.style || + this.layer.styleMap.createSymbolizer(null, options.vertexRenderIntent) + ); this.virtualStyle.fillOpacity = 0.3; this.virtualStyle.strokeOpacity = 0.3; this.deleteCodes = [46, 68]; @@ -622,6 +634,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { if(geometry.CLASS_NAME == "OpenLayers.Geometry.Point") { vertex = new OpenLayers.Feature.Vector(geometry); vertex._sketch = true; + vertex.renderIntent = control.vertexRenderIntent; control.vertices.push(vertex); } else { var numVert = geometry.components.length; @@ -633,6 +646,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, { if(component.CLASS_NAME == "OpenLayers.Geometry.Point") { vertex = new OpenLayers.Feature.Vector(component); vertex._sketch = true; + vertex.renderIntent = control.vertexRenderIntent; control.vertices.push(vertex); } else { collectComponentVertices(component); diff --git a/tests/Control/ModifyFeature.html b/tests/Control/ModifyFeature.html index 75de50970e..b2e241dd5d 100644 --- a/tests/Control/ModifyFeature.html +++ b/tests/Control/ModifyFeature.html @@ -473,9 +473,13 @@ } function test_onModificationStart(t) { - t.plan(1); + t.plan(5); var map = new OpenLayers.Map("map"); - var layer = new OpenLayers.Layer.Vector(); + var layer = new OpenLayers.Layer.Vector(null, { + styleMap: new OpenLayers.StyleMap({ + "vertex": new OpenLayers.Style({foo: "bar"}) + }, {extendDefault: false}) + }); map.addLayer(layer); var control = new OpenLayers.Control.ModifyFeature(layer); map.addControl(control); @@ -483,14 +487,38 @@ // make sure onModificationStart is called on feature selection var testFeature = new OpenLayers.Feature.Vector( - new OpenLayers.Geometry.Point(Math.random(), Math.random()) + OpenLayers.Geometry.fromWKT("LINESTRING(3 4,10 50,20 25)") ); + layer.addFeatures([testFeature]); control.onModificationStart = function(feature) { t.eq(feature.id, testFeature.id, "onModificationStart called with the right feature"); }; control.selectFeature(testFeature); + // make sure styles are set correctly from default style + t.eq(control.virtualStyle, OpenLayers.Util.applyDefaults({ + strokeOpacity: 0.3, + fillOpacity: 0.3 + }, OpenLayers.Feature.Vector.style["default"]), "virtual style set correctly"); + var vertex = layer.features[layer.features.length-1]; + t.eq(vertex.renderIntent, null, "vertex style set correctly - uses default style"); + control.unselectFeature(testFeature); + + // make sure styles are set correctly with vertexRenderIntent + control = new OpenLayers.Control.ModifyFeature(layer, {vertexRenderIntent: "vertex"}); + map.addControl(control); + control.activate(); + control.selectFeature(testFeature); + t.eq(control.virtualStyle, { + strokeOpacity: 0.3, + fillOpacity: 0.3, + foo: "bar" + }, "virtual style set correctly"); + var vertex = layer.features[layer.features.length-1]; + t.eq(vertex.renderIntent, "vertex", "vertex style set correctly - uses 'vertex' renderIntent"); + control.unselectFeature(testFeature); + map.destroy(); }