Merge pull request #1092 from tschaub/vector-event

Extend goog.events.Event for custom vector layer events.
This commit is contained in:
Tim Schaub
2013-10-03 11:23:39 -07:00
2 changed files with 63 additions and 51 deletions
+47 -39
View File
@@ -1,9 +1,9 @@
goog.provide('ol.layer.Vector'); goog.provide('ol.layer.Vector');
goog.provide('ol.layer.VectorLayerEventType'); goog.provide('ol.layer.VectorEventType');
goog.require('goog.array'); goog.require('goog.array');
goog.require('goog.asserts'); goog.require('goog.asserts');
goog.require('goog.events.EventType'); goog.require('goog.events.Event');
goog.require('goog.object'); goog.require('goog.object');
goog.require('ol.Feature'); goog.require('ol.Feature');
goog.require('ol.extent'); goog.require('ol.extent');
@@ -128,25 +128,6 @@ ol.layer.FeatureCache.prototype.remove = function(feature) {
}; };
/**
* @enum {string}
*/
ol.layer.VectorLayerEventType = {
ADD: 'add',
CHANGE: goog.events.EventType.CHANGE,
REMOVE: 'remove',
INTENTCHANGE: 'intentchange'
};
/**
* @typedef {{extent: (ol.Extent|undefined),
* features: (Array.<ol.Feature>|undefined),
* type: ol.layer.VectorLayerEventType}}
*/
ol.layer.VectorLayerEventObject;
/** /**
* @constructor * @constructor
@@ -201,11 +182,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
ol.extent.extend(extent, geometry.getBounds()); ol.extent.extend(extent, geometry.getBounds());
} }
} }
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({ this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.ADD,
extent: extent, features, [extent]));
features: features,
type: ol.layer.VectorLayerEventType.ADD
}));
}; };
@@ -214,9 +192,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
*/ */
ol.layer.Vector.prototype.clear = function() { ol.layer.Vector.prototype.clear = function() {
this.featureCache_.clear(); this.featureCache_.clear();
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({ this.dispatchEvent(
type: ol.layer.VectorLayerEventType.CHANGE new ol.layer.VectorEvent(ol.layer.VectorEventType.CHANGE, [], []));
}));
}; };
@@ -411,11 +388,8 @@ ol.layer.Vector.prototype.removeFeatures = function(features) {
ol.extent.extend(extent, geometry.getBounds()); ol.extent.extend(extent, geometry.getBounds());
} }
} }
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({ this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.REMOVE,
extent: extent, features, [extent]));
features: features,
type: ol.layer.VectorLayerEventType.REMOVE
}));
}; };
@@ -439,11 +413,8 @@ ol.layer.Vector.prototype.setRenderIntent =
ol.extent.extend(extent, geometry.getBounds()); ol.extent.extend(extent, geometry.getBounds());
} }
} }
this.dispatchEvent(/** @type {ol.layer.VectorLayerEventObject} */ ({ this.dispatchEvent(new ol.layer.VectorEvent(
extent: extent, ol.layer.VectorEventType.INTENTCHANGE, features, [extent]));
features: features,
type: ol.layer.VectorLayerEventType.INTENTCHANGE
}));
}; };
@@ -476,3 +447,40 @@ ol.layer.Vector.uidTransformFeatureInfo = function(features) {
function(feature) { return goog.getUid(feature); }); function(feature) { return goog.getUid(feature); });
return uids.join(', '); return uids.join(', ');
}; };
/**
* @constructor
* @extends {goog.events.Event}
* @param {string} type Event type.
* @param {Array.<ol.Feature>} features Features associated with the event.
* @param {Array.<ol.Extent>} extents Any extents associated with the event.
*/
ol.layer.VectorEvent = function(type, features, extents) {
goog.base(this, type);
/**
* @type {Array.<ol.Feature>}
*/
this.features = features;
/**
* @type {Array.<ol.Extent>}
*/
this.extents = extents;
};
goog.inherits(ol.layer.VectorEvent, goog.events.Event);
/**
* @enum {string}
*/
ol.layer.VectorEventType = {
ADD: 'featureadd',
CHANGE: 'featurechange',
REMOVE: 'featureremove',
INTENTCHANGE: 'intentchange'
};
@@ -13,7 +13,7 @@ goog.require('ol.ViewHint');
goog.require('ol.extent'); goog.require('ol.extent');
goog.require('ol.geom.GeometryType'); goog.require('ol.geom.GeometryType');
goog.require('ol.layer.Vector'); goog.require('ol.layer.Vector');
goog.require('ol.layer.VectorLayerEventType'); goog.require('ol.layer.VectorEventType');
goog.require('ol.layer.VectorLayerRenderIntent'); goog.require('ol.layer.VectorLayerRenderIntent');
goog.require('ol.renderer.canvas.Layer'); goog.require('ol.renderer.canvas.Layer');
goog.require('ol.renderer.canvas.Vector'); goog.require('ol.renderer.canvas.Vector');
@@ -88,10 +88,10 @@ ol.renderer.canvas.VectorLayer = function(mapRenderer, layer) {
this.tileCache_ = new ol.TileCache( this.tileCache_ = new ol.TileCache(
ol.renderer.canvas.VectorLayer.TILECACHE_SIZE); ol.renderer.canvas.VectorLayer.TILECACHE_SIZE);
goog.events.listen(layer, [ goog.events.listen(layer, [
ol.layer.VectorLayerEventType.ADD, ol.layer.VectorEventType.ADD,
ol.layer.VectorLayerEventType.CHANGE, ol.layer.VectorEventType.CHANGE,
ol.layer.VectorLayerEventType.REMOVE, ol.layer.VectorEventType.REMOVE,
ol.layer.VectorLayerEventType.INTENTCHANGE ol.layer.VectorEventType.INTENTCHANGE
], ],
this.handleLayerChange_, false, this); this.handleLayerChange_, false, this);
@@ -163,14 +163,18 @@ goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer);
/** /**
* Get rid cached tiles. If the optional extent is provided, only tiles that * Get rid cached tiles. If the optional extent is provided, only tiles that
* intersect that extent will be removed. * intersect that extent will be removed.
* @param {ol.Extent=} opt_extent extent Expire tiles within this extent only. * @param {Array.<ol.Extent>} extents extent Expire tiles within the provided
* extents. If the array is empty, all tiles will be expired.
* @private * @private
*/ */
ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(opt_extent) { ol.renderer.canvas.VectorLayer.prototype.expireTiles_ = function(extents) {
var tileCache = this.tileCache_; var tileCache = this.tileCache_;
if (goog.isDef(opt_extent)) { var length = extents.length;
var tileRange = this.tileGrid_.getTileRangeForExtentAndZ(opt_extent, 0); if (length > 0) {
tileCache.pruneTileRange(tileRange); for (var i = 0; i < length; ++i) {
tileCache.pruneTileRange(
this.tileGrid_.getTileRangeForExtentAndZ(extents[i], 0));
}
} else { } else {
tileCache.clear(); tileCache.clear();
} }
@@ -307,11 +311,11 @@ ol.renderer.canvas.VectorLayer.prototype.getFeaturesForPixel =
/** /**
* @param {ol.layer.VectorLayerEventObject} event Layer change event. * @param {ol.layer.VectorEvent} event Vector layer event.
* @private * @private
*/ */
ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) { ol.renderer.canvas.VectorLayer.prototype.handleLayerChange_ = function(event) {
this.expireTiles_(event.extent); this.expireTiles_(event.extents);
this.requestMapRenderFrame_(); this.requestMapRenderFrame_();
}; };