Merge pull request #920 from ahocevar/backbuffer-conditional

Backbuffer and transitionend only when there are tiles. r=@bartvde
This commit is contained in:
ahocevar
2013-03-27 07:14:51 -07:00
2 changed files with 22 additions and 12 deletions

View File

@@ -1111,18 +1111,26 @@ OpenLayers.Layer.Grid = OpenLayers.Class(OpenLayers.Layer.HTTPRequest, {
}
//if that was the last tile, then trigger a 'loadend' on the layer
if (this.numLoadingTiles === 0) {
if(this.backBuffer) {
this._transitionElement = tile.imgDiv;
for (var i=this.transitionendEvents.length-1; i>=0; --i) {
OpenLayers.Event.observe(this._transitionElement,
this.transitionendEvents[i],
this._removeBackBuffer);
if (this.backBuffer) {
if (this.backBuffer.childNodes.length === 0) {
// no tiles transitioning, remove immediately
this.removeBackBuffer();
} else {
// wait until transition has ended or delay has passed
this._transitionElement = aborted ?
this.div.lastChild : tile.imgDiv;
var transitionendEvents = this.transitionendEvents;
for (var i=transitionendEvents.length-1; i>=0; --i) {
OpenLayers.Event.observe(this._transitionElement,
transitionendEvents[i],
this._removeBackBuffer);
}
// the removal of the back buffer is delayed to prevent
// flash effects due to the animation of tile displaying
this.backBufferTimerId = window.setTimeout(
this._removeBackBuffer, this.removeBackBufferDelay
);
}
// the removal of the back buffer is delayed to prevent
// flash effects due to the animation of tile displaying
this.backBufferTimerId = window.setTimeout(
this._removeBackBuffer, this.removeBackBufferDelay
);
}
this.loading = false;
this.events.triggerEvent("loadend");

View File

@@ -1334,7 +1334,9 @@
t.ok(layer.backBuffer === map.layerContainerDiv.firstChild,
'[a] back buffer is first child of layer container div');
// Mark one tile loaded, to see if back buffer removal gets scheduled.
// Mark one tile loaded and add an element to the backbuffer, to see if
// backbuffer removal gets scheduled.
layer.backBuffer.appendChild(document.createElement('img'));
layer.grid[1][1].onImageLoad();
t.ok(layer.backBufferTimerId !== null,