Fix container transform comparison
This commit is contained in:
@@ -7,7 +7,7 @@ import {containsExtent, intersects} from '../../extent.js';
|
|||||||
import {fromUserExtent} from '../../proj.js';
|
import {fromUserExtent} from '../../proj.js';
|
||||||
import {getIntersection, isEmpty} from '../../extent.js';
|
import {getIntersection, isEmpty} from '../../extent.js';
|
||||||
import CanvasLayerRenderer from './Layer.js';
|
import CanvasLayerRenderer from './Layer.js';
|
||||||
import {compose as composeTransform, makeInverse, toString as transformToString} from '../../transform.js';
|
import {compose as composeTransform, makeInverse} from '../../transform.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @classdesc
|
* @classdesc
|
||||||
@@ -104,7 +104,9 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
|
|||||||
);
|
);
|
||||||
makeInverse(this.inversePixelTransform, this.pixelTransform);
|
makeInverse(this.inversePixelTransform, this.pixelTransform);
|
||||||
|
|
||||||
this.useContainer(target, this.pixelTransform, layerState.opacity);
|
const canvasTransform = this.createTransformString(this.pixelTransform);
|
||||||
|
|
||||||
|
this.useContainer(target, canvasTransform, layerState.opacity);
|
||||||
|
|
||||||
const context = this.context;
|
const context = this.context;
|
||||||
const canvas = context.canvas;
|
const canvas = context.canvas;
|
||||||
@@ -162,7 +164,6 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
|
|||||||
context.restore();
|
context.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
const canvasTransform = transformToString(this.pixelTransform);
|
|
||||||
if (canvasTransform !== canvas.style.transform) {
|
if (canvasTransform !== canvas.style.transform) {
|
||||||
canvas.style.transform = canvasTransform;
|
canvas.style.transform = canvasTransform;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import RenderEvent from '../../render/Event.js';
|
|||||||
import RenderEventType from '../../render/EventType.js';
|
import RenderEventType from '../../render/EventType.js';
|
||||||
import {rotateAtOffset} from '../../render/canvas.js';
|
import {rotateAtOffset} from '../../render/canvas.js';
|
||||||
import LayerRenderer from '../Layer.js';
|
import LayerRenderer from '../Layer.js';
|
||||||
import {create as createTransform, apply as applyTransform, compose as composeTransform, toString as transformToString} from '../../transform.js';
|
import {create as createTransform, apply as applyTransform, compose as composeTransform, toString} from '../../transform.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @abstract
|
* @abstract
|
||||||
@@ -69,12 +69,18 @@ class CanvasLayerRenderer extends LayerRenderer {
|
|||||||
*/
|
*/
|
||||||
this.containerReused = false;
|
this.containerReused = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {HTMLCanvasElement}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
this.createTransformStringCanvas_ = createCanvasContext2D(1, 1).canvas;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a rendering container from an existing target, if compatible.
|
* Get a rendering container from an existing target, if compatible.
|
||||||
* @param {HTMLElement} target Potential render target.
|
* @param {HTMLElement} target Potential render target.
|
||||||
* @param {import("../../transform").Transform} transform Transform.
|
* @param {string} transform CSS Transform.
|
||||||
* @param {number} opacity Opacity.
|
* @param {number} opacity Opacity.
|
||||||
*/
|
*/
|
||||||
useContainer(target, transform, opacity) {
|
useContainer(target, transform, opacity) {
|
||||||
@@ -86,7 +92,7 @@ class CanvasLayerRenderer extends LayerRenderer {
|
|||||||
context = canvas.getContext('2d');
|
context = canvas.getContext('2d');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (context && context.canvas.style.transform === transformToString(transform)) {
|
if (context && context.canvas.style.transform === transform) {
|
||||||
// Container of the previous layer renderer can be used.
|
// Container of the previous layer renderer can be used.
|
||||||
this.container = target;
|
this.container = target;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
@@ -263,6 +269,15 @@ class CanvasLayerRenderer extends LayerRenderer {
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {import("../../transform.js").Transform} transform Transform.
|
||||||
|
* @return {string} CSS transform.
|
||||||
|
*/
|
||||||
|
createTransformString(transform) {
|
||||||
|
this.createTransformStringCanvas_.style.transform = toString(transform);
|
||||||
|
return this.createTransformStringCanvas_.style.transform;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CanvasLayerRenderer;
|
export default CanvasLayerRenderer;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import TileRange from '../../TileRange.js';
|
|||||||
import TileState from '../../TileState.js';
|
import TileState from '../../TileState.js';
|
||||||
import {createEmpty, equals, getIntersection, getTopLeft} from '../../extent.js';
|
import {createEmpty, equals, getIntersection, getTopLeft} from '../../extent.js';
|
||||||
import CanvasLayerRenderer from './Layer.js';
|
import CanvasLayerRenderer from './Layer.js';
|
||||||
import {apply as applyTransform, compose as composeTransform, makeInverse, toString as transformToString} from '../../transform.js';
|
import {apply as applyTransform, compose as composeTransform, makeInverse} from '../../transform.js';
|
||||||
import {numberSafeCompareFunction} from '../../array.js';
|
import {numberSafeCompareFunction} from '../../array.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -242,7 +242,9 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
-width / 2, -height / 2
|
-width / 2, -height / 2
|
||||||
);
|
);
|
||||||
|
|
||||||
this.useContainer(target, this.pixelTransform, layerState.opacity);
|
const canvasTransform = this.createTransformString(this.pixelTransform);
|
||||||
|
|
||||||
|
this.useContainer(target, canvasTransform, layerState.opacity);
|
||||||
const context = this.context;
|
const context = this.context;
|
||||||
const canvas = context.canvas;
|
const canvas = context.canvas;
|
||||||
|
|
||||||
@@ -368,7 +370,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|||||||
context.restore();
|
context.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
const canvasTransform = transformToString(this.pixelTransform);
|
|
||||||
if (canvasTransform !== canvas.style.transform) {
|
if (canvasTransform !== canvas.style.transform) {
|
||||||
canvas.style.transform = canvasTransform;
|
canvas.style.transform = canvasTransform;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -127,7 +127,9 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
|
|||||||
makeScale(this.pixelTransform, 1 / pixelRatio, 1 / pixelRatio);
|
makeScale(this.pixelTransform, 1 / pixelRatio, 1 / pixelRatio);
|
||||||
makeInverse(this.inversePixelTransform, this.pixelTransform);
|
makeInverse(this.inversePixelTransform, this.pixelTransform);
|
||||||
|
|
||||||
this.useContainer(target, this.pixelTransform, layerState.opacity);
|
const canvasTransform = transformToString(this.pixelTransform);
|
||||||
|
|
||||||
|
this.useContainer(target, canvasTransform, layerState.opacity);
|
||||||
const context = this.context;
|
const context = this.context;
|
||||||
const canvas = context.canvas;
|
const canvas = context.canvas;
|
||||||
|
|
||||||
@@ -145,7 +147,6 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
|
|||||||
if (canvas.width != width || canvas.height != height) {
|
if (canvas.width != width || canvas.height != height) {
|
||||||
canvas.width = width;
|
canvas.width = width;
|
||||||
canvas.height = height;
|
canvas.height = height;
|
||||||
const canvasTransform = transformToString(this.pixelTransform);
|
|
||||||
if (canvas.style.transform !== canvasTransform) {
|
if (canvas.style.transform !== canvasTransform) {
|
||||||
canvas.style.transform = canvasTransform;
|
canvas.style.transform = canvasTransform;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user