typed objects for map events

This commit is contained in:
Éric Lemoine
2012-07-12 08:18:22 +02:00
parent d4106f166d
commit dea307e53a
5 changed files with 76 additions and 17 deletions

View File

@@ -9,6 +9,9 @@
goog.provide('ol.handler.Click'); goog.provide('ol.handler.Click');
goog.require('ol.MapEvent');
goog.require('ol.MapEventType');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.events.EventType'); goog.require('goog.events.EventType');
@@ -59,6 +62,7 @@ ol.handler.Click.prototype.disposeInternal = function() {
ol.handler.Click.prototype.handleClick = function(e) { ol.handler.Click.prototype.handleClick = function(e) {
// do not emit a map click event after a drag // do not emit a map click event after a drag
if (!this.states_.dragged) { 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);
} }
}; };

View File

@@ -9,6 +9,9 @@
goog.provide('ol.handler.Drag'); goog.provide('ol.handler.Drag');
goog.require('ol.MapEvent');
goog.require('ol.MapEventType');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.events.Event'); goog.require('goog.events.Event');
@@ -91,9 +94,7 @@ ol.handler.Drag.prototype.handleDragStart = function(e) {
this.states_.dragged = false; this.states_.dragged = false;
this.prevX_ = e.clientX; this.prevX_ = e.clientX;
this.prevY_ = e.clientY; this.prevY_ = e.clientY;
var newE = { var newE = new ol.MapEvent(ol.MapEventType.DRAGSTART, e);
type: 'dragstart'
};
goog.events.dispatchEvent(this.map_, newE); goog.events.dispatchEvent(this.map_, newE);
// this is to prevent page scrolling // this is to prevent page scrolling
@@ -109,11 +110,9 @@ ol.handler.Drag.prototype.handleDragStart = function(e) {
*/ */
ol.handler.Drag.prototype.handleDrag = function(e) { ol.handler.Drag.prototype.handleDrag = function(e) {
this.states_.dragged = true; this.states_.dragged = true;
var newE = { var newE = new ol.MapEvent(ol.MapEventType.DRAG, e);
type: 'drag', newE.deltaX = e.clientX - this.prevX_;
deltaX: e.clientX - this.prevX_, newE.deltaY = e.clientY - this.prevY_;
deltaY: e.clientY - this.prevY_
};
this.prevX_ = e.clientX; this.prevX_ = e.clientX;
this.prevY_ = e.clientY; this.prevY_ = e.clientY;
var rt = goog.events.dispatchEvent(this.map_, newE); 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) { 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 * @param {goog.fx.DragEvent} e
*/ */
ol.handler.Drag.prototype.handleDragEnd = function(e) { ol.handler.Drag.prototype.handleDragEnd = function(e) {
var newE = { var newE = new ol.MapEvent(ol.MapEventType.DRAGEND, e);
type: 'dragend'
};
goog.events.dispatchEvent(this.map_, newE); goog.events.dispatchEvent(this.map_, newE);
goog.events.unlisten(this.elt_, goog.events.unlisten(this.elt_,
[goog.events.EventType.TOUCHMOVE, [goog.events.EventType.TOUCHMOVE,

View File

@@ -9,6 +9,9 @@
goog.provide('ol.handler.MouseWheel'); goog.provide('ol.handler.MouseWheel');
goog.require('ol.MapEvent');
goog.require('ol.MapEventType');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.events'); goog.require('goog.events');
goog.require('goog.style'); goog.require('goog.style');
@@ -51,8 +54,7 @@ goog.inherits(ol.handler.MouseWheel, goog.Disposable);
* @param {goog.events.MouseWheelEvent} e * @param {goog.events.MouseWheelEvent} e
*/ */
ol.handler.MouseWheel.prototype.handleMouseWheel = function(e) { ol.handler.MouseWheel.prototype.handleMouseWheel = function(e) {
e.position = goog.style.getRelativePosition(e, this.elt_); var newE = new ol.MapEvent(ol.MapEventType.MOUSEWHEEL, e);
e.type = 'mousewheel';
var rt = goog.events.dispatchEvent(this.map_, e); var rt = goog.events.dispatchEvent(this.map_, e);
if (rt) { if (rt) {
this.defaultBehavior(e); this.defaultBehavior(e);
@@ -73,7 +75,8 @@ ol.handler.MouseWheel.prototype.defaultBehavior = function(e) {
var map = me.map_, var map = me.map_,
step = e.deltaY / Math.abs(e.deltaY); 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. // We don't want the page to scroll.
// (MouseWheelEvent is a BrowserEvent) // (MouseWheelEvent is a BrowserEvent)

36
src/ol/mapevent.js Normal file
View File

@@ -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);

17
src/ol/mapeventtype.js Normal file
View File

@@ -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'
};