From 35d26f1280f281533811e5e1176c3a7a86d6c6e6 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Thu, 13 Aug 2015 09:14:31 +0200 Subject: [PATCH 1/3] Update closure-library to latest commit --- closure-util.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/closure-util.json b/closure-util.json index 1187d1d4a6..1568b295dd 100644 --- a/closure-util.json +++ b/closure-util.json @@ -1,3 +1,3 @@ { - "library_url": "https://github.com/google/closure-library/archive/0011afd534469ba111786fe68300a634e08a4d80.zip" + "library_url": "https://github.com/google/closure-library/archive/a5f9b8a.zip" } From 8730fc8824c74e5e5bdfbf79b4e923e92b788dd6 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Thu, 13 Aug 2015 09:14:53 +0200 Subject: [PATCH 2/3] Remove goog.style.getRelativePosition workaround Fixed upstream with https://github.com/google/closure-library/pull/424 --- src/ol/map.js | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/ol/map.js b/src/ol/map.js index baaec878db..bdad825bcc 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -692,22 +692,8 @@ ol.Map.prototype.getEventCoordinate = function(event) { * @api stable */ ol.Map.prototype.getEventPixel = function(event) { - // goog.style.getRelativePosition is based on event.targetTouches, - // but touchend and touchcancel events have no targetTouches when - // the last finger is removed from the screen. - // So we ourselves compute the position of touch events. - // See https://github.com/google/closure-library/pull/323 - if (goog.isDef(event.changedTouches)) { - var touch = event.changedTouches[0]; - var viewportPosition = goog.style.getClientPosition(this.viewport_); - return [ - touch.clientX - viewportPosition.x, - touch.clientY - viewportPosition.y - ]; - } else { - var eventPosition = goog.style.getRelativePosition(event, this.viewport_); - return [eventPosition.x, eventPosition.y]; - } + var eventPosition = goog.style.getRelativePosition(event, this.viewport_); + return [eventPosition.x, eventPosition.y]; }; From fdba4fc381fbc564c4c299cfb158e2742aab40f4 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Wed, 19 Aug 2015 13:00:49 +0200 Subject: [PATCH 3/3] Add a test for ol.Map#getEventPixel --- test/spec/ol/map.test.js | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/test/spec/ol/map.test.js b/test/spec/ol/map.test.js index 42b5054be4..8bddc2f2cc 100644 --- a/test/spec/ol/map.test.js +++ b/test/spec/ol/map.test.js @@ -271,12 +271,54 @@ describe('ol.Map', function() { }); }); }); + + describe('#getEventPixel', function() { + + var target; + + beforeEach(function() { + target = document.createElement('div'); + target.style.position = 'absolute'; + target.style.top = '10px'; + target.style.left = '20px'; + target.style.width = '800px'; + target.style.height = '400px'; + + document.body.appendChild(target); + }); + afterEach(function() { + document.body.removeChild(target); + }); + + it('works with touchend events', function() { + + var map = new ol.Map({ + target: target + }); + + var browserEvent = new goog.events.BrowserEvent({ + type: 'touchend', + target: target, + changedTouches: [{ + clientX: 100, + clientY: 200 + }] + }); + var position = map.getEventPixel(browserEvent.getBrowserEvent()); + // 80 = clientX - target.style.left + expect(position[0]).to.eql(80); + // 190 = clientY - target.style.top + expect(position[1]).to.eql(190); + }); + }); + }); }); goog.require('goog.dispose'); goog.require('goog.dom'); +goog.require('goog.events.BrowserEvent'); goog.require('goog.events.EventType'); goog.require('ol.Map'); goog.require('ol.MapEvent');