From 409c962caf829b5beadfaeb58ec7ebd55f627cc8 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Fri, 21 Dec 2018 22:23:56 +0100 Subject: [PATCH] Reset lastDragTime when condition is not met --- src/ol/interaction/Draw.js | 1 + test/spec/ol/interaction/draw.test.js | 43 ++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/ol/interaction/Draw.js b/src/ol/interaction/Draw.js index 4ef5e4f717..5ad9e1ef4f 100644 --- a/src/ol/interaction/Draw.js +++ b/src/ol/interaction/Draw.js @@ -543,6 +543,7 @@ class Draw extends PointerInteraction { this.downPx_ = event.pixel; return true; } else { + this.lastDragTime_ = undefined; return false; } } diff --git a/test/spec/ol/interaction/draw.test.js b/test/spec/ol/interaction/draw.test.js index cfc5f45a89..1e934b5df5 100644 --- a/test/spec/ol/interaction/draw.test.js +++ b/test/spec/ol/interaction/draw.test.js @@ -4,7 +4,7 @@ import MapBrowserPointerEvent from '../../../../src/ol/MapBrowserPointerEvent.js import View from '../../../../src/ol/View.js'; import {equals} from '../../../../src/ol/array.js'; import {listen} from '../../../../src/ol/events.js'; -import {always} from '../../../../src/ol/events/condition.js'; +import {always, shiftKeyOnly, altKeyOnly} from '../../../../src/ol/events/condition.js'; import Circle from '../../../../src/ol/geom/Circle.js'; import LineString from '../../../../src/ol/geom/LineString.js'; import MultiLineString from '../../../../src/ol/geom/MultiLineString.js'; @@ -492,6 +492,47 @@ describe('ol.interaction.Draw', function() { }); + describe('drawing with a condition', function() { + let draw; + beforeEach(function() { + draw = new Draw({ + source: source, + type: 'LineString', + condition: shiftKeyOnly, + freehandCondition: altKeyOnly + }); + map.addInteraction(draw); + }); + + it('finishes draw sequence correctly', function() { + // first point + simulateEvent('pointermove', 10, 20, true); + simulateEvent('pointerdown', 10, 20, true); + simulateEvent('pointerup', 10, 20, true); + + // second point + simulateEvent('pointermove', 30, 20, true); + simulateEvent('pointerdown', 30, 20, true); + simulateEvent('pointerup', 30, 20, true); + + // finish on second point + simulateEvent('pointerdown', 30, 20, true); + simulateEvent('pointerup', 30, 20, true); + + const features = source.getFeatures(); + expect(features).to.have.length(1); + const geometry = features[0].getGeometry(); + expect(geometry).to.be.a(LineString); + expect(geometry.getCoordinates()).to.eql([[10, -20], [30, -20]]); + + // without modifier, to be handled by the map's DragPan interaction + simulateEvent('pointermove', 20, 20); + simulateEvent('pointerdown', 20, 20); + simulateEvent('pointermove', 10, 30); + expect(draw.lastDragTime_).to.be(undefined); + }); + }); + describe('drawing with a finishCondition', function() { beforeEach(function() { const draw = new Draw({