Reworking click and pinch handling to get better behavior on multi-touch devices. r=ahocevar +testing from others (closes #3133)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@11695 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -124,6 +124,7 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
|
||||
*/
|
||||
pinchStart: function(evt, pinchData) {
|
||||
this.pinchOrigin = evt.xy;
|
||||
this.currentCenter = evt.xy;
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -170,21 +171,20 @@ OpenLayers.Control.PinchZoom = OpenLayers.Class(OpenLayers.Control, {
|
||||
* of the pinch gesture. This give us the final scale of the pinch.
|
||||
*/
|
||||
pinchDone: function(evt, start, last) {
|
||||
this.applyTransform("");
|
||||
var zoom = this.map.getZoomForResolution(this.map.getResolution() / last.scale, true);
|
||||
var resolution = this.map.getResolutionForZoom(zoom);
|
||||
if (zoom !== this.map.getZoom() || !this.currentCenter.equals(this.pinchOrigin)) {
|
||||
var resolution = this.map.getResolutionForZoom(zoom);
|
||||
|
||||
var location = this.map.getLonLatFromPixel(this.pinchOrigin);
|
||||
var zoomPixel = this.currentCenter;
|
||||
var size = this.map.getSize();
|
||||
|
||||
location.lon += resolution * ((size.w / 2) - zoomPixel.x);
|
||||
location.lat -= resolution * ((size.h / 2) - zoomPixel.y);
|
||||
var location = this.map.getLonLatFromPixel(this.pinchOrigin);
|
||||
var zoomPixel = this.currentCenter;
|
||||
var size = this.map.getSize();
|
||||
|
||||
this.map.setCenter(location, zoom);
|
||||
location.lon += resolution * ((size.w / 2) - zoomPixel.x);
|
||||
location.lat -= resolution * ((size.h / 2) - zoomPixel.y);
|
||||
|
||||
var style = this.map.layerContainerDiv.style;
|
||||
style['-webkit-transform'] = "";
|
||||
style['-moz-transform'] = "";
|
||||
this.map.setCenter(location, zoom);
|
||||
}
|
||||
},
|
||||
|
||||
CLASS_NAME: "OpenLayers.Control.PinchZoom"
|
||||
|
||||
Reference in New Issue
Block a user