From 00dfc669d2423d8d7df4424f8511c9d4d0c833b9 Mon Sep 17 00:00:00 2001 From: crschmidt Date: Wed, 23 Aug 2006 20:37:16 +0000 Subject: [PATCH] If we're zooming with this tool, we only want to actually change the zoom if the box was bigger than 5px in one direction or another. If it was smaller than that, the user probably just clicked, rather than drawing a box, because the MouseToolbar icon is kind of misleading. git-svn-id: http://svn.openlayers.org/branches/openlayers/2.0@1338 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Control/MouseDefaults.js | 29 +++++++++++++--------- lib/OpenLayers/Control/MouseToolbar.js | 33 ++++++++++++++++--------- 2 files changed, 38 insertions(+), 24 deletions(-) diff --git a/lib/OpenLayers/Control/MouseDefaults.js b/lib/OpenLayers/Control/MouseDefaults.js index 2cf7854b4e..8ea45a0277 100644 --- a/lib/OpenLayers/Control/MouseDefaults.js +++ b/lib/OpenLayers/Control/MouseDefaults.js @@ -60,6 +60,7 @@ OpenLayers.Control.MouseDefaults.prototype = var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); this.map.setCenter(newCenter, this.map.zoom + 1); Event.stop(evt); + return false; }, /** @@ -124,20 +125,24 @@ OpenLayers.Control.MouseDefaults.prototype = defaultMouseUp: function (evt) { if (!Event.isLeftClick(evt)) return; if (this.zoomBox) { - var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); - var end = this.map.getLonLatFromViewPortPx( evt.xy ); - var top = Math.max(start.lat, end.lat); - var bottom = Math.min(start.lat, end.lat); - var left = Math.min(start.lon, end.lon); - var right = Math.max(start.lon, end.lon); - var bounds = new OpenLayers.Bounds(left, bottom, right, top); - var zoom = this.map.getZoomForExtent(bounds); - this.map.setCenter(new OpenLayers.LonLat( - (start.lon + end.lon) / 2, - (start.lat + end.lat) / 2 - ), zoom); + if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 || + Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) { + var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); + var end = this.map.getLonLatFromViewPortPx( evt.xy ); + var top = Math.max(start.lat, end.lat); + var bottom = Math.min(start.lat, end.lat); + var left = Math.min(start.lon, end.lon); + var right = Math.max(start.lon, end.lon); + var bounds = new OpenLayers.Bounds(left, bottom, right, top); + var zoom = this.map.getZoomForExtent(bounds); + this.map.setCenter(new OpenLayers.LonLat( + (start.lon + end.lon) / 2, + (start.lat + end.lat) / 2 + ), zoom); + } this.map.viewPortDiv.removeChild(document.getElementById("zoomBox")); this.zoomBox = null; + } else { if (this.performedDrag) { this.map.setCenter(this.map.center); diff --git a/lib/OpenLayers/Control/MouseToolbar.js b/lib/OpenLayers/Control/MouseToolbar.js index 6891d5502e..3183ed5493 100644 --- a/lib/OpenLayers/Control/MouseToolbar.js +++ b/lib/OpenLayers/Control/MouseToolbar.js @@ -95,6 +95,8 @@ OpenLayers.Control.MouseToolbar.prototype = this.performedDrag = false; var newCenter = this.map.getLonLatFromViewPortPx( evt.xy ); this.map.setCenter(newCenter, this.map.zoom + 2); + Event.stop(evt); + return false; }, /** @@ -238,18 +240,25 @@ OpenLayers.Control.MouseToolbar.prototype = if (!Event.isLeftClick(evt)) return; switch (this.mode) { case "zoombox": - var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); - var end = this.map.getLonLatFromViewPortPx( evt.xy ); - var top = Math.max(start.lat, end.lat); - var bottom = Math.min(start.lat, end.lat); - var left = Math.min(start.lon, end.lon); - var right = Math.max(start.lon, end.lon); - var bounds = new OpenLayers.Bounds(left, bottom, right, top); - var zoom = this.map.getZoomForExtent(bounds); - this.map.setCenter(new OpenLayers.LonLat( - (start.lon + end.lon) / 2, - (start.lat + end.lat) / 2 - ), zoom); + console.log(this.mouseDragStart, evt.xy); + console.log(Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 || Math.abs((this.mouseDragStart.y - evt.xy.y)) > 5); + console.log(Math.abs(this.mouseDragStart.x-evt.xy.x) > 5); + console.log(Math.abs(this.mouseDragStart.y-evt.xy.y)>5); + if (Math.abs(this.mouseDragStart.x - evt.xy.x) > 5 || + Math.abs(this.mouseDragStart.y - evt.xy.y) > 5) { + var start = this.map.getLonLatFromViewPortPx( this.mouseDragStart ); + var end = this.map.getLonLatFromViewPortPx( evt.xy ); + var top = Math.max(start.lat, end.lat); + var bottom = Math.min(start.lat, end.lat); + var left = Math.min(start.lon, end.lon); + var right = Math.max(start.lon, end.lon); + var bounds = new OpenLayers.Bounds(left, bottom, right, top); + var zoom = this.map.getZoomForExtent(bounds); + this.map.setCenter(new OpenLayers.LonLat( + (start.lon + end.lon) / 2, + (start.lat + end.lat) / 2 + ), zoom); + } this.map.viewPortDiv.removeChild(document.getElementById("zoomBox")); this.zoomBox = null; this.leaveMode();