Use opacity from layer state

This commit is contained in:
ahocevar
2019-05-22 12:20:34 +02:00
parent 4c8effe6fa
commit ae47d3df58
6 changed files with 16 additions and 14 deletions

View File

@@ -101,7 +101,7 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
); );
makeInverse(this.inversePixelTransform_, this.pixelTransform_); makeInverse(this.inversePixelTransform_, this.pixelTransform_);
this.useContainer(target, this.pixelTransform_); this.useContainer(target, this.pixelTransform_, layerState.opacity);
const context = this.context; const context = this.context;
const canvas = context.canvas; const canvas = context.canvas;
@@ -140,7 +140,7 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
this.preRender(context, frameState); this.preRender(context, frameState);
if (dw >= 0.5 && dh >= 0.5) { if (dw >= 0.5 && dh >= 0.5) {
const opacity = this.getLayer().getOpacity(); const opacity = layerState.opacity;
let previousAlpha; let previousAlpha;
if (opacity !== 1) { if (opacity !== 1) {
previousAlpha = this.context.globalAlpha; previousAlpha = this.context.globalAlpha;

View File

@@ -74,8 +74,9 @@ class CanvasLayerRenderer extends LayerRenderer {
* 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 {import("../../transform").Transform} transform Transform.
* @param {number} opacity Opacity.
*/ */
useContainer(target, transform) { useContainer(target, transform, opacity) {
const layerClassName = this.getLayer().getClassName(); const layerClassName = this.getLayer().getClassName();
let container, context; let container, context;
if (target) { if (target) {

View File

@@ -233,7 +233,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
-width / 2, -height / 2 -width / 2, -height / 2
); );
this.useContainer(target, this.pixelTransform_); this.useContainer(target, this.pixelTransform_, layerState.opacity);
const context = this.context; const context = this.context;
const canvas = context.canvas; const canvas = context.canvas;
@@ -334,7 +334,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
clips.push(currentClip); clips.push(currentClip);
clipZs.push(currentZ); clipZs.push(currentZ);
} }
this.drawTileImage(tile, frameState, x, y, w, h, tileGutter, transition); this.drawTileImage(tile, frameState, x, y, w, h, tileGutter, transition, layerState.opacity);
if (clips) { if (clips) {
context.restore(); context.restore();
} }
@@ -377,14 +377,15 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
* @param {number} h Height of the tile. * @param {number} h Height of the tile.
* @param {number} gutter Tile gutter. * @param {number} gutter Tile gutter.
* @param {boolean} transition Apply an alpha transition. * @param {boolean} transition Apply an alpha transition.
* @param {number} opacity Opacity.
*/ */
drawTileImage(tile, frameState, x, y, w, h, gutter, transition) { drawTileImage(tile, frameState, x, y, w, h, gutter, transition, opacity) {
const image = this.getTileImage(tile); const image = this.getTileImage(tile);
if (!image) { if (!image) {
return; return;
} }
const uid = getUid(this); const uid = getUid(this);
const alpha = this.getLayer().getOpacity() * (transition ? tile.getAlpha(uid, frameState.time) : 1); const alpha = opacity * (transition ? tile.getAlpha(uid, frameState.time) : 1);
const alphaChanged = alpha !== this.context.globalAlpha; const alphaChanged = alpha !== this.context.globalAlpha;
if (alphaChanged) { if (alphaChanged) {
this.context.save(); this.context.save();

View File

@@ -78,7 +78,7 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer {
if (!hints[ViewHint.ANIMATING] && !hints[ViewHint.INTERACTING] && !isEmpty(renderedExtent)) { if (!hints[ViewHint.ANIMATING] && !hints[ViewHint.INTERACTING] && !isEmpty(renderedExtent)) {
let skippedFeatures = this.skippedFeatures_; let skippedFeatures = this.skippedFeatures_;
vectorRenderer.useContainer(null, null); vectorRenderer.useContainer(null, null, 1);
const context = vectorRenderer.context; const context = vectorRenderer.context;
const imageFrameState = /** @type {import("../../PluggableMap.js").FrameState} */ (assign({}, frameState, { const imageFrameState = /** @type {import("../../PluggableMap.js").FrameState} */ (assign({}, frameState, {
declutterItems: [], declutterItems: [],

View File

@@ -70,11 +70,11 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
/** /**
* @inheritDoc * @inheritDoc
*/ */
useContainer(target, transform) { useContainer(target, transform, opacity) {
if (this.getLayer().getOpacity() < 1) { if (opacity < 1) {
target = null; target = null;
} }
super.useContainer(target, transform); super.useContainer(target, transform, opacity);
} }
/** /**
@@ -88,7 +88,7 @@ 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_); this.useContainer(target, this.pixelTransform_, layerState.opacity);
const context = this.context; const context = this.context;
const canvas = context.canvas; const canvas = context.canvas;

View File

@@ -114,7 +114,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
/** /**
* @inheritDoc * @inheritDoc
*/ */
useContainer(target, transform) { useContainer(target, transform, opacity) {
let overlayContext; let overlayContext;
if (target && target.childElementCount === 2) { if (target && target.childElementCount === 2) {
overlayContext = target.lastElementChild.getContext('2d'); overlayContext = target.lastElementChild.getContext('2d');
@@ -123,7 +123,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
} }
} }
const containerReused = this.containerReused; const containerReused = this.containerReused;
super.useContainer(target, transform); super.useContainer(target, transform, opacity);
if (containerReused && !this.containerReused && !overlayContext) { if (containerReused && !this.containerReused && !overlayContext) {
this.overlayContext_ = null; this.overlayContext_ = null;
} }