diff --git a/lib/OpenLayers/Control/MouseDefaults.js b/lib/OpenLayers/Control/MouseDefaults.js index 8ea45a0277..f9ce0fbb61 100644 --- a/lib/OpenLayers/Control/MouseDefaults.js +++ b/lib/OpenLayers/Control/MouseDefaults.js @@ -125,24 +125,7 @@ OpenLayers.Control.MouseDefaults.prototype = defaultMouseUp: function (evt) { if (!Event.isLeftClick(evt)) return; if (this.zoomBox) { - 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.zoomBoxEnd(evt); } else { if (this.performedDrag) { this.map.setCenter(this.map.center); @@ -178,6 +161,35 @@ OpenLayers.Control.MouseDefaults.prototype = this.map.zoomOut(); }, + /** Zoombox function. + * + */ + zoomBoxEnd: function(evt) { + 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); + } else { + var end = this.map.getLonLatFromViewPortPx( evt.xy ); + this.map.setCenter(new OpenLayers.LonLat( + (end.lon), + (end.lat) + ), this.map.getZoom() + 1); + } + this.map.viewPortDiv.removeChild(document.getElementById("zoomBox")); + this.zoomBox = null; + }, + /** * Mouse ScrollWheel code thanks to http://adomas.org/javascript-mouse-wheel/ diff --git a/lib/OpenLayers/Control/MouseToolbar.js b/lib/OpenLayers/Control/MouseToolbar.js index 712e59c3d5..c17d8272b4 100644 --- a/lib/OpenLayers/Control/MouseToolbar.js +++ b/lib/OpenLayers/Control/MouseToolbar.js @@ -6,12 +6,14 @@ * @class * * @requires OpenLayers/Control.js + * @requires OpenLayers/Control/MouseDefaults.js */ OpenLayers.Control.MouseToolbar = Class.create(); OpenLayers.Control.MouseToolbar.X = 6; OpenLayers.Control.MouseToolbar.Y = 300; OpenLayers.Control.MouseToolbar.prototype = - Object.extend( new OpenLayers.Control(), { + Object.extend( new OpenLayers.Control(), + Object.extend( new OpenLayers.Control.MouseDefaults(), { mode: null, @@ -242,23 +244,7 @@ OpenLayers.Control.MouseToolbar.prototype = if (!Event.isLeftClick(evt)) return; switch (this.mode) { case "zoombox": - 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.zoomBoxEnd(evt); if (this.startViaKeyboard) this.leaveMode(); break; case "pan": @@ -283,5 +269,5 @@ OpenLayers.Control.MouseToolbar.prototype = return false; } } -}); +}));