diff --git a/src/ol/framestate.js b/src/ol/framestate.js index 9e45ce99b6..a4c97039a0 100644 --- a/src/ol/framestate.js +++ b/src/ol/framestate.js @@ -6,6 +6,7 @@ goog.provide('ol.PostRenderFunction'); goog.provide('ol.PreRenderFunction'); goog.require('goog.vec.Mat4'); +goog.require('ol.Attribution'); goog.require('ol.Color'); goog.require('ol.Extent'); goog.require('ol.Size'); @@ -18,6 +19,7 @@ goog.require('ol.layer.LayerState'); /** * @typedef {{animate: boolean, + * attributions: Object., * backgroundColor: ol.Color, * coordinateToPixelMatrix: goog.vec.Mat4.Number, * extent: (null|ol.Extent), diff --git a/src/ol/image.js b/src/ol/image.js index 9f7cbe0c47..41d5e6fc88 100644 --- a/src/ol/image.js +++ b/src/ol/image.js @@ -5,6 +5,7 @@ goog.require('goog.array'); goog.require('goog.events'); goog.require('goog.events.EventTarget'); goog.require('goog.events.EventType'); +goog.require('ol.Attribution'); goog.require('ol.Extent'); @@ -27,8 +28,15 @@ ol.ImageState = { * @param {number} resolution Resolution. * @param {string} src Image source URI. * @param {?string} crossOrigin Cross origin. + * @param {Array.} attributions Attributions. */ -ol.Image = function(extent, resolution, src, crossOrigin) { +ol.Image = function(extent, resolution, src, crossOrigin, attributions) { + + /** + * @private + * @type {Array.} + */ + this.attributions_ = attributions; /** * @private @@ -86,6 +94,14 @@ ol.Image.prototype.dispatchChangeEvent = function() { }; +/** + * @return {Array.} Attributions. + */ +ol.Image.prototype.getAttributions = function() { + return this.attributions_; +}; + + /** * @return {ol.Extent} Extent. */ diff --git a/src/ol/map.js b/src/ol/map.js index 9d391c90d5..4034fc9e5a 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -664,6 +664,7 @@ ol.Map.prototype.renderFrame_ = function(time) { var view2DState = view2D.getView2DState(); frameState = { animate: false, + attributions: {}, backgroundColor: goog.isDef(backgroundColor) ? backgroundColor : new ol.Color(255, 255, 255, 1), coordinateToPixelMatrix: this.coordinateToPixelMatrix_, diff --git a/src/ol/renderer/canvas/canvasimagelayerrenderer.js b/src/ol/renderer/canvas/canvasimagelayerrenderer.js index 273f22d49f..61eb2b898d 100644 --- a/src/ol/renderer/canvas/canvasimagelayerrenderer.js +++ b/src/ol/renderer/canvas/canvasimagelayerrenderer.js @@ -94,6 +94,7 @@ ol.renderer.canvas.ImageLayer.prototype.renderFrame = if (!goog.isNull(this.image_)) { image = this.image_; + var imageExtent = image.getExtent(); var imageResolution = image.getResolution(); var transform = this.transform_; @@ -111,5 +112,7 @@ ol.renderer.canvas.ImageLayer.prototype.renderFrame = (imageExtent.minX - viewCenter.x) / imageResolution, (viewCenter.y - imageExtent.maxY) / imageResolution, 0); + + this.updateAttributions(frameState.attributions, image.getAttributions()); } }; diff --git a/src/ol/renderer/dom/domimagelayerrenderer.js b/src/ol/renderer/dom/domimagelayerrenderer.js index b3f5f9f224..7190d8c268 100644 --- a/src/ol/renderer/dom/domimagelayerrenderer.js +++ b/src/ol/renderer/dom/domimagelayerrenderer.js @@ -106,6 +106,8 @@ ol.renderer.dom.ImageLayer.prototype.renderFrame = this.image_ = image; } this.setTransform(transform); + + this.updateAttributions(frameState.attributions, image.getAttributions()); } }; diff --git a/src/ol/renderer/layerrenderer.js b/src/ol/renderer/layerrenderer.js index bfe98600c4..3379e0da5e 100644 --- a/src/ol/renderer/layerrenderer.js +++ b/src/ol/renderer/layerrenderer.js @@ -2,6 +2,7 @@ goog.provide('ol.renderer.Layer'); goog.require('goog.events'); goog.require('goog.events.EventType'); +goog.require('ol.Attribution'); goog.require('ol.FrameState'); goog.require('ol.Image'); goog.require('ol.ImageState'); @@ -201,6 +202,23 @@ ol.renderer.Layer.prototype.scheduleExpireCache = }; +/** + * @protected + * @param {Object.} attributionsSet Attributions + * set (target). + * @param {Array.} attributions Attributions (source). + */ +ol.renderer.Layer.prototype.updateAttributions = + function(attributionsSet, attributions) { + var i; + var attribution; + for (i = 0; i < attributions.length; ++i) { + attribution = attributions[i]; + attributionsSet[goog.getUid(attribution).toString()] = attribution; + } +}; + + /** * @protected * @param {Object.>} usedTiles Used tiles. diff --git a/src/ol/renderer/webgl/webglimagelayerrenderer.js b/src/ol/renderer/webgl/webglimagelayerrenderer.js index 6449a7c178..5d0341f3c1 100644 --- a/src/ol/renderer/webgl/webglimagelayerrenderer.js +++ b/src/ol/renderer/webgl/webglimagelayerrenderer.js @@ -198,6 +198,8 @@ ol.renderer.webgl.ImageLayer.prototype.renderFrame = this.image_ = image; this.texture_ = texture; + + this.updateAttributions(frameState.attributions, image.getAttributions()); } }; diff --git a/src/ol/source/imagesource.js b/src/ol/source/imagesource.js index caad04b5e9..879a007d5c 100644 --- a/src/ol/source/imagesource.js +++ b/src/ol/source/imagesource.js @@ -84,7 +84,8 @@ ol.source.ImageSource.prototype.createImage = var imageUrl = this.imageUrlFunction(extent, size); if (goog.isDef(imageUrl)) { image = new ol.Image( - extent, resolution, imageUrl, this.crossOrigin_); + extent, resolution, imageUrl, this.crossOrigin_, + this.getAttributions()); } return image; };