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
This commit is contained in:
ahocevar
2010-12-01 19:40:17 +00:00
parent b3f7d25c37
commit da8766d9d6
2 changed files with 46 additions and 4 deletions

View File

@@ -113,6 +113,15 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
* {Object} A symbolizer to be used for virtual vertices. * {Object} A symbolizer to be used for virtual vertices.
*/ */
virtualStyle: null, virtualStyle: null,
/**
* APIProperty: vertexRenderIntent
* {String} The renderIntent to use for vertices. If no <virtualStyle> 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 * APIProperty: mode
@@ -193,11 +202,14 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
* control. * control.
*/ */
initialize: function(layer, options) { initialize: function(layer, options) {
options = options || {};
this.layer = layer; this.layer = layer;
this.vertices = []; this.vertices = [];
this.virtualVertices = []; this.virtualVertices = [];
this.virtualStyle = OpenLayers.Util.extend({}, 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.fillOpacity = 0.3;
this.virtualStyle.strokeOpacity = 0.3; this.virtualStyle.strokeOpacity = 0.3;
this.deleteCodes = [46, 68]; this.deleteCodes = [46, 68];
@@ -622,6 +634,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
if(geometry.CLASS_NAME == "OpenLayers.Geometry.Point") { if(geometry.CLASS_NAME == "OpenLayers.Geometry.Point") {
vertex = new OpenLayers.Feature.Vector(geometry); vertex = new OpenLayers.Feature.Vector(geometry);
vertex._sketch = true; vertex._sketch = true;
vertex.renderIntent = control.vertexRenderIntent;
control.vertices.push(vertex); control.vertices.push(vertex);
} else { } else {
var numVert = geometry.components.length; var numVert = geometry.components.length;
@@ -633,6 +646,7 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
if(component.CLASS_NAME == "OpenLayers.Geometry.Point") { if(component.CLASS_NAME == "OpenLayers.Geometry.Point") {
vertex = new OpenLayers.Feature.Vector(component); vertex = new OpenLayers.Feature.Vector(component);
vertex._sketch = true; vertex._sketch = true;
vertex.renderIntent = control.vertexRenderIntent;
control.vertices.push(vertex); control.vertices.push(vertex);
} else { } else {
collectComponentVertices(component); collectComponentVertices(component);

View File

@@ -473,9 +473,13 @@
} }
function test_onModificationStart(t) { function test_onModificationStart(t) {
t.plan(1); t.plan(5);
var map = new OpenLayers.Map("map"); 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); map.addLayer(layer);
var control = new OpenLayers.Control.ModifyFeature(layer); var control = new OpenLayers.Control.ModifyFeature(layer);
map.addControl(control); map.addControl(control);
@@ -483,14 +487,38 @@
// make sure onModificationStart is called on feature selection // make sure onModificationStart is called on feature selection
var testFeature = new OpenLayers.Feature.Vector( 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) { control.onModificationStart = function(feature) {
t.eq(feature.id, testFeature.id, t.eq(feature.id, testFeature.id,
"onModificationStart called with the right feature"); "onModificationStart called with the right feature");
}; };
control.selectFeature(testFeature); 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(); map.destroy();
} }