Add image loading events to image sources

This commit is contained in:
Bart van den Eijnden
2015-03-03 19:53:32 +01:00
parent 3a7b9751d7
commit 4569858882
8 changed files with 294 additions and 1 deletions

View File

@@ -1,5 +1,7 @@
goog.provide('ol.source.ImageMapGuide');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.object');
goog.require('goog.uri.utils');
goog.require('ol.Image');
@@ -15,6 +17,7 @@ goog.require('ol.source.Image');
* Source for images from Mapguide servers
*
* @constructor
* @fires ol.source.ImageEvent
* @extends {ol.source.Image}
* @param {olx.source.ImageMapGuideOptions} options Options.
* @api stable
@@ -150,6 +153,8 @@ ol.source.ImageMapGuide.prototype.getImage =
image = new ol.Image(extent, resolution, pixelRatio,
this.getAttributions(), imageUrl, this.crossOrigin_,
this.imageLoadFunction_);
goog.events.listen(image, goog.events.EventType.CHANGE,
this.handleImageChange, false, this);
} else {
image = null;
}

View File

@@ -2,8 +2,10 @@ goog.provide('ol.source.Image');
goog.require('goog.array');
goog.require('goog.asserts');
goog.require('goog.events.Event');
goog.require('ol.Attribution');
goog.require('ol.Extent');
goog.require('ol.ImageState');
goog.require('ol.array');
goog.require('ol.source.Source');
@@ -90,6 +92,33 @@ ol.source.Image.prototype.findNearestResolution =
ol.source.Image.prototype.getImage = goog.abstractMethod;
/**
* Handle image change events.
* @param {goog.events.Event} event Event.
* @protected
*/
ol.source.Image.prototype.handleImageChange = function(event) {
var image = /** @type {ol.Image} */ (event.target);
switch (image.getState()) {
case ol.ImageState.LOADING:
this.dispatchEvent(
new ol.source.ImageEvent(ol.source.ImageEventType.IMAGELOADSTART,
image));
break;
case ol.ImageState.LOADED:
this.dispatchEvent(
new ol.source.ImageEvent(ol.source.ImageEventType.IMAGELOADEND,
image));
break;
case ol.ImageState.ERROR:
this.dispatchEvent(
new ol.source.ImageEvent(ol.source.ImageEventType.IMAGELOADERROR,
image));
break;
}
};
/**
* Default image load function for image sources that use ol.Image image
* instances.
@@ -99,3 +128,59 @@ ol.source.Image.prototype.getImage = goog.abstractMethod;
ol.source.Image.defaultImageLoadFunction = function(image, src) {
image.getImage().src = src;
};
/**
* @classdesc
* Events emitted by {@link ol.source.Image} instances are instances of this
* type.
*
* @constructor
* @extends {goog.events.Event}
* @implements {oli.source.ImageEvent}
* @param {string} type Type.
* @param {ol.Image} image The image.
*/
ol.source.ImageEvent = function(type, image) {
goog.base(this, type);
/**
* The image related to the event.
* @type {ol.Image}
* @api
*/
this.image = image;
};
goog.inherits(ol.source.ImageEvent, goog.events.Event);
/**
* @enum {string}
*/
ol.source.ImageEventType = {
/**
* Triggered when an image starts loading.
* @event ol.source.ImageEvent#imageloadstart
* @api
*/
IMAGELOADSTART: 'imageloadstart',
/**
* Triggered when an image finishes loading.
* @event ol.source.ImageEvent#imageloadend
* @api
*/
IMAGELOADEND: 'imageloadend',
/**
* Triggered if image loading results in an error.
* @event ol.source.ImageEvent#imageloaderror
* @api
*/
IMAGELOADERROR: 'imageloaderror'
};

View File

@@ -3,6 +3,8 @@
goog.provide('ol.source.ImageWMS');
goog.require('goog.asserts');
goog.require('goog.events');
goog.require('goog.events.EventType');
goog.require('goog.object');
goog.require('goog.string');
goog.require('goog.uri.utils');
@@ -22,6 +24,7 @@ goog.require('ol.source.wms.ServerType');
* Source for WMS servers providing single, untiled images.
*
* @constructor
* @fires ol.source.ImageEvent
* @extends {ol.source.Image}
* @param {olx.source.ImageWMSOptions=} opt_options Options.
* @api stable
@@ -247,6 +250,9 @@ ol.source.ImageWMS.prototype.getImage =
this.renderedRevision_ = this.getRevision();
goog.events.listen(this.image_, goog.events.EventType.CHANGE,
this.handleImageChange, false, this);
return this.image_;
};