diff --git a/externs/olx.js b/externs/olx.js index 1789574ec3..714db69548 100644 --- a/externs/olx.js +++ b/externs/olx.js @@ -3397,6 +3397,7 @@ olx.layer.TileOptions.prototype.useInterimTilesOnError; * source: (ol.source.Vector|undefined), * style: (ol.style.Style|Array.|ol.style.StyleFunction|undefined), * updateWhileAnimating: (boolean|undefined), + * updateWhileInteracting: (boolean|undefined), * visible: (boolean|undefined)}} * @api */ @@ -3516,6 +3517,15 @@ olx.layer.VectorOptions.prototype.style; olx.layer.VectorOptions.prototype.updateWhileAnimating; +/** + * When set to `true`, feature batches will be recreated during interactions. + * See also `updateWhileInteracting`. Default is `false`. + * @type {boolean|undefined} + * @api + */ +olx.layer.VectorOptions.prototype.updateWhileInteracting; + + /** * Visibility. Default is `true` (visible). * @type {boolean|undefined} diff --git a/src/ol/layer/vectorlayer.js b/src/ol/layer/vectorlayer.js index 90d5e8657a..a70da218ef 100644 --- a/src/ol/layer/vectorlayer.js +++ b/src/ol/layer/vectorlayer.js @@ -37,6 +37,7 @@ ol.layer.Vector = function(opt_options) { delete baseOptions.style; delete baseOptions.renderBuffer; delete baseOptions.updateWhileAnimating; + delete baseOptions.updateWhileInteracting; goog.base(this, /** @type {olx.layer.LayerOptions} */ (baseOptions)); /** @@ -69,6 +70,13 @@ ol.layer.Vector = function(opt_options) { this.updateWhileAnimating_ = goog.isDef(options.updateWhileAnimating) ? options.updateWhileAnimating : false; + /** + * @type {boolean} + * @private + */ + this.updateWhileInteracting_ = goog.isDef(options.updateWhileInteracting) ? + options.updateWhileInteracting : false; + }; goog.inherits(ol.layer.Vector, ol.layer.Layer); @@ -130,6 +138,15 @@ ol.layer.Vector.prototype.getUpdateWhileAnimating = function() { }; +/** + * @return {boolean} Whether the rendered layer should be updated while + * interacting. + */ +ol.layer.Vector.prototype.getUpdateWhileInteracting = function() { + return this.updateWhileInteracting_; +}; + + /** * @param {function(ol.Feature, ol.Feature):number|null|undefined} renderOrder * Render order. diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index a4d72d9047..6b913462da 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -169,9 +169,13 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame = frameState.attributions, vectorSource.getAttributions()); this.updateLogos(frameState, vectorSource); - if (!this.dirty_ && (!vectorLayer.getUpdateWhileAnimating() && - frameState.viewHints[ol.ViewHint.ANIMATING] || - frameState.viewHints[ol.ViewHint.INTERACTING])) { + var animating = frameState.viewHints[ol.ViewHint.ANIMATING]; + var interacting = frameState.viewHints[ol.ViewHint.INTERACTING]; + var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating(); + var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting(); + + if (!this.dirty_ && (!updateWhileAnimating && animating) || + (!updateWhileInteracting && interacting)) { return true; } diff --git a/src/ol/renderer/dom/domvectorlayerrenderer.js b/src/ol/renderer/dom/domvectorlayerrenderer.js index a2c55c5057..9cf5f32dbd 100644 --- a/src/ol/renderer/dom/domvectorlayerrenderer.js +++ b/src/ol/renderer/dom/domvectorlayerrenderer.js @@ -230,9 +230,13 @@ ol.renderer.dom.VectorLayer.prototype.prepareFrame = frameState.attributions, vectorSource.getAttributions()); this.updateLogos(frameState, vectorSource); - if (!this.dirty_ && (!vectorLayer.getUpdateWhileAnimating() && - frameState.viewHints[ol.ViewHint.ANIMATING] || - frameState.viewHints[ol.ViewHint.INTERACTING])) { + var animating = frameState.viewHints[ol.ViewHint.ANIMATING]; + var interacting = frameState.viewHints[ol.ViewHint.INTERACTING]; + var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating(); + var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting(); + + if (!this.dirty_ && (!updateWhileAnimating && animating) || + (!updateWhileInteracting && interacting)) { return true; } diff --git a/src/ol/renderer/webgl/webglvectorlayerrenderer.js b/src/ol/renderer/webgl/webglvectorlayerrenderer.js index cfbbaff09f..f12022d915 100644 --- a/src/ol/renderer/webgl/webglvectorlayerrenderer.js +++ b/src/ol/renderer/webgl/webglvectorlayerrenderer.js @@ -202,9 +202,13 @@ ol.renderer.webgl.VectorLayer.prototype.prepareFrame = frameState.attributions, vectorSource.getAttributions()); this.updateLogos(frameState, vectorSource); - if (!this.dirty_ && (!vectorLayer.getUpdateWhileAnimating() && - frameState.viewHints[ol.ViewHint.ANIMATING] || - frameState.viewHints[ol.ViewHint.INTERACTING])) { + var animating = frameState.viewHints[ol.ViewHint.ANIMATING]; + var interacting = frameState.viewHints[ol.ViewHint.INTERACTING]; + var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating(); + var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting(); + + if (!this.dirty_ && (!updateWhileAnimating && animating) || + (!updateWhileInteracting && interacting)) { return true; }