From dea307e53a4be919432c6cfa52dcd7712dfbbe5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Thu, 12 Jul 2012 08:18:22 +0200 Subject: [PATCH] typed objects for map events --- src/ol/handler/Click.js | 6 +++++- src/ol/handler/Drag.js | 25 ++++++++++++------------- src/ol/handler/MouseWheel.js | 9 ++++++--- src/ol/mapevent.js | 36 ++++++++++++++++++++++++++++++++++++ src/ol/mapeventtype.js | 17 +++++++++++++++++ 5 files changed, 76 insertions(+), 17 deletions(-) create mode 100644 src/ol/mapevent.js create mode 100644 src/ol/mapeventtype.js diff --git a/src/ol/handler/Click.js b/src/ol/handler/Click.js index e19df4bb2d..b4d82ae0a7 100644 --- a/src/ol/handler/Click.js +++ b/src/ol/handler/Click.js @@ -9,6 +9,9 @@ goog.provide('ol.handler.Click'); +goog.require('ol.MapEvent'); +goog.require('ol.MapEventType'); + goog.require('goog.asserts'); goog.require('goog.events'); goog.require('goog.events.EventType'); @@ -59,6 +62,7 @@ ol.handler.Click.prototype.disposeInternal = function() { ol.handler.Click.prototype.handleClick = function(e) { // do not emit a map click event after a drag if (!this.states_.dragged) { - goog.events.dispatchEvent(this.map_, e); + var newE = new ol.MapEvent(ol.MapEventType.CLICK, e); + goog.events.dispatchEvent(this.map_, newE); } }; diff --git a/src/ol/handler/Drag.js b/src/ol/handler/Drag.js index ee6dd63285..97b97bb9eb 100644 --- a/src/ol/handler/Drag.js +++ b/src/ol/handler/Drag.js @@ -9,6 +9,9 @@ goog.provide('ol.handler.Drag'); +goog.require('ol.MapEvent'); +goog.require('ol.MapEventType'); + goog.require('goog.asserts'); goog.require('goog.events'); goog.require('goog.events.Event'); @@ -91,9 +94,7 @@ ol.handler.Drag.prototype.handleDragStart = function(e) { this.states_.dragged = false; this.prevX_ = e.clientX; this.prevY_ = e.clientY; - var newE = { - type: 'dragstart' - }; + var newE = new ol.MapEvent(ol.MapEventType.DRAGSTART, e); goog.events.dispatchEvent(this.map_, newE); // this is to prevent page scrolling @@ -109,11 +110,9 @@ ol.handler.Drag.prototype.handleDragStart = function(e) { */ ol.handler.Drag.prototype.handleDrag = function(e) { this.states_.dragged = true; - var newE = { - type: 'drag', - deltaX: e.clientX - this.prevX_, - deltaY: e.clientY - this.prevY_ - }; + var newE = new ol.MapEvent(ol.MapEventType.DRAG, e); + newE.deltaX = e.clientX - this.prevX_; + newE.deltaY = e.clientY - this.prevY_; this.prevX_ = e.clientX; this.prevY_ = e.clientY; var rt = goog.events.dispatchEvent(this.map_, newE); @@ -123,19 +122,19 @@ ol.handler.Drag.prototype.handleDrag = function(e) { }; /** - * @param {{type, deltaX, deltaY}} e + * @param {ol.MapEvent} e */ ol.handler.Drag.prototype.defaultBehavior = function(e) { - this.map_.moveByViewportPx(e.deltaX, e.deltaY); + var deltaX = /** @type {number} */ e.deltaX; + var deltaY = /** @type {number} */ e.deltaY; + this.map_.moveByViewportPx(deltaX, deltaY); }; /** * @param {goog.fx.DragEvent} e */ ol.handler.Drag.prototype.handleDragEnd = function(e) { - var newE = { - type: 'dragend' - }; + var newE = new ol.MapEvent(ol.MapEventType.DRAGEND, e); goog.events.dispatchEvent(this.map_, newE); goog.events.unlisten(this.elt_, [goog.events.EventType.TOUCHMOVE, diff --git a/src/ol/handler/MouseWheel.js b/src/ol/handler/MouseWheel.js index e6af0bccf5..479fd099db 100644 --- a/src/ol/handler/MouseWheel.js +++ b/src/ol/handler/MouseWheel.js @@ -9,6 +9,9 @@ goog.provide('ol.handler.MouseWheel'); +goog.require('ol.MapEvent'); +goog.require('ol.MapEventType'); + goog.require('goog.asserts'); goog.require('goog.events'); goog.require('goog.style'); @@ -51,8 +54,7 @@ goog.inherits(ol.handler.MouseWheel, goog.Disposable); * @param {goog.events.MouseWheelEvent} e */ ol.handler.MouseWheel.prototype.handleMouseWheel = function(e) { - e.position = goog.style.getRelativePosition(e, this.elt_); - e.type = 'mousewheel'; + var newE = new ol.MapEvent(ol.MapEventType.MOUSEWHEEL, e); var rt = goog.events.dispatchEvent(this.map_, e); if (rt) { this.defaultBehavior(e); @@ -73,7 +75,8 @@ ol.handler.MouseWheel.prototype.defaultBehavior = function(e) { var map = me.map_, step = e.deltaY / Math.abs(e.deltaY); - map.setZoom(map.getZoom() - step, e.position); + map.setZoom(map.getZoom() - step, + goog.style.getRelativePosition(e, this.elt_)); // We don't want the page to scroll. // (MouseWheelEvent is a BrowserEvent) diff --git a/src/ol/mapevent.js b/src/ol/mapevent.js new file mode 100644 index 0000000000..aa2279ab11 --- /dev/null +++ b/src/ol/mapevent.js @@ -0,0 +1,36 @@ +goog.provide('ol.MapEvent'); + +goog.require('goog.events.Event'); + +/** + * @constructor + * @extends {goog.events.Event} + * @param {string} type Event type. + * @param {goog.events.Event} evt The wrapped event. + */ +ol.MapEvent = function(type, evt) { + goog.base(this, type); + + /** + * X displacement relative to previous drag. + * + * @type {number|undefined} + */ + this.deltaX = undefined; + + /** + * Y displacement relative to previous drag. + * + * @type {number|undefined} + */ + this.deltaY = undefined; + + /** + * The browser event or closure event (e.g. goog.fx.DragEvent} wrapped + * by this event. + * + * @type {goog.events.Event} + */ + this.event_ = evt; +}; +goog.inherits(ol.MapEvent, goog.events.Event); diff --git a/src/ol/mapeventtype.js b/src/ol/mapeventtype.js new file mode 100644 index 0000000000..6c39093c2d --- /dev/null +++ b/src/ol/mapeventtype.js @@ -0,0 +1,17 @@ +goog.provide('ol.MapEventType'); + +/** + * @enum {string} + */ +ol.MapEventType = { + // drag handler + DRAGSTART: 'dragstart', + DRAG: 'drag', + DRAGEND: 'dragend', + + // mousewheel handler + MOUSEWHEEL: 'mousewheel', + + // click handler + CLICK: 'click' +};