diff --git a/src/ol/events/condition.js b/src/ol/events/condition.js index 673eae29bc..280a36bd87 100644 --- a/src/ol/events/condition.js +++ b/src/ol/events/condition.js @@ -230,6 +230,19 @@ export const mouseOnly = function(mapBrowserEvent) { return pointerEvent.pointerType == 'mouse'; }; +export const touchOnly = (mapBrowserEvent) => { + const pointerEvt = /** @type {import("../MapBrowserPointerEvent").default} */ (mapBrowserEvent).pointerEvent; + assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event + // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType + return pointerEvt.pointerType === 'touch'; +}; + +export const penOnly = (mapBrowserEvent) => { + const pointerEvt = /** @type {import("../MapBrowserPointerEvent").default} */ (mapBrowserEvent).pointerEvent; + assert(pointerEvt !== undefined, 56); // mapBrowserEvent must originate from a pointer event + // see http://www.w3.org/TR/pointerevents/#widl-PointerEvent-pointerType + return pointerEvt.pointerType === 'pen'; +}; /** * Return `true` if the event originates from a primary pointer in diff --git a/src/ol/interaction/Draw.js b/src/ol/interaction/Draw.js index 3d28104798..d9b165b386 100644 --- a/src/ol/interaction/Draw.js +++ b/src/ol/interaction/Draw.js @@ -528,7 +528,7 @@ class Draw extends PointerInteraction { handleDownEvent(event) { this.shouldHandle_ = !this.freehand_; - if (this.freehand_) { + if (this.freehand_ && ((this.condition_ && this.condition_(event)) || true)) { this.downPx_ = event.pixel; if (!this.finishCoordinate_) { this.startDrawing_(event); @@ -548,7 +548,6 @@ class Draw extends PointerInteraction { } } - /** * @inheritDoc */