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.
|
* Set the symbolizers to be used for this feature.
|
||||||
* @param {Array.<ol.style.Symbolizer>} symbolizers Symbolizers for this
|
* @param {Array.<ol.style.Symbolizer>} symbolizers Symbolizers for this
|
||||||
@@ -196,7 +210,8 @@ ol.Feature.DEFAULT_GEOMETRY = 'geometry';
|
|||||||
* @enum {string}
|
* @enum {string}
|
||||||
*/
|
*/
|
||||||
ol.FeatureEventType = {
|
ol.FeatureEventType = {
|
||||||
CHANGE: 'featurechange'
|
CHANGE: 'featurechange',
|
||||||
|
INTENTCHANGE: 'featureintentchange'
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -119,10 +119,8 @@ ol.interaction.Select.prototype.select =
|
|||||||
}
|
}
|
||||||
|
|
||||||
var selectedFeatures, unselectedFeatures;
|
var selectedFeatures, unselectedFeatures;
|
||||||
if (goog.isFunction(layer.setRenderIntent)) {
|
|
||||||
selectedFeatures = [];
|
selectedFeatures = [];
|
||||||
unselectedFeatures = [];
|
unselectedFeatures = [];
|
||||||
}
|
|
||||||
var features = featuresByLayer[i];
|
var features = featuresByLayer[i];
|
||||||
var numFeatures = features.length;
|
var numFeatures = features.length;
|
||||||
var featuresToAdd = [];
|
var featuresToAdd = [];
|
||||||
@@ -131,9 +129,7 @@ ol.interaction.Select.prototype.select =
|
|||||||
var oldFeatureMap = featureMap;
|
var oldFeatureMap = featureMap;
|
||||||
if (clear) {
|
if (clear) {
|
||||||
for (var f in featureMap) {
|
for (var f in featureMap) {
|
||||||
if (goog.isDef(unselectedFeatures)) {
|
|
||||||
unselectedFeatures.push(layer.getFeatureWithUid(f));
|
unselectedFeatures.push(layer.getFeatureWithUid(f));
|
||||||
}
|
|
||||||
featuresToRemove.push(featureMap[f]);
|
featuresToRemove.push(featureMap[f]);
|
||||||
}
|
}
|
||||||
featureMap = {};
|
featureMap = {};
|
||||||
@@ -145,9 +141,7 @@ ol.interaction.Select.prototype.select =
|
|||||||
var clone = featureMap[featureId];
|
var clone = featureMap[featureId];
|
||||||
if (clone) {
|
if (clone) {
|
||||||
// TODO: make toggle configurable
|
// TODO: make toggle configurable
|
||||||
if (goog.isDef(unselectedFeatures)) {
|
|
||||||
unselectedFeatures.push(feature);
|
unselectedFeatures.push(feature);
|
||||||
}
|
|
||||||
delete featureMap[featureId];
|
delete featureMap[featureId];
|
||||||
featuresToRemove.push(clone);
|
featuresToRemove.push(clone);
|
||||||
} else if (!(featureId in oldFeatureMap)) {
|
} else if (!(featureId in oldFeatureMap)) {
|
||||||
@@ -157,17 +151,17 @@ ol.interaction.Select.prototype.select =
|
|||||||
clone.setSymbolizers(feature.getSymbolizers());
|
clone.setSymbolizers(feature.getSymbolizers());
|
||||||
clone.renderIntent = ol.layer.VectorLayerRenderIntent.SELECTED;
|
clone.renderIntent = ol.layer.VectorLayerRenderIntent.SELECTED;
|
||||||
featureMap[featureId] = clone;
|
featureMap[featureId] = clone;
|
||||||
if (goog.isDef(selectedFeatures)) {
|
|
||||||
selectedFeatures.push(feature);
|
selectedFeatures.push(feature);
|
||||||
}
|
|
||||||
featuresToAdd.push(clone);
|
featuresToAdd.push(clone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (goog.isFunction(layer.setRenderIntent)) {
|
for (var j = selectedFeatures.length - 1; j >= 0; --j) {
|
||||||
layer.setRenderIntent(ol.layer.VectorLayerRenderIntent.HIDDEN,
|
selectedFeatures[j].setRenderIntent(
|
||||||
selectedFeatures);
|
ol.layer.VectorLayerRenderIntent.HIDDEN);
|
||||||
layer.setRenderIntent(ol.layer.VectorLayerRenderIntent.DEFAULT,
|
}
|
||||||
unselectedFeatures);
|
for (var j = unselectedFeatures.length - 1; j >= 0; --j) {
|
||||||
|
unselectedFeatures[j].setRenderIntent(
|
||||||
|
ol.layer.VectorLayerRenderIntent.DEFAULT);
|
||||||
}
|
}
|
||||||
selectionLayer.removeFeatures(featuresToRemove);
|
selectionLayer.removeFeatures(featuresToRemove);
|
||||||
selectionLayer.addFeatures(featuresToAdd);
|
selectionLayer.addFeatures(featuresToAdd);
|
||||||
|
|||||||
@@ -188,6 +188,8 @@ ol.layer.Vector.prototype.addFeatures = function(features) {
|
|||||||
}
|
}
|
||||||
goog.events.listen(feature, ol.FeatureEventType.CHANGE,
|
goog.events.listen(feature, ol.FeatureEventType.CHANGE,
|
||||||
this.handleFeatureChange_, false, this);
|
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,
|
this.dispatchEvent(new ol.layer.VectorEvent(ol.layer.VectorEventType.ADD,
|
||||||
features, [extent]));
|
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.
|
* 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.
|
* @param {boolean} temp Whether this layer is temporary.
|
||||||
*/
|
*/
|
||||||
@@ -511,6 +502,6 @@ goog.inherits(ol.layer.VectorEvent, goog.events.Event);
|
|||||||
ol.layer.VectorEventType = {
|
ol.layer.VectorEventType = {
|
||||||
ADD: 'featureadd',
|
ADD: 'featureadd',
|
||||||
CHANGE: 'featurechange',
|
CHANGE: 'featurechange',
|
||||||
REMOVE: 'featureremove',
|
INTENTCHANGE: 'featureintentchange',
|
||||||
INTENTCHANGE: 'intentchange'
|
REMOVE: 'featureremove'
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user