From 22da054774d3037d31642462279f1c15830c02b7 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Tue, 12 Nov 2013 22:20:31 -0700 Subject: [PATCH] Determine the callback count while iterating through all layers Previously, if a layer didn't have a `getFeature*ForPixel` type method, the loop count would be decremented. This means that all layers would not be considered. Instead, the callback count should be incremented before requests are made and decremented in the callback. --- examples/modify-features.js | 4 +--- examples/select-features.js | 4 +--- src/ol/renderer/maprenderer.js | 16 ++++++++-------- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/examples/modify-features.js b/examples/modify-features.js index bec884a647..18550d8b68 100644 --- a/examples/modify-features.js +++ b/examples/modify-features.js @@ -92,9 +92,7 @@ var vector = new ol.layer.Vector({ }) }); -var select = new ol.interaction.Select({ - layers: [vector] -}); +var select = new ol.interaction.Select(); var modify = new ol.interaction.Modify(); diff --git a/examples/select-features.js b/examples/select-features.js index 5e487ab494..6eb227f101 100644 --- a/examples/select-features.js +++ b/examples/select-features.js @@ -47,9 +47,7 @@ var vector = new ol.layer.Vector({ }) }); -var select = new ol.interaction.Select({ - layers: [vector] -}); +var select = new ol.interaction.Select(); var map = new ol.Map({ interactions: ol.interaction.defaults().extend([select]), diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 453f12a23c..a0463fc944 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -113,10 +113,11 @@ ol.renderer.Map.prototype.getFeatureInfoForPixel = function(pixel, layers, success, opt_error) { var numLayers = layers.length; var featureInfo = new Array(numLayers); + var callbackCount = 0; var callback = function(layerFeatureInfo, layer) { featureInfo[goog.array.indexOf(layers, layer)] = layerFeatureInfo; - --numLayers; - if (!numLayers) { + --callbackCount; + if (callbackCount <= 0) { success(featureInfo); } }; @@ -126,9 +127,8 @@ ol.renderer.Map.prototype.getFeatureInfoForPixel = layer = layers[i]; layerRenderer = this.getLayerRenderer(layer); if (goog.isFunction(layerRenderer.getFeatureInfoForPixel)) { + ++callbackCount; layerRenderer.getFeatureInfoForPixel(pixel, callback, opt_error); - } else { - --numLayers; } } }; @@ -149,10 +149,11 @@ ol.renderer.Map.prototype.getFeaturesForPixel = function(pixel, layers, success, opt_error) { var numLayers = layers.length; var features = new Array(numLayers); + var callbackCount = 0; var callback = function(layerFeatures, layer) { features[goog.array.indexOf(layers, layer)] = layerFeatures; - --numLayers; - if (!numLayers) { + --callbackCount; + if (callbackCount <= 0) { success(features); } }; @@ -162,9 +163,8 @@ ol.renderer.Map.prototype.getFeaturesForPixel = layer = layers[i]; layerRenderer = this.getLayerRenderer(layer); if (goog.isFunction(layerRenderer.getFeaturesForPixel)) { + ++callbackCount; layerRenderer.getFeaturesForPixel(pixel, callback, opt_error); - } else { - --numLayers; } } };