New render event API (non functional yet)
This commit is contained in:
@@ -83,25 +83,21 @@ class CanvasLayerRenderer extends LayerRenderer {
|
||||
* @param {import("../../render/EventType.js").default} type Event type.
|
||||
* @param {CanvasRenderingContext2D} context Context.
|
||||
* @param {import("../../PluggableMap.js").FrameState} frameState Frame state.
|
||||
* @param {import("../../transform.js").Transform=} opt_transform Transform.
|
||||
* @param {import("../../transform.js").Transform} pixelTransform Transform.
|
||||
* @private
|
||||
*/
|
||||
dispatchComposeEvent_(type, context, frameState, opt_transform) {
|
||||
dispatchComposeEvent_(type, context, frameState, pixelTransform) {
|
||||
const layer = this.getLayer();
|
||||
if (layer.hasListener(type)) {
|
||||
const halfWidth = (frameState.size[0] * frameState.pixelRatio) / 2;
|
||||
const halfHeight = (frameState.size[1] * frameState.pixelRatio) / 2;
|
||||
const rotation = frameState.viewState.rotation;
|
||||
rotateAtOffset(context, -rotation, halfWidth, halfHeight);
|
||||
const transform = opt_transform !== undefined ?
|
||||
opt_transform : this.getTransform(frameState, 0);
|
||||
const render = new CanvasImmediateRenderer(
|
||||
context, frameState.pixelRatio, frameState.extent, transform,
|
||||
context, frameState.pixelRatio, frameState.extent, pixelTransform,
|
||||
frameState.viewState.rotation);
|
||||
const composeEvent = new RenderEvent(type, render, frameState,
|
||||
const composeEvent = new RenderEvent(type, pixelTransform, frameState,
|
||||
context, null);
|
||||
layer.dispatchEvent(composeEvent);
|
||||
rotateAtOffset(context, rotation, halfWidth, halfHeight);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import {getUid} from '../../util.js';
|
||||
import {createCanvasContext2D} from '../../dom.js';
|
||||
import TileState from '../../TileState.js';
|
||||
import ViewHint from '../../ViewHint.js';
|
||||
import {listen, unlisten} from '../../events.js';
|
||||
import {listen, unlisten, unlistenByKey} from '../../events.js';
|
||||
import EventType from '../../events/EventType.js';
|
||||
import rbush from 'rbush';
|
||||
import {buffer, containsCoordinate, equals, getIntersection, getTopLeft, intersects} from '../../extent.js';
|
||||
@@ -108,6 +108,12 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
|
||||
*/
|
||||
this.renderedLayerRevision_;
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {Array.<import("../../VectorImageTile.js").default>}
|
||||
*/
|
||||
this.tilesToRender_ = [];
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {import("../../transform.js").Transform}
|
||||
@@ -134,11 +140,13 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
|
||||
*/
|
||||
getTile(z, x, y, pixelRatio, projection) {
|
||||
const tile = super.getTile(z, x, y, pixelRatio, projection);
|
||||
if (tile.getState() === TileState.LOADED) {
|
||||
this.createExecutorGroup_(/** @type {import("../../VectorImageTile.js").default} */ (tile), pixelRatio, projection);
|
||||
if (this.context) {
|
||||
this.renderTileImage_(/** @type {import("../../VectorImageTile.js").default} */ (tile), pixelRatio, projection);
|
||||
}
|
||||
if (tile.getState() === TileState.IDLE) {
|
||||
const key = listen(tile, EventType.CHANGE, function() {
|
||||
if (tile.getState() === TileState.LOADING && tile.sourceTilesLoaded) {
|
||||
this.tilesToRender_.push(tile);
|
||||
unlistenByKey(key);
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
return tile;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user