commit b94a0768f4a6c23a3876457f0ebe1e15acdde9ed
parent f70fbdc9ecb488ed05dd650ede6b07573163a969
Author: Sergej Orlov <wladimirych@gmail.com>
Date: Sat, 18 Feb 2017 03:02:21 +0300
canvas markers layer is now async; fixed printing async gridlayers
Diffstat:
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/src/lib/leaflet.control.printPages/map-render.js b/src/lib/leaflet.control.printPages/map-render.js
@@ -171,7 +171,9 @@ async function* iterateLayersTiles(layers, latLngBounds, zooms) {
let map = getTempMap(zoom, layer._rasterizeNeedsFullSizeMap, pixelBounds);
map.addLayer(layer);
let {iterateTilePromises, count} = await layer.getTilesInfo({xhrOptions: defaultXHROptions, pixelBounds});
+ let lastPromise;
for (let tilePromise of iterateTilePromises()) {
+ lastPromise = tilePromise.tilePromise;
tilePromise.tilePromise =
tilePromise.tilePromise.then((tileInfo) => Object.assign(tileInfo, {zoom, progressInc: 1 / count}));
doStop = yield tilePromise;
@@ -180,9 +182,13 @@ async function* iterateLayersTiles(layers, latLngBounds, zooms) {
break;
}
}
- disposeMap(map);
if (doStop) {
+ disposeMap(map);
break;
+ } else {
+ if (lastPromise) {
+ lastPromise.then(() => disposeMap(map));
+ }
}
}
}
diff --git a/src/lib/leaflet.layer.canvasMarkers/index.js b/src/lib/leaflet.layer.canvasMarkers/index.js
@@ -147,11 +147,14 @@ L.Layer.CanvasMarkers = L.GridLayer.extend({
}
},
- createTile: function(coords) {
+ createTile: function(coords, done) {
const canvas = L.DomUtil.create('canvas', 'leaflet-tile');
canvas.width = this.options.tileSize;
canvas.height = this.options.tileSize;
- L.Util.requestAnimFrame(() => this.drawTile(canvas, coords));
+ L.Util.requestAnimFrame(() => {
+ this.drawTile(canvas, coords);
+ done(null, canvas);
+ });
return canvas;
},
diff --git a/src/lib/leaflet.layer.rasterize/TileLayer.js b/src/lib/leaflet.layer.rasterize/TileLayer.js
@@ -85,7 +85,7 @@ const CanvasLayerGrabMixin = L.Util.extend({}, GridLayerGrabMixin, {
tilePromise = Promise.resolve(tile);
} else {
tilePromise = new Promise((resolve) => {
- return this.createTile(coords, resolve);
+ return this.createTile(coords, (_, canvas) => resolve(canvas));
});
}