Merge pull request #1092 from tschaub/vector-event
Extend goog.events.Event for custom vector layer events.
This commit is contained in:
+47
-39
@@ -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_();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user