From 812cb7fb123e769205ebefa8ad95f6847ea0c44f Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Thu, 7 Nov 2013 11:02:04 -0700 Subject: [PATCH 1/2] Leave the down_ event set The other "up" type listeners (for touch and pointer) do not set this to null. This event can be of use to a click listener that might want to compare the down position to the click event's position. --- src/ol/mapbrowserevent.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index bbcd79cb54..b9e991bc82 100644 --- a/src/ol/mapbrowserevent.js +++ b/src/ol/mapbrowserevent.js @@ -221,7 +221,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); } From 22fb4182361f7ddad34d90bf2be19c854914f373 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Thu, 7 Nov 2013 11:21:01 -0700 Subject: [PATCH 2/2] Provide a method to get the most recent down type event This will allow interactions to conditionally handle later events based on the down event. --- src/ol/mapbrowserevent.js | 11 ++++++++++ test/spec/ol/mapbrowserevent.test.js | 32 ++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/src/ol/mapbrowserevent.js b/src/ol/mapbrowserevent.js index b9e991bc82..e1fc29b01d 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 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');