From 0a131f380a4c31308d7c53ab5ae47baaa9436ee0 Mon Sep 17 00:00:00 2001 From: Pierre GIRAUD Date: Fri, 30 Nov 2012 13:29:12 +0100 Subject: [PATCH] Adding preserveCenter config option --- examples/mobile.js | 3 +++ lib/OpenLayers/Control/PinchZoom.js | 15 ++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/examples/mobile.js b/examples/mobile.js index 9bbcb9125a..3104cbbd63 100644 --- a/examples/mobile.js +++ b/examples/mobile.js @@ -22,6 +22,9 @@ var init = function () { controls: [ new OpenLayers.Control.Attribution(), new OpenLayers.Control.TouchNavigation({ + pinchZoomOptions: { + preserveCenter: true + }, dragPanOptions: { enableKinetic: true } diff --git a/lib/OpenLayers/Control/PinchZoom.js b/lib/OpenLayers/Control/PinchZoom.js index b3691d813b..e89fa287f6 100644 --- a/lib/OpenLayers/Control/PinchZoom.js +++ b/lib/OpenLayers/Control/PinchZoom.js @@ -40,6 +40,12 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, { * true. */ autoActivate: true, + + /** + * APIProperty: preserveCenter + * {Boolean} Force the map center to stay in place. Default is false. + */ + preserveCenter: false, /** * APIProperty: handlerOptions @@ -73,8 +79,10 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, { * of the pinch gesture. This give us the current scale of the pinch. */ pinchStart: function(evt, pinchData) { - this.pinchOrigin = evt.xy; - this.currentCenter = evt.xy; + var xy = (this.preserveCenter) ? + this.map.getPixelFromLonLat(this.map.getCenter()) : evt.xy; + this.pinchOrigin = xy; + this.currentCenter = xy; }, /** @@ -89,7 +97,8 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, { var scale = pinchData.scale; var containerOrigin = this.map.layerContainerOriginPx; var pinchOrigin = this.pinchOrigin; - var current = evt.xy; + var current = (this.preserveCenter) ? + this.map.getPixelFromLonLat(this.map.getCenter()) : evt.xy; var dx = Math.round((current.x - pinchOrigin.x) + (scale - 1) * (containerOrigin.x - pinchOrigin.x)); var dy = Math.round((current.y - pinchOrigin.y) + (scale - 1) * (containerOrigin.y - pinchOrigin.y));