Merge pull request #143 from jorix/stop-freehand

Handler.Path: Stop freehand using "maxVertices"
This commit is contained in:
Éric Lemoine
2012-01-12 12:08:12 -08:00
2 changed files with 45 additions and 3 deletions

View File

@@ -30,8 +30,7 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
* APIProperty: maxVertices
* {Number} The maximum number of vertices which can be drawn by this
* handler. When the number of vertices reaches maxVertices, the
* geometry is automatically finalized. This property doesn't
* apply if freehand is set. Default is null.
* geometry is automatically finalized. Default is null.
*/
maxVertices: null,
@@ -446,7 +445,13 @@ OpenLayers.Handler.Path = OpenLayers.Class(OpenLayers.Handler.Point, {
if(this.persist) {
this.destroyPersistedFeature();
}
this.addPoint(evt.xy);
if(this.maxVertices && this.line &&
this.line.geometry.components.length === this.maxVertices) {
this.removePoint()
this.finalize();
} else {
this.addPoint(evt.xy);
}
return false;
}
if (!this.touch && (!this.mouseDown || this.stoppedDown)) {

View File

@@ -534,6 +534,43 @@
map.destroy();
}
function test_freehand_maxVertices(t) {
t.plan(1);
var map = new OpenLayers.Map("map", {
resolutions: [1]
});
var layer = new OpenLayers.Layer.Vector("foo", {
maxExtent: new OpenLayers.Bounds(-10, -10, 10, 10),
isBaseLayer: true
});
map.addLayer(layer);
var control = new OpenLayers.Control({});
var log = {};
var MAX_VERTICES = 2;
var doneCallback = function(geo) {
t.eq(geo.components.length, MAX_VERTICES,
'When maxVertices is reached, the geometry is finalized automatically');
};
var handler = new OpenLayers.Handler.Path(control,
{'done': doneCallback},
{freehand: true,
maxVertices: MAX_VERTICES});
control.handler = handler;
map.addControl(control);
map.setCenter(new OpenLayers.LonLat(0, 0), 0);
// mock up feature freehand drawing
handler.activate();
var evt = {xy: new OpenLayers.Pixel(0, 0)};
handler.mousemove(evt);
handler.mousedown(evt);
evt = {xy: new OpenLayers.Pixel(20, 20)};
handler.mousemove(evt);
evt = {xy: new OpenLayers.Pixel(40, 40)};
handler.mousemove(evt);
map.destroy();
}
/**
* Helper functions for editing method tests
*/