diff --git a/src/ol/events.js b/src/ol/events.js index 542e4e5800..3889401b02 100644 --- a/src/ol/events.js +++ b/src/ol/events.js @@ -1,5 +1,6 @@ goog.provide('ol.events'); goog.provide('ol.events.EventType'); +goog.provide('ol.events.KeyCode'); /** @@ -18,6 +19,8 @@ ol.events.EventType = { DRAGOVER: 'dragover', DROP: 'drop', ERROR: 'error', + KEYDOWN: 'keydown', + KEYPRESS: 'keypress', LOAD: 'load', MOUSEDOWN: 'mousedown', MOUSEMOVE: 'mousemove', @@ -27,6 +30,18 @@ ol.events.EventType = { TOUCHSTART: 'touchstart' }; + +/** + * @enum {number} + */ +ol.events.KeyCode = { + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40 +}; + + /** * Key to use with {@link ol.Observable#unByKey}. * diff --git a/src/ol/interaction/keyboardpaninteraction.js b/src/ol/interaction/keyboardpaninteraction.js index 81810bdf57..44eaf415a1 100644 --- a/src/ol/interaction/keyboardpaninteraction.js +++ b/src/ol/interaction/keyboardpaninteraction.js @@ -1,12 +1,12 @@ goog.provide('ol.interaction.KeyboardPan'); goog.require('goog.asserts'); -goog.require('goog.events.KeyCodes'); -goog.require('goog.events.KeyHandler.EventType'); goog.require('goog.functions'); goog.require('ol'); goog.require('ol.coordinate'); goog.require('ol.events.ConditionType'); +goog.require('ol.events.EventType'); +goog.require('ol.events.KeyCode'); goog.require('ol.events.condition'); goog.require('ol.interaction.Interaction'); @@ -73,25 +73,24 @@ goog.inherits(ol.interaction.KeyboardPan, ol.interaction.Interaction); */ ol.interaction.KeyboardPan.handleEvent = function(mapBrowserEvent) { var stopEvent = false; - if (mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { - var keyEvent = /** @type {Event} */ - (mapBrowserEvent.originalEvent); + if (mapBrowserEvent.type == ol.events.EventType.KEYDOWN) { + var keyEvent = mapBrowserEvent.originalEvent; var keyCode = keyEvent.keyCode; if (this.condition_(mapBrowserEvent) && - (keyCode == goog.events.KeyCodes.DOWN || - keyCode == goog.events.KeyCodes.LEFT || - keyCode == goog.events.KeyCodes.RIGHT || - keyCode == goog.events.KeyCodes.UP)) { + (keyCode == ol.events.KeyCode.DOWN || + keyCode == ol.events.KeyCode.LEFT || + keyCode == ol.events.KeyCode.RIGHT || + keyCode == ol.events.KeyCode.UP)) { var map = mapBrowserEvent.map; var view = map.getView(); goog.asserts.assert(view, 'map must have view'); var mapUnitsDelta = view.getResolution() * this.pixelDelta_; var deltaX = 0, deltaY = 0; - if (keyCode == goog.events.KeyCodes.DOWN) { + if (keyCode == ol.events.KeyCode.DOWN) { deltaY = -mapUnitsDelta; - } else if (keyCode == goog.events.KeyCodes.LEFT) { + } else if (keyCode == ol.events.KeyCode.LEFT) { deltaX = -mapUnitsDelta; - } else if (keyCode == goog.events.KeyCodes.RIGHT) { + } else if (keyCode == ol.events.KeyCode.RIGHT) { deltaX = mapUnitsDelta; } else { deltaY = mapUnitsDelta; diff --git a/src/ol/interaction/keyboardzoominteraction.js b/src/ol/interaction/keyboardzoominteraction.js index 6326f09b17..431b7fe737 100644 --- a/src/ol/interaction/keyboardzoominteraction.js +++ b/src/ol/interaction/keyboardzoominteraction.js @@ -1,8 +1,8 @@ goog.provide('ol.interaction.KeyboardZoom'); goog.require('goog.asserts'); -goog.require('goog.events.KeyHandler.EventType'); goog.require('ol.events.ConditionType'); +goog.require('ol.events.EventType'); goog.require('ol.events.condition'); goog.require('ol.interaction.Interaction'); @@ -66,9 +66,9 @@ goog.inherits(ol.interaction.KeyboardZoom, ol.interaction.Interaction); */ ol.interaction.KeyboardZoom.handleEvent = function(mapBrowserEvent) { var stopEvent = false; - if (mapBrowserEvent.type == goog.events.KeyHandler.EventType.KEY) { - var keyEvent = /** @type {Event} */ - (mapBrowserEvent.originalEvent); + if (mapBrowserEvent.type == ol.events.EventType.KEYDOWN || + mapBrowserEvent.type == ol.events.EventType.KEYPRESS) { + var keyEvent = mapBrowserEvent.originalEvent; var charCode = keyEvent.charCode; if (this.condition_(mapBrowserEvent) && (charCode == '+'.charCodeAt(0) || charCode == '-'.charCodeAt(0))) { diff --git a/src/ol/map.js b/src/ol/map.js index 59aca9bdb3..64bb863a35 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -12,11 +12,6 @@ goog.require('goog.debug.Console'); goog.require('goog.dom'); goog.require('goog.dom.ViewportSizeMonitor'); goog.require('goog.dom.classlist'); -goog.require('ol.events'); -goog.require('ol.events.Event'); -goog.require('ol.events.EventType'); -goog.require('goog.events.KeyHandler'); -goog.require('goog.events.KeyHandler.EventType'); goog.require('goog.events.MouseWheelHandler'); goog.require('goog.events.MouseWheelHandler.EventType'); goog.require('goog.functions'); @@ -312,12 +307,9 @@ ol.Map = function(options) { /** * @private - * @type {goog.events.KeyHandler} + * @type {ol.events.Key|undefined} */ - this.keyHandler_ = new goog.events.KeyHandler(); - ol.events.listen(this.keyHandler_, goog.events.KeyHandler.EventType.KEY, - this.handleBrowserEvent, false, this); - this.registerDisposable(this.keyHandler_); + this.keyHandlerKey_; var mouseWheelHandler = new goog.events.MouseWheelHandler(this.viewport_); ol.events.listen(mouseWheelHandler, @@ -1061,7 +1053,9 @@ ol.Map.prototype.handleTargetChanged_ = function() { var targetElement = this.getTargetElement(); - this.keyHandler_.detach(); + if (this.keyHandlerKey_) { + ol.events.unlistenByKey(this.keyHandlerKey_); + } if (!targetElement) { goog.dom.removeNode(this.viewport_); @@ -1074,7 +1068,9 @@ ol.Map.prototype.handleTargetChanged_ = function() { var keyboardEventTarget = !this.keyboardEventTarget_ ? targetElement : this.keyboardEventTarget_; - this.keyHandler_.attach(keyboardEventTarget); + this.keyHandlerKey_ = ol.events.listen(keyboardEventTarget, + [ol.events.EventType.KEYDOWN, ol.events.EventType.KEYPRESS], + this.handleBrowserEvent, false, this); if (!this.viewportResizeListenerKey_) { this.viewportResizeListenerKey_ = ol.events.listen(