"panTo should use tween if new center is in the current bounds + a ratio".
Add a bounds.scale method (takes a ratio and an optional center) and call it from the panTo to give a ratio we can pan inside of. Patch by sbenthall, r=me,elemoine (Closes #1341) git-svn-id: http://svn.openlayers.org/trunk/openlayers@7678 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -219,6 +219,48 @@ OpenLayers.Bounds = OpenLayers.Class({
|
|||||||
(this.bottom + this.top) / 2);
|
(this.bottom + this.top) / 2);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method: scale
|
||||||
|
* Scales the bounds around a pixel or lonlat. Note that the new
|
||||||
|
* bounds may return non-integer properties, even if a pixel
|
||||||
|
* is passed.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* ratio - {Float}
|
||||||
|
* origin - {<OpenLayers.Pixel> or <OpenLayers.LonLat>}
|
||||||
|
* Default is center.
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* {<OpenLayers.Bound>} A new bounds that is scaled by ratio
|
||||||
|
* from origin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
scale: function(ratio, origin){
|
||||||
|
if(origin == null){
|
||||||
|
origin = this.getCenterLonLat();
|
||||||
|
}
|
||||||
|
|
||||||
|
var bounds = [];
|
||||||
|
|
||||||
|
var origx,origy;
|
||||||
|
|
||||||
|
// get origin coordinates
|
||||||
|
if(origin.CLASS_NAME == "OpenLayers.LonLat"){
|
||||||
|
origx = origin.lon;
|
||||||
|
origy = origin.lat;
|
||||||
|
} else {
|
||||||
|
origx = origin.x;
|
||||||
|
origy = origin.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
var left = (this.left - origx) * ratio + origx;
|
||||||
|
var bottom = (this.bottom - origy) * ratio + origy;
|
||||||
|
var right = (this.right - origx) * ratio + origx;
|
||||||
|
var top = (this.top - origy) * ratio + origy;
|
||||||
|
|
||||||
|
return new OpenLayers.Bounds(left, bottom, right, top);
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIMethod: add
|
* APIMethod: add
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -196,6 +196,13 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
*/
|
*/
|
||||||
zoom: 0,
|
zoom: 0,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Property: panRatio
|
||||||
|
* {Float} The ratio of the current extent within
|
||||||
|
* which panning will tween.
|
||||||
|
*/
|
||||||
|
panRatio: 1.5,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Property: viewRequestID
|
* Property: viewRequestID
|
||||||
* {String} Used to store a unique identifier that changes when the map
|
* {String} Used to store a unique identifier that changes when the map
|
||||||
@@ -1368,7 +1375,7 @@ OpenLayers.Map = OpenLayers.Class({
|
|||||||
* lonlat - {<OpenLayers.Lonlat>}
|
* lonlat - {<OpenLayers.Lonlat>}
|
||||||
*/
|
*/
|
||||||
panTo: function(lonlat) {
|
panTo: function(lonlat) {
|
||||||
if (this.panMethod && this.getExtent().containsLonLat(lonlat)) {
|
if (this.panMethod && this.getExtent().scale(this.panRatio).containsLonLat(lonlat)) {
|
||||||
if (!this.panTween) {
|
if (!this.panTween) {
|
||||||
this.panTween = new OpenLayers.Tween(this.panMethod);
|
this.panTween = new OpenLayers.Tween(this.panMethod);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -557,6 +557,25 @@
|
|||||||
t.ok(bounds == null, "returns null on erroneous add operation (null y)");
|
t.ok(bounds == null, "returns null on erroneous add operation (null y)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Bounds_scale(t) {
|
||||||
|
t.plan(3);
|
||||||
|
|
||||||
|
origBounds = new OpenLayers.Bounds(1,2,3,4);
|
||||||
|
bounds = origBounds.scale(2);
|
||||||
|
var b = new OpenLayers.Bounds(0,1,4,5);
|
||||||
|
t.ok(bounds.equals(b), "Bounds scale correctly with default origin at center")
|
||||||
|
|
||||||
|
var origin = new OpenLayers.Pixel(0,1);
|
||||||
|
bounds = origBounds.scale(2,origin);
|
||||||
|
b = new OpenLayers.Bounds(2,3,6,7);
|
||||||
|
t.ok(bounds.equals(b), "Bounds scale correctly with offset origin");
|
||||||
|
|
||||||
|
origin = new OpenLayers.Pixel(5,1);
|
||||||
|
bounds = bounds.scale(2, origin);
|
||||||
|
b = new OpenLayers.Bounds(-1, 5, 7, 13);
|
||||||
|
t.ok(bounds.equals(b), "Bounds scale correctly with offset origin");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
|
|||||||
Reference in New Issue
Block a user