Merge pull request #791 from ahocevar/google-tilesloaded

Do not add viewport to GMaps object before it is fully rendered. r=@bartvde
This commit is contained in:
ahocevar
2012-12-10 00:48:30 -08:00
2 changed files with 15 additions and 7 deletions

View File

@@ -124,9 +124,10 @@ OpenLayers.Layer.Google.v3 = {
*/ */
setGMapVisibility: function(visible) { setGMapVisibility: function(visible) {
var cache = OpenLayers.Layer.Google.cache[this.map.id]; var cache = OpenLayers.Layer.Google.cache[this.map.id];
var map = this.map;
if (cache) { if (cache) {
var type = this.type; var type = this.type;
var layers = this.map.layers; var layers = map.layers;
var layer; var layer;
for (var i=layers.length-1; i>=0; --i) { for (var i=layers.length-1; i>=0; --i) {
layer = layers[i]; layer = layers[i];
@@ -139,17 +140,24 @@ OpenLayers.Layer.Google.v3 = {
} }
var container = this.mapObject.getDiv(); var container = this.mapObject.getDiv();
if (visible === true) { if (visible === true) {
if (!cache.googleControl.hasChildNodes()) { if (container.parentNode !== map.div) {
cache.googleControl.appendChild(this.map.viewPortDiv); map.div.appendChild(container);
this.map.div.appendChild(container); if (!cache.rendered) {
google.maps.event.addListenerOnce(this.mapObject, 'tilesloaded', function() {
cache.googleControl.appendChild(map.viewPortDiv);
cache.rendered = true;
});
} else {
cache.googleControl.appendChild(map.viewPortDiv);
}
google.maps.event.trigger(this.mapObject, 'resize'); google.maps.event.trigger(this.mapObject, 'resize');
} }
this.mapObject.setMapTypeId(type); this.mapObject.setMapTypeId(type);
cache.displayed = this.id; cache.displayed = this.id;
} else { } else {
if (cache.googleControl.hasChildNodes()) { if (cache.googleControl.hasChildNodes()) {
this.map.div.removeChild(container); map.div.appendChild(map.viewPortDiv);
this.map.div.appendChild(this.map.viewPortDiv); map.div.removeChild(container);
} }
delete cache.displayed; delete cache.displayed;
} }

View File

@@ -318,7 +318,7 @@
var gmap = new OpenLayers.Layer.Google(); var gmap = new OpenLayers.Layer.Google();
map.addLayer(gmap); map.addLayer(gmap);
t.delay_call(1, function() { t.delay_call(4, function() {
t.ok(map.viewPortDiv.parentNode !== map.div, 'viewport moved inside GMaps'); t.ok(map.viewPortDiv.parentNode !== map.div, 'viewport moved inside GMaps');
var osm = new OpenLayers.Layer.OSM(); var osm = new OpenLayers.Layer.OSM();