diff --git a/src/ol/source/imagevectorsource.js b/src/ol/source/imagevectorsource.js index 7b7cd876dc..79759757ae 100644 --- a/src/ol/source/imagevectorsource.js +++ b/src/ol/source/imagevectorsource.js @@ -194,12 +194,9 @@ ol.source.ImageVector.prototype.getTransform_ = * @param {goog.events.Event} event Image style change event. * @private */ -ol.source.ImageVector.prototype.handleImageStyleChange_ = +ol.source.ImageVector.prototype.handleImageChange_ = function(event) { - var imageStyle = /** @type {ol.style.Image} */ (event.target); - if (imageStyle.getImageState() == ol.style.ImageState.LOADED) { - this.dispatchChangeEvent(); - } + this.dispatchChangeEvent(); }; @@ -235,21 +232,27 @@ ol.source.ImageVector.prototype.renderFeature_ = for (i = 0, ii = styles.length; i < ii; ++i) { style = styles[i]; imageStyle = style.getImage(); - if (!goog.isNull(imageStyle)) { - if (imageStyle.getImageState() == ol.style.ImageState.IDLE) { - goog.events.listenOnce(imageStyle, goog.events.EventType.CHANGE, - this.handleImageStyleChange_, false, this); - imageStyle.load(); - } else if (imageStyle.getImageState() == ol.style.ImageState.LOADED) { - ol.renderer.vector.renderFeature( - replayGroup, feature, style, squaredTolerance, feature); - } - goog.asserts.assert( - imageStyle.getImageState() != ol.style.ImageState.IDLE); - loading = imageStyle.getImageState() == ol.style.ImageState.LOADING; - } else { + if (goog.isNull(imageStyle)) { ol.renderer.vector.renderFeature( replayGroup, feature, style, squaredTolerance, feature); + } else { + imageState = imageStyle.getImageState(); + if (imageState == ol.style.ImageState.LOADED || + imageState == ol.style.ImageState.ERROR) { + imageStyle.unlistenImageChange(this.handleImageChange_, this); + if (imageState == ol.style.ImageState.LOADED) { + ol.renderer.vector.renderFeature( + replayGroup, feature, style, squaredTolerance, feature); + } + } else { + if (imageState == ol.style.ImageState.IDLE) { + imageStyle.load(); + } + imageState = imageStyle.getImageState(); + goog.asserts.assert(imageState == ol.style.ImageState.LOADING); + imageStyle.listenImageChange(this.handleImageChange_, this); + loading = true; + } } } return loading;