Call setRenderIntent on the feature, not the layer
This commit is contained in:
@@ -175,6 +175,20 @@ ol.Feature.prototype.setGeometry = function(geometry) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Changes the renderIntent for this feature.
|
||||
* @param {string} renderIntent Render intent.
|
||||
*/
|
||||
ol.Feature.prototype.setRenderIntent = function(renderIntent) {
|
||||
this.renderIntent = renderIntent;
|
||||
var geometry = this.getGeometry();
|
||||
if (!goog.isNull(geometry)) {
|
||||
this.dispatchEvent(new ol.FeatureEvent(
|
||||
ol.FeatureEventType.INTENTCHANGE, this, geometry.getBounds()));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Set the symbolizers to be used for this feature.
|
||||
* @param {Array.<ol.style.Symbolizer>} symbolizers Symbolizers for this
|
||||
@@ -196,7 +210,8 @@ ol.Feature.DEFAULT_GEOMETRY = 'geometry';
|
||||
* @enum {string}
|
||||
*/
|
||||
ol.FeatureEventType = {
|
||||
CHANGE: 'featurechange'
|
||||
CHANGE: 'featurechange',
|
||||
INTENTCHANGE: 'featureintentchange'
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -119,10 +119,8 @@ ol.interaction.Select.prototype.select =
|
||||
}
|
||||
|
||||
var selectedFeatures, unselectedFeatures;
|
||||
if (goog.isFunction(layer.setRenderIntent)) {
|
||||
selectedFeatures = [];
|
||||
unselectedFeatures = [];
|
||||
}
|
||||
var features = featuresByLayer[i];
|
||||
var numFeatures = features.length;
|
||||
var featuresToAdd = [];
|
||||
@@ -131,9 +129,7 @@ ol.interaction.Select.prototype.select =
|
||||
var oldFeatureMap = featureMap;
|
||||
if (clear) {
|
||||
for (var f in featureMap) {
|
||||
if (goog.isDef(unselectedFeatures)) {
|
||||
unselectedFeatures.push(layer.getFeatureWithUid(f));
|
||||
}
|
||||
featuresToRemove.push(featureMap[f]);
|
||||
}
|
||||
featureMap = {};
|
||||
@@ -145,9 +141,7 @@ ol.interaction.Select.prototype.select =
|
||||
var clone = featureMap[featureId];
|
||||
if (clone) {
|
||||
// TODO: make toggle configurable
|
||||
if (goog.isDef(unselectedFeatures)) {
|
||||
unselectedFeatures.push(feature);
|
||||
}
|
||||
delete featureMap[featureId];
|
||||
featuresToRemove.push(clone);
|
||||
} else if (!(featureId in oldFeatureMap)) {
|
||||
@@ -157,17 +151,17 @@ ol.interaction.Select.prototype.select =
|
||||
clone.setSymbolizers(feature.getSymbolizers());
|
||||
clone.renderIntent = ol.layer.VectorLayerRenderIntent.SELECTED;
|
||||
featureMap[featureId] = clone;
|
||||
if (goog.isDef(selectedFeatures)) {
|
||||
selectedFeatures.push(feature);
|
||||
}
|
||||
featuresToAdd.push(clone);
|
||||
}
|
||||
}
|
||||
if (goog.isFunction(layer.setRenderIntent)) {
|
||||
layer.setRenderIntent(ol.layer.VectorLayerRenderIntent.HIDDEN,
|
||||
selectedFeatures);
|
||||
layer.setRenderIntent(ol.layer.VectorLayerRenderIntent.DEFAULT,
|
||||
unselectedFeatures);
|
||||
for (var j = selectedFeatures.length - 1; j >= 0; --j) {
|
||||
selectedFeatures[j].setRenderIntent(
|
||||
ol.layer.VectorLayerRenderIntent.HIDDEN);
|
||||
}
|
||||
for (var j = unselectedFeatures.length - 1; j >= 0; --j) {
|
||||
unselectedFeatures[j].setRenderIntent(
|
||||
ol.layer.VectorLayerRenderIntent.DEFAULT);
|
||||
}
|
||||
selectionLayer.removeFeatures(featuresToRemove);
|
||||
selectionLayer.addFeatures(featuresToAdd);
|
||||
|
||||
@@ -188,6 +188,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
|
||||
}
|
||||
goog.events.listen(feature, ol.FeatureEventType.CHANGE,
|
||||
this.handleFeatureChange_, false, this);
|
||||
goog.events.listen(feature, ol.FeatureEventType.INTENTCHANGE,
|
||||
this.handleIntentChange_, false, this);
|
||||
}
|
||||
this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.ADD,
|
||||
features, [extent]));
|
||||
@@ -217,6 +219,20 @@ ol.layer.Vector.prototype.handleFeatureChange_ = function(evt) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Listener for render intent change events of features.
|
||||
* @param {ol.FeatureEvent} evt The feature intent change event.
|
||||
* @private
|
||||
*/
|
||||
ol.layer.Vector.prototype.handleIntentChange_ = function(evt) {
|
||||
goog.asserts.assertInstanceof(evt.target, ol.Feature);
|
||||
var feature = /** @type {ol.Feature} */ (evt.target);
|
||||
this.dispatchEvent(new ol.layer.VectorEvent(
|
||||
ol.layer.VectorEventType.INTENTCHANGE, [feature],
|
||||
[feature.getGeometry().getBounds()]));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Remove all features from the layer.
|
||||
*/
|
||||
@@ -423,31 +439,6 @@ ol.layer.Vector.prototype.removeFeatures = function(features) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Changes the renderIntent for an array of features.
|
||||
* @param {string} renderIntent Render intent.
|
||||
* @param {Array.<ol.Feature>=} opt_features Features to change the renderIntent
|
||||
* for. If not provided, all features will be changed.
|
||||
*/
|
||||
ol.layer.Vector.prototype.setRenderIntent =
|
||||
function(renderIntent, opt_features) {
|
||||
var features = goog.isDef(opt_features) ? opt_features :
|
||||
goog.object.getValues(this.featureCache_.getFeaturesObject());
|
||||
var extent = ol.extent.createEmpty(),
|
||||
feature, geometry;
|
||||
for (var i = features.length - 1; i >= 0; --i) {
|
||||
feature = features[i];
|
||||
feature.renderIntent = renderIntent;
|
||||
geometry = feature.getGeometry();
|
||||
if (!goog.isNull(geometry)) {
|
||||
ol.extent.extend(extent, geometry.getBounds());
|
||||
}
|
||||
}
|
||||
this.dispatchEvent(new ol.layer.VectorEvent(
|
||||
ol.layer.VectorEventType.INTENTCHANGE, features, [extent]));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {boolean} temp Whether this layer is temporary.
|
||||
*/
|
||||
@@ -511,6 +502,6 @@ goog.inherits(ol.layer.VectorEvent, goog.events.Event);
|
||||
ol.layer.VectorEventType = {
|
||||
ADD: 'featureadd',
|
||||
CHANGE: 'featurechange',
|
||||
REMOVE: 'featureremove',
|
||||
INTENTCHANGE: 'intentchange'
|
||||
INTENTCHANGE: 'featureintentchange',
|
||||
REMOVE: 'featureremove'
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user