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:
@@ -114,6 +114,15 @@ OpenLayers.Control.ModifyFeature = OpenLayers.Class(OpenLayers.Control, {
|
||||
*/
|
||||
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
|
||||
* {Integer} Bitfields specifying the modification mode. Defaults to
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user