If the build does not contain TileManager.js, do not create a TileManager
instance for the map. If the build does not contain Layer/Grid.js, do not
try to add Grid layer instances to the list of layers managed by the
TileManager.
For events other than move, the tile queue may not be populated yet when
updateTimeout is called. So instead of checking for the queue's length,
we register the timer unconditionally in these cases.
In OpenLayers 2.12, only one tile was loaded per animation frame. This
change brings back something similar as part of the tile manager. But we
do not use requestAnimationFrame anymore, because @elemoine pointed out
that browsers may give requestAnimationFrame invoked functions a higher
priority than setTimeout invoked functions.
The reason for this change is
http://lists.osgeo.org/pipermail/openlayers-users/2013-April/028063.html.
When the TileManager adds an image to its cache, it might be a backbuffer
image. Backbuffer images have an id with a '_bb' postfix. Regular images
do not have an id at all. In OpenLayers.Layer.Grid, in
addTileMonitoringHooks, a loadend listener is created for each tile. This
listener checks for tie image id, and will remove it from its parent node.
This will cause images to be removed from the layerDiv if the image comes
from the TileManager's tileCache and was on a backbuffer by the time it was
added to the cache.
Simply removing the image's id before assigning it to a tile resolves the
issue.
When a layer sets a cached image's className to something else than
.olTileImage (e.g. by setting .olTileReplacing), we should not keep the
image in the cache any more, because it may no longer be valid.
Having the TileManager remove an image from the DOM, then setting the
cached image, and then having to position it felt a bit awkward. With the
new beforeload event, the setImage method and putting renderTile before
positionTile, providing the cached image feels way more natural.