diff --git a/src/ol/layer/layer.js b/src/ol/layer/layer.js index b9e7cb6ab5..55850bafb5 100644 --- a/src/ol/layer/layer.js +++ b/src/ol/layer/layer.js @@ -57,15 +57,10 @@ ol.layer.Layer.prototype.getLayersArray = function(opt_array) { /** * @inheritDoc */ -ol.layer.Layer.prototype.getLayerStatesArray = function(opt_obj) { - var obj = (goog.isDef(opt_obj)) ? opt_obj : { - layers: [], - layerStates: [] - }; - goog.asserts.assert(obj.layers.length === obj.layerStates.length); - obj.layers.push(this); - obj.layerStates.push(this.getLayerState()); - return obj; +ol.layer.Layer.prototype.getLayerStatesArray = function(opt_states) { + var states = (goog.isDef(opt_states)) ? opt_states : []; + states.push(this.getLayerState()); + return states; }; diff --git a/src/ol/layer/layerbase.js b/src/ol/layer/layerbase.js index 160fd04b7d..a55b2b9aa4 100644 --- a/src/ol/layer/layerbase.js +++ b/src/ol/layer/layerbase.js @@ -150,14 +150,9 @@ ol.layer.Base.prototype.getLayersArray = goog.abstractMethod; /** - * @param {{ - * layers: Array., - * layerStates: Array.}=} opt_obj Object that store - * both the layers and the layerStates (to be modified in place). - * @return {{ - * layers: Array., - * layerStates: Array.}} Object that store both the - * layers and the layerStates. + * @param {Array.=} opt_states Optional list of layer + * states (to be modified in place). + * @return {Array.} List of layer states. */ ol.layer.Base.prototype.getLayerStatesArray = goog.abstractMethod; diff --git a/src/ol/layer/layergroup.js b/src/ol/layer/layergroup.js index 390cff2c0b..d814571de3 100644 --- a/src/ol/layer/layergroup.js +++ b/src/ol/layer/layergroup.js @@ -183,22 +183,19 @@ ol.layer.Group.prototype.getLayersArray = function(opt_array) { /** * @inheritDoc */ -ol.layer.Group.prototype.getLayerStatesArray = function(opt_obj) { - var obj = (goog.isDef(opt_obj)) ? opt_obj : { - layers: [], - layerStates: [] - }; - goog.asserts.assert(obj.layers.length === obj.layerStates.length); - var pos = obj.layers.length; +ol.layer.Group.prototype.getLayerStatesArray = function(opt_states) { + var states = (goog.isDef(opt_states)) ? opt_states : []; + + var pos = states.length; this.getLayers().forEach(function(layer) { - layer.getLayerStatesArray(obj); + layer.getLayerStatesArray(states); }); var ownLayerState = this.getLayerState(); var i, ii, layerState; - for (i = pos, ii = obj.layerStates.length; i < ii; i++) { - layerState = obj.layerStates[i]; + for (i = pos, ii = states.length; i < ii; i++) { + layerState = states[i]; layerState.brightness = goog.math.clamp( layerState.brightness + ownLayerState.brightness, -1, 1); layerState.contrast *= ownLayerState.contrast; @@ -212,7 +209,7 @@ ol.layer.Group.prototype.getLayerStatesArray = function(opt_obj) { layerState.minResolution, ownLayerState.minResolution); } - return obj; + return states; }; diff --git a/src/ol/map.js b/src/ol/map.js index 5463e5174a..9c5d171858 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -1207,14 +1207,10 @@ ol.Map.prototype.renderFrame_ = function(time) { if (goog.isDef(size) && hasArea(size) && goog.isDef(view2D) && view2D.isDef()) { var viewHints = view.getHints(); - var obj = this.getLayerGroup().getLayerStatesArray(); - var layersArray = obj.layers; - var layerStatesArray = obj.layerStates; + var layerStatesArray = this.getLayerGroup().getLayerStatesArray(); var layerStates = {}; - var layer; - for (i = 0, ii = layersArray.length; i < ii; ++i) { - layer = layersArray[i]; - layerStates[goog.getUid(layer)] = layerStatesArray[i]; + for (i = 0, ii = layerStatesArray.length; i < ii; ++i) { + layerStates[goog.getUid(layerStatesArray[i].layer)] = layerStatesArray[i]; } view2DState = view2D.getView2DState(); frameState = /** @type {oli.FrameState} */ ({ diff --git a/src/ol/renderer/maprenderer.js b/src/ol/renderer/maprenderer.js index 6632fc3328..f041562fe9 100644 --- a/src/ol/renderer/maprenderer.js +++ b/src/ol/renderer/maprenderer.js @@ -97,15 +97,12 @@ ol.renderer.Map.prototype.disposeInternal = function() { ol.renderer.Map.prototype.forEachFeatureAtPixel = function(coordinate, frameState, callback, thisArg, layerFilter, thisArg2) { - var obj = this.map_.getLayerGroup().getLayerStatesArray(); - var layers = obj.layers; - var layerStates = obj.layerStates; - goog.asserts.assert(layers.length == layerStates.length); - var numLayers = layers.length; + var layerStates = this.map_.getLayerGroup().getLayerStatesArray(); + var numLayers = layerStates.length; var i; for (i = numLayers - 1; i >= 0; --i) { var layerState = layerStates[i]; - var layer = layers[i]; + var layer = layerState.layer; if (layerState.visible && layerFilter.call(thisArg2, layer)) { var layerRenderer = this.getLayerRenderer(layer); var result = layerRenderer.forEachFeatureAtPixel( diff --git a/test/spec/ol/layer/layergroup.test.js b/test/spec/ol/layer/layergroup.test.js index 20650c8bb4..d28ca09773 100644 --- a/test/spec/ol/layer/layergroup.test.js +++ b/test/spec/ol/layer/layergroup.test.js @@ -297,19 +297,10 @@ describe('ol.layer.Group', function() { describe('#getLayerStatesArray', function() { - var layerGroup; - var layersArray; - var layerStatesArray; - var obj; - it('returns an empty array if no layer', function() { - layerGroup = new ol.layer.Group(); + var layerGroup = new ol.layer.Group(); - obj = layerGroup.getLayerStatesArray(); - layersArray = obj.layers; - layerStatesArray = obj.layerStates; - expect(layersArray).to.be.a(Array); - expect(layersArray.length).to.be(0); + var layerStatesArray = layerGroup.getLayerStatesArray(); expect(layerStatesArray).to.be.a(Array); expect(layerStatesArray.length).to.be(0); @@ -336,17 +327,11 @@ describe('ol.layer.Group', function() { }); it('does not transform layerStates by default', function() { - layerGroup = new ol.layer.Group({ + var layerGroup = new ol.layer.Group({ layers: [layer1, layer2] }); - obj = layerGroup.getLayerStatesArray(); - layersArray = obj.layers; - layerStatesArray = obj.layerStates; - expect(layersArray).to.be.a(Array); - expect(layersArray.length).to.be(2); - expect(layersArray[0]).to.be(layer1); - expect(layersArray[1]).to.be(layer2); + var layerStatesArray = layerGroup.getLayerStatesArray(); expect(layerStatesArray).to.be.a(Array); expect(layerStatesArray.length).to.be(2); expect(layerStatesArray[0]).to.eql(layer1.getLayerState()); @@ -364,7 +349,7 @@ describe('ol.layer.Group', function() { }); it('transforms layerStates correctly', function() { - layerGroup = new ol.layer.Group({ + var layerGroup = new ol.layer.Group({ layers: [layer1, layer2], brightness: 0.5, contrast: 10, @@ -376,9 +361,7 @@ describe('ol.layer.Group', function() { minResolution: 0.2 }); - obj = layerGroup.getLayerStatesArray(); - layersArray = obj.layers; - layerStatesArray = obj.layerStates; + var layerStatesArray = layerGroup.getLayerStatesArray(); // compare layer state to group state var groupState, layerState;