diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index b34c025a8c..be216e27e4 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -185,6 +185,17 @@ ol.MapBrowserEventHandler = function(map) { goog.inherits(ol.MapBrowserEventHandler, goog.events.EventTarget); +/** + * Get the last "down" type event. This will be set on mousedown, + * touchstart, and pointerdown. + * @return {goog.events.BrowserEvent} The most recent "down" type event (or null + * if none have occurred). + */ +ol.MapBrowserEventHandler.prototype.getDown = function() { + return this.down_; +}; + + /** * @param {goog.events.BrowserEvent} browserEvent Browser event. * @private @@ -221,7 +232,6 @@ ol.MapBrowserEventHandler.prototype.handleMouseUp_ = function(browserEvent) { var newEvent = new ol.MapBrowserEvent( ol.MapBrowserEvent.EventType.DRAGEND, this.map_, browserEvent); this.dispatchEvent(newEvent); - this.down_ = null; } else if (browserEvent.isMouseActionButton()) { this.emulateClick_(browserEvent); } diff --git a/test/spec/ol/mapbrowserevent.test.js b/test/spec/ol/mapbrowserevent.test.js index cf2b385fc7..6dde480390 100644 --- a/test/spec/ol/mapbrowserevent.test.js +++ b/test/spec/ol/mapbrowserevent.test.js @@ -51,8 +51,40 @@ describe('ol.MapBrowserEventHandler', function() { }); }); + + describe('#getDown()', function() { + + var handler; + beforeEach(function() { + handler = new ol.MapBrowserEventHandler(new ol.Map({})); + }); + + it('returns null if no "down" type event has been handled', function() { + expect(handler.getDown()).to.be(null); + }); + + it('returns an event after handleMouseDown_ has been called', function() { + var event = new goog.events.BrowserEvent({}); + handler.handleMouseDown_(event); + expect(handler.getDown()).to.be(event); + }); + + it('returns an event after handlePointerDown_ has been called', function() { + var event = new goog.events.BrowserEvent({}); + handler.handlePointerDown_(event); + expect(handler.getDown()).to.be(event); + }); + + it('returns an event after handleTouchStart_ has been called', function() { + var event = new goog.events.BrowserEvent({}); + handler.handleTouchStart_(event); + expect(handler.getDown()).to.be(event); + }); + + }); }); goog.require('goog.events'); +goog.require('goog.events.BrowserEvent'); goog.require('ol.Map'); goog.require('ol.MapBrowserEventHandler');