From e5d6ccd6baf1ebc1b5debc3acb00ba7222754aee Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 25 Jun 2013 12:18:31 +0200 Subject: [PATCH 1/3] Use getView2DState instead of getResolution/getRotation in interactions --- src/ol/interaction/dragpaninteraction.js | 10 ++++++---- src/ol/interaction/keyboardpaninteraction.js | 7 +++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/ol/interaction/dragpaninteraction.js b/src/ol/interaction/dragpaninteraction.js index 2cd2088d10..12c1212b5b 100644 --- a/src/ol/interaction/dragpaninteraction.js +++ b/src/ol/interaction/dragpaninteraction.js @@ -61,10 +61,12 @@ ol.interaction.DragPan.prototype.handleDrag = function(mapBrowserEvent) { // FIXME works for View2D only var view = map.getView(); goog.asserts.assertInstanceof(view, ol.View2D); - var resolution = view.getResolution(); - var rotation = view.getRotation(); - var newCenter = [-resolution * this.deltaX, resolution * this.deltaY]; - ol.coordinate.rotate(newCenter, rotation); + var view2DState = view.getView2DState(); + var newCenter = [ + -view2DState.resolution * this.deltaX, + view2DState.resolution * this.deltaY + ]; + ol.coordinate.rotate(newCenter, view2DState.rotation); ol.coordinate.add(newCenter, this.startCenter); map.requestRenderFrame(); view.setCenter(newCenter); diff --git a/src/ol/interaction/keyboardpaninteraction.js b/src/ol/interaction/keyboardpaninteraction.js index ecd780c430..7ebd1fd329 100644 --- a/src/ol/interaction/keyboardpaninteraction.js +++ b/src/ol/interaction/keyboardpaninteraction.js @@ -64,9 +64,8 @@ ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = // FIXME works for View2D only var view = map.getView(); goog.asserts.assertInstanceof(view, ol.View2D); - var resolution = view.getResolution(); - var rotation = view.getRotation(); - var mapUnitsDelta = resolution * this.delta_; + var view2DState = view.getView2DState(); + var mapUnitsDelta = view2DState.resolution * this.delta_; var deltaX = 0, deltaY = 0; if (keyCode == goog.events.KeyCodes.DOWN) { deltaY = -mapUnitsDelta; @@ -78,7 +77,7 @@ ol.interaction.KeyboardPan.prototype.handleMapBrowserEvent = deltaY = mapUnitsDelta; } var delta = [deltaX, deltaY]; - ol.coordinate.rotate(delta, rotation); + ol.coordinate.rotate(delta, view2DState.rotation); ol.interaction.Interaction.pan( map, view, delta, ol.interaction.KEYBOARD_PAN_DURATION); mapBrowserEvent.preventDefault(); From f462adbe538ebaa19e158663136832659e699353 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 25 Jun 2013 12:19:30 +0200 Subject: [PATCH 2/3] Set default View2D rotation in constructor and getView2DState instead of in getRotation --- src/ol/view2d.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/ol/view2d.js b/src/ol/view2d.js index 68730a4dfe..7cd28a744d 100644 --- a/src/ol/view2d.js +++ b/src/ol/view2d.js @@ -89,7 +89,8 @@ ol.View2D = function(opt_options) { values[ol.View2DProperty.RESOLUTION] = resolutionConstraint( this.maxResolution_, options.zoom); } - values[ol.View2DProperty.ROTATION] = options.rotation; + values[ol.View2DProperty.ROTATION] = + goog.isDef(options.rotation) ? options.rotation : 0; this.setValues(values); }; goog.inherits(ol.View2D, ol.View); @@ -254,12 +255,10 @@ ol.View2D.prototype.getResolutionForValueFunction = function(opt_power) { /** - * Get the current rotation of this view. - * @return {number} Map rotation. + * @inheritDoc */ ol.View2D.prototype.getRotation = function() { - return /** @type {number|undefined} */ ( - this.get(ol.View2DProperty.ROTATION)) || 0; + return /** @type {number|undefined} */ (this.get(ol.View2DProperty.ROTATION)); }; goog.exportProperty( ol.View2D.prototype, @@ -308,12 +307,12 @@ ol.View2D.prototype.getView2DState = function() { var center = /** @type {ol.Coordinate} */ (this.getCenter()); var projection = /** @type {ol.Projection} */ (this.getProjection()); var resolution = /** @type {number} */ (this.getResolution()); - var rotation = /** @type {number} */ (this.getRotation()); + var rotation = this.getRotation(); return { center: center.slice(), projection: projection, resolution: resolution, - rotation: rotation + rotation: goog.isDef(rotation) ? rotation : 0 }; }; From fab12b10c1652b522ed8a3cb3c175782a5c1f608 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 25 Jun 2013 12:26:35 +0200 Subject: [PATCH 3/3] Handle projection being undefined in getView2DState --- src/ol/view2d.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ol/view2d.js b/src/ol/view2d.js index 7cd28a744d..6ae9e17325 100644 --- a/src/ol/view2d.js +++ b/src/ol/view2d.js @@ -305,12 +305,12 @@ ol.View2D.prototype.getView2D = function() { ol.View2D.prototype.getView2DState = function() { goog.asserts.assert(this.isDef()); var center = /** @type {ol.Coordinate} */ (this.getCenter()); - var projection = /** @type {ol.Projection} */ (this.getProjection()); + var projection = this.getProjection(); var resolution = /** @type {number} */ (this.getResolution()); var rotation = this.getRotation(); return { center: center.slice(), - projection: projection, + projection: goog.isDef(projection) ? projection : null, resolution: resolution, rotation: goog.isDef(rotation) ? rotation : 0 };