diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index b2e29521b5..3f2ded4e95 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -1674,8 +1674,6 @@ OpenLayers.Map = OpenLayers.Class({ * dy - {Number} */ moveByPx: function(dx, dy) { - dx = Math.round(dx); - dy = Math.round(dy); var hw = this.size.w / 2; var hh = this.size.h / 2; var x = hw + dx; @@ -1689,15 +1687,13 @@ OpenLayers.Map = OpenLayers.Class({ // wrapping the date line makes no sense for restricted extents wrapDateLine = false; } - var valid = y <= this.maxPx.y - yRestriction && - y >= this.minPx.y + yRestriction; - var minX = this.minPx.x, maxX = this.maxPx.x; - if (!wrapDateLine) { - valid = valid && + dx = wrapDateLine || x <= this.maxPx.x - xRestriction && - x >= this.minPx.x + xRestriction; - } - if (valid) { + x >= this.minPx.x + xRestriction ? Math.round(dx) : 0; + dy = y <= this.maxPx.y - yRestriction && + y >= this.minPx.y + yRestriction ? Math.round(dy) : 0; + var minX = this.minPx.x, maxX = this.maxPx.x; + if (dx || dy) { if (!this.dragging) { this.dragging = true; this.events.triggerEvent("movestart"); diff --git a/tests/Map.html b/tests/Map.html index bb447eb673..356331225e 100644 --- a/tests/Map.html +++ b/tests/Map.html @@ -1824,6 +1824,26 @@ map.destroy(); } + // test for http://trac.osgeo.org/openlayers/ticket/3388 + function test_moveByPx_restrictedExtent(t) { + t.plan(2); + + var map = new OpenLayers.Map({ + div: 'map', + restrictedExtent: new OpenLayers.Bounds(-22.5,-11.25,22.5,11.25), + layers: [ + new OpenLayers.Layer('name', {isBaseLayer: true}) + ] + }); + + map.zoomToExtent(new OpenLayers.Bounds(-11.25, 0, 11.25, 11.25)); + + map.moveByPx(-10, -10); + t.eq(map.layerContainerDiv.style.left, '10px', 'layer container left correct'); + t.eq(map.layerContainerDiv.style.top, '0px', 'layer container top correct'); + } + +