Fix GMap initialization sequence when resizing previously invisible

layers. r=tschaub (pullup #1797)


git-svn-id: http://svn.openlayers.org/trunk/openlayers@9333 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
ahocevar
2009-04-30 21:52:08 +00:00
parent 6785e06150
commit b98dba227e

View File

@@ -212,22 +212,24 @@ OpenLayers.Layer.Google = OpenLayers.Class(
* evt - {Event}
*/
onMapResize: function() {
this.windowResized = true;
if(this.visibility) {
this.checkResize();
}
},
/**
* APIMethod: checkResize
* Check if the map has been resized, and if the Google Maps object is ready for checkResize.
* If the mapObject.getSize() equals the layer div's offset size, or if mapObject.getCenter()
* is null, the mapObject.checkResize() will fail.
*/
checkResize: function() {
if (this.windowResized && this.div.style.display != "none" && this.mapObject.getCenter()) {
this.mapObject.checkResize();
this.windowResized = false;
} else {
// workaround for resizing of invisible layers where
// GMap2.checkResize() does not work. We need to load all tiles
// for the old div size, then checkResize(), and then call
// layer.moveTo() to trigger GMap.setCenter() (which will finish
// the GMap initialization).
if(!this._resized) {
var layer = this;
var handle = GEvent.addListener(this.mapObject, "tilesloaded", function() {
GEvent.removeListener(handle);
delete layer._resized;
layer.mapObject.checkResize();
layer.moveTo(layer.map.getCenter(), layer.map.getZoom());
})
}
this._resized = true;
}
},
@@ -240,7 +242,6 @@ OpenLayers.Layer.Google = OpenLayers.Class(
*/
display: function(display) {
OpenLayers.Layer.EventPane.prototype.display.apply(this, arguments);
this.checkResize();
this.termsOfUse.style.display = this.div.style.display;
this.poweredBy.style.display = this.div.style.display;
},
@@ -263,22 +264,7 @@ OpenLayers.Layer.Google = OpenLayers.Class(
}
OpenLayers.Layer.EventPane.prototype.removeMap.apply(this, arguments);
},
/**
* Method: moveTo
* Handle calls to move the layer.
*
* Parameters:
* bound - {<OpenLayers.Bounds>}
* zoomChanged - {Boolean} Tells when zoom has changed, as layers have to
* do some init work in that case.
* dragging - {Boolean}
*/
moveTo:function(bounds, zoomChanged, dragging) {
OpenLayers.Layer.EventPane.prototype.moveTo.apply(this, arguments);
this.checkResize();
},
/**
* APIMethod: getZoomForExtent
*