Skip to content

Commit

Permalink
Make unmanaged vector layers behave more like ol.FeatureOverlay
Browse files Browse the repository at this point in the history
* Skipped features need to be hit-detected on unmanaged layers.
* updateWhileAnimating and updateWhileInteracting are recommended to
  achieve the same instant visual feedback that ol.FeatureOverlay had.
  • Loading branch information
ahocevar committed Jun 18, 2015
1 parent f74e4c9 commit ddba6fa
Show file tree
Hide file tree
Showing 7 changed files with 18 additions and 7 deletions.
2 changes: 2 additions & 0 deletions changelog/upgrade-notes.md
Expand Up @@ -23,6 +23,8 @@ var featureOverlay = new ol.layer.Vector({
style: overlayStyle,
source: new ol.source.Vector({
features: collection,
updateWhileAnimating: true, // optional, for instant visual feedback
updateWhileInteracting: true, // optional, for instant visual feedback
useSpatialIndex: false // optional, might improve performance
});
});
Expand Down
4 changes: 3 additions & 1 deletion src/ol/interaction/modifyinteraction.js
Expand Up @@ -122,7 +122,9 @@ ol.interaction.Modify = function(options) {
wrapX: goog.isDef(options.wrapX) ? options.wrapX : false
}),
style: goog.isDef(options.style) ? options.style :
ol.interaction.Modify.getDefaultStyleFunction()
ol.interaction.Modify.getDefaultStyleFunction(),
updateWhileAnimating: true,
updateWhileInteracting: true
});

/**
Expand Down
4 changes: 3 additions & 1 deletion src/ol/interaction/selectinteraction.js
Expand Up @@ -178,7 +178,9 @@ ol.interaction.Select = function(opt_options) {
wrapX: options.wrapX
}),
style: goog.isDef(options.style) ? options.style :
ol.interaction.Select.getDefaultStyleFunction()
ol.interaction.Select.getDefaultStyleFunction(),
updateWhileAnimating: true,
updateWhileInteracting: true
});

var features = this.featureOverlay_.getSource().getFeaturesCollection();
Expand Down
5 changes: 3 additions & 2 deletions src/ol/renderer/canvas/canvasvectorlayerrenderer.js
Expand Up @@ -160,10 +160,11 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtCoordinate =
var resolution = frameState.viewState.resolution;
var rotation = frameState.viewState.rotation;
var layer = this.getLayer();
var layerState = frameState.layerStates[goog.getUid(layer)];
/** @type {Object.<string, boolean>} */
var features = {};
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate,
resolution, rotation, frameState.skippedFeatureUids,
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate, resolution,
rotation, layerState.managed ? frameState.skippedFeatureUids : {},
/**
* @param {ol.Feature} feature Feature.
* @return {?} Callback result.
Expand Down
5 changes: 3 additions & 2 deletions src/ol/renderer/dom/domvectorlayerrenderer.js
Expand Up @@ -184,10 +184,11 @@ ol.renderer.dom.VectorLayer.prototype.forEachFeatureAtCoordinate =
var resolution = frameState.viewState.resolution;
var rotation = frameState.viewState.rotation;
var layer = this.getLayer();
var layerState = frameState.layerStates[goog.getUid(layer)];
/** @type {Object.<string, boolean>} */
var features = {};
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate,
resolution, rotation, frameState.skippedFeatureUids,
return this.replayGroup_.forEachFeatureAtCoordinate(coordinate, resolution,
rotation, layerState.managed ? frameState.skippedFeatureUids : {},
/**
* @param {ol.Feature} feature Feature.
* @return {?} Callback result.
Expand Down
3 changes: 2 additions & 1 deletion src/ol/renderer/webgl/webglvectorlayerrenderer.js
Expand Up @@ -122,7 +122,8 @@ ol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtCoordinate =
context, viewState.center, viewState.resolution, viewState.rotation,
frameState.size, frameState.pixelRatio,
layerState.opacity, layerState.brightness, layerState.contrast,
layerState.hue, layerState.saturation, frameState.skippedFeatureUids,
layerState.hue, layerState.saturation,
layerState.managed ? frameState.skippedFeatureUids : {},
/**
* @param {ol.Feature} feature Feature.
* @return {?} Callback result.
Expand Down
Expand Up @@ -76,12 +76,14 @@ describe('ol.renderer.canvas.VectorLayer', function() {
var spy = sinon.spy();
var coordinate = [0, 0];
var frameState = {
layerStates: {},
skippedFeatureUids: {},
viewState: {
resolution: 1,
rotation: 0
}
};
frameState.layerStates[goog.getUid(layer)] = {};
renderer.forEachFeatureAtCoordinate(
coordinate, frameState, spy, undefined);
expect(spy.callCount).to.be(1);
Expand Down

0 comments on commit ddba6fa

Please sign in to comment.