From 48f357d5185bb219861c2f1e80b1f15e190d5980 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Thu, 29 Oct 2020 22:06:51 +0100 Subject: [PATCH] Visual feedback for removeLastPoint() on touch devices --- src/ol/interaction/Draw.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/ol/interaction/Draw.js b/src/ol/interaction/Draw.js index d92049fbb7..8f8e502dec 100644 --- a/src/ol/interaction/Draw.js +++ b/src/ol/interaction/Draw.js @@ -215,6 +215,13 @@ class Draw extends PointerInteraction { */ this.lastDragTime_; + /** + * Pointer type of the last pointermove event + * @type {string} + * @private + */ + this.pointerType_; + /** * @type {boolean} * @private @@ -535,7 +542,7 @@ class Draw extends PointerInteraction { event.type === MapBrowserEventType.POINTERDOWN ) { pass = false; - } else if (move && this.getPointerCount() === 1) { + } else if (move && this.getPointerCount() < 2) { pass = event.type === MapBrowserEventType.POINTERMOVE; if (pass && this.freehand_) { this.handlePointerMove_(event); @@ -646,6 +653,7 @@ class Draw extends PointerInteraction { * @private */ handlePointerMove_(event) { + this.pointerType_ = event.originalEvent.pointerType; if ( this.downPx_ && ((!this.freehand_ && this.shouldHandle_) || @@ -887,14 +895,26 @@ class Draw extends PointerInteraction { if (this.mode_ === Mode.LINE_STRING) { coordinates = /** @type {LineCoordType} */ (this.sketchCoords_); coordinates.splice(-2, 1); - this.geometryFunction_(coordinates, geometry, projection); if (coordinates.length >= 2) { this.finishCoordinate_ = coordinates[coordinates.length - 2].slice(); + if (this.pointerType_ !== 'mouse') { + const finishCoordinate = this.finishCoordinate_.slice(); + coordinates.pop(); + coordinates.push(finishCoordinate); + this.sketchPoint_.setGeometry(new Point(finishCoordinate)); + } } + this.geometryFunction_(coordinates, geometry, projection); } else if (this.mode_ === Mode.POLYGON) { coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0]; coordinates.splice(-2, 1); sketchLineGeom = this.sketchLine_.getGeometry(); + if (this.pointerType_ !== 'mouse') { + const finishCoordinate = coordinates[coordinates.length - 2].slice(); + coordinates.pop(); + coordinates.push(finishCoordinate); + this.sketchPoint_.setGeometry(new Point(finishCoordinate)); + } sketchLineGeom.setCoordinates(coordinates); this.geometryFunction_(this.sketchCoords_, geometry, projection); }