From 4b395c72fa1a074236125edce7c34c2db5cfa2cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Lemoine?= Date: Sun, 14 Apr 2013 22:47:05 +0200 Subject: [PATCH] Fix zoom anchor for touch zoom interaction --- src/ol/interaction/touchzoominteraction.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ol/interaction/touchzoominteraction.js b/src/ol/interaction/touchzoominteraction.js index 4d378a7c80..8585bef32b 100644 --- a/src/ol/interaction/touchzoominteraction.js +++ b/src/ol/interaction/touchzoominteraction.js @@ -4,6 +4,7 @@ goog.provide('ol.interaction.TouchZoom'); goog.require('goog.asserts'); goog.require('goog.style'); +goog.require('ol.Coordinate'); goog.require('ol.View'); goog.require('ol.ViewHint'); goog.require('ol.interaction.Interaction'); @@ -25,6 +26,12 @@ ol.interaction.TouchZoom = function() { goog.base(this); + /** + * @private + * @type {ol.Coordinate} + */ + this.anchor_ = null; + /** * @private * @type {number|undefined} @@ -73,12 +80,12 @@ ol.interaction.TouchZoom.prototype.handleTouchMove = var centroid = ol.interaction.Touch.centroid(this.targetTouches); centroid.x -= viewportPosition.x; centroid.y -= viewportPosition.y; - var anchor = map.getCoordinateFromPixel(centroid); + this.anchor_ = map.getCoordinateFromPixel(centroid); // scale, bypass the resolution constraint map.requestRenderFrame(); ol.interaction.Interaction.zoomWithoutConstraints( - map, view, view.getResolution() * scaleDelta, anchor); + map, view, view.getResolution() * scaleDelta, this.anchor_); }; @@ -95,8 +102,8 @@ ol.interaction.TouchZoom.prototype.handleTouchEnd = // direction not to zoom out/in if user was pinching in/out. // Direction is > 0 if pinching out, and < 0 if pinching in. var direction = this.lastScaleDelta_ - 1; - ol.interaction.Interaction.zoom(map, view, view.getResolution(), undefined, - ol.interaction.TOUCHZOOM_ANIMATION_DURATION, direction); + ol.interaction.Interaction.zoom(map, view, view.getResolution(), + this.anchor_, ol.interaction.TOUCHZOOM_ANIMATION_DURATION, direction); view.setHint(ol.ViewHint.INTERACTING, -1); return false; } else { @@ -113,6 +120,7 @@ ol.interaction.TouchZoom.prototype.handleTouchStart = if (this.targetTouches.length >= 2) { var map = mapBrowserEvent.map; var view = map.getView(); + this.anchor_ = null; this.lastDistance_ = undefined; this.lastScaleDelta_ = 1; map.requestRenderFrame();