Call setRenderIntent on the feature, not the layer

This commit is contained in:
ahocevar
2013-11-08 17:35:59 +01:00
parent d2281c4868
commit 7cf636147b
3 changed files with 46 additions and 46 deletions

View File

@@ -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'
}; };

View File

@@ -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);

View File

@@ -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'
}; };