From 5d6721192d58ac121f5c116fbfd8231769477030 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Mon, 9 Jul 2018 19:21:19 +0200 Subject: [PATCH] Make render listeners work with image render mode --- src/ol/renderer/canvas/VectorLayer.js | 6 +++--- .../ol/renderer/canvas/vectorlayer.test.js | 20 ++++++++++++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/ol/renderer/canvas/VectorLayer.js b/src/ol/renderer/canvas/VectorLayer.js index 8ca5e7874f..f2e2fe9235 100644 --- a/src/ol/renderer/canvas/VectorLayer.js +++ b/src/ol/renderer/canvas/VectorLayer.js @@ -210,10 +210,10 @@ CanvasVectorLayerRenderer.prototype.compose = function(context, frameState, laye rotateAtOffset(replayContext, rotation, width / 2, height / 2); + if (hasRenderListeners) { + this.dispatchRenderEvent(replayContext, frameState, transform); + } if (replayContext != context) { - if (hasRenderListeners) { - this.dispatchRenderEvent(replayContext, frameState, transform); - } if (transparentLayer) { const mainContextAlpha = context.globalAlpha; context.globalAlpha = layerState.opacity; diff --git a/test/spec/ol/renderer/canvas/vectorlayer.test.js b/test/spec/ol/renderer/canvas/vectorlayer.test.js index b20d07e66f..b6d9ecfa0b 100644 --- a/test/spec/ol/renderer/canvas/vectorlayer.test.js +++ b/test/spec/ol/renderer/canvas/vectorlayer.test.js @@ -218,7 +218,7 @@ describe('ol.renderer.canvas.VectorLayer', function() { }); }); - describe('#prepareFrame', function() { + describe('#prepareFrame and #compose', function() { let frameState, projExtent, renderer, worldWidth, buffer; beforeEach(function() { @@ -296,6 +296,24 @@ describe('ol.renderer.canvas.VectorLayer', function() { expect(renderer.replayGroupChanged).to.be(false); }); + it.only('dispatches a render event when rendering to own context', function(done) { + const layer = renderer.getLayer(); + layer.getSource().addFeature(new Feature(new Point([0, 0]))); + layer.once('render', function() { + expect(true); + done(); + }); + frameState.extent = [-10000, -10000, 10000, 10000]; + frameState.size = [100, 100]; + frameState.viewState.center = [0, 0]; + let composed = false; + if (renderer.prepareFrame(frameState, {})) { + composed = true; + renderer.compose(renderer.context, frameState, layer.getLayerState); + } + expect(composed).to.be(true); + }); + }); });