diff --git a/src/ol/base/coordinateformat.js b/src/ol/base/coordinateformat.js index fa8ef51423..a654b757a8 100644 --- a/src/ol/base/coordinateformat.js +++ b/src/ol/base/coordinateformat.js @@ -11,22 +11,6 @@ goog.require('ol.Coordinate'); ol.CoordinateFormatType; -/** - * @private - * @param {number} degrees Degrees. - * @param {string} hemispheres Hemispheres. - * @return {string} String. - */ -ol.CoordinateFormat.degreesToHDMS_ = function(degrees, hemispheres) { - var normalizedDegrees = goog.math.modulo(degrees + 180, 360) - 180; - var x = Math.abs(Math.round(3600 * normalizedDegrees)); - return Math.floor(x / 3600) + '\u00b0 ' + - Math.floor((x / 60) % 60) + '\u2032 ' + - Math.floor(x % 60) + '\u2033 ' + - hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0); -}; - - /** * @param {number} precision Precision. * @return {ol.CoordinateFormatType} Coordinate format. @@ -43,6 +27,22 @@ ol.CoordinateFormat.createXY = function(precision) { }; +/** + * @private + * @param {number} degrees Degrees. + * @param {string} hemispheres Hemispheres. + * @return {string} String. + */ +ol.CoordinateFormat.degreesToHDMS_ = function(degrees, hemispheres) { + var normalizedDegrees = goog.math.modulo(degrees + 180, 360) - 180; + var x = Math.abs(Math.round(3600 * normalizedDegrees)); + return Math.floor(x / 3600) + '\u00b0 ' + + Math.floor((x / 60) % 60) + '\u2032 ' + + Math.floor(x % 60) + '\u2033 ' + + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0); +}; + + /** * @param {ol.Coordinate|undefined} coordinate Coordinate. * @return {string} Coordinate format. diff --git a/src/ol/base/layerrenderer.js b/src/ol/base/layerrenderer.js index cc4074761a..cfbcfff4b6 100644 --- a/src/ol/base/layerrenderer.js +++ b/src/ol/base/layerrenderer.js @@ -69,14 +69,6 @@ ol.LayerRenderer.prototype.getLayer = function() { }; -/** - * @return {ol.MapRenderer} Map renderer. - */ -ol.LayerRenderer.prototype.getMapRenderer = function() { - return this.mapRenderer_; -}; - - /** * @return {ol.Map} Map. */ @@ -85,6 +77,14 @@ ol.LayerRenderer.prototype.getMap = function() { }; +/** + * @return {ol.MapRenderer} Map renderer. + */ +ol.LayerRenderer.prototype.getMapRenderer = function() { + return this.mapRenderer_; +}; + + /** * @protected */ @@ -106,13 +106,13 @@ ol.LayerRenderer.prototype.handleLayerHueChange = goog.nullFunction; /** * @protected */ -ol.LayerRenderer.prototype.handleLayerOpacityChange = goog.nullFunction; +ol.LayerRenderer.prototype.handleLayerLoad = goog.nullFunction; /** * @protected */ -ol.LayerRenderer.prototype.handleLayerLoad = goog.nullFunction; +ol.LayerRenderer.prototype.handleLayerOpacityChange = goog.nullFunction; /** diff --git a/src/ol/base/maprenderer.js b/src/ol/base/maprenderer.js index e9db1b7a3e..06546c5a61 100644 --- a/src/ol/base/maprenderer.js +++ b/src/ol/base/maprenderer.js @@ -96,6 +96,30 @@ ol.MapRenderer = function(target, map) { goog.inherits(ol.MapRenderer, goog.Disposable); +/** + * @param {ol.Layer} layer Layer. + * @protected + */ +ol.MapRenderer.prototype.addLayer = function(layer) { + var layerRenderer = this.createLayerRenderer(layer); + this.setLayerRenderer(layer, layerRenderer); +}; + + +/** + * @return {boolean} Can rotate. + */ +ol.MapRenderer.prototype.canRotate = goog.functions.FALSE; + + +/** + * @param {ol.Layer} layer Layer. + * @protected + * @return {ol.LayerRenderer} layerRenderer Layer renderer. + */ +ol.MapRenderer.prototype.createLayerRenderer = goog.abstractMethod; + + /** * @inheritDoc */ @@ -128,10 +152,14 @@ ol.MapRenderer.prototype.forEachReadyVisibleLayer = function(f, opt_obj) { /** - * @return {ol.Map} Map. + * @param {ol.Pixel} pixel Pixel. + * @return {ol.Coordinate} Coordinate. */ -ol.MapRenderer.prototype.getMap = function() { - return this.map; +ol.MapRenderer.prototype.getCoordinateFromPixel = function(pixel) { + this.updateMatrices_(); + var vec3 = [pixel.x, pixel.y, 0]; + goog.vec.Mat4.multVec3(this.pixelToCoordinateMatrix_, vec3, vec3); + return new ol.Coordinate(vec3[0], vec3[1]); }; @@ -149,21 +177,23 @@ ol.MapRenderer.prototype.getLayerRenderer = function(layer) { /** - * @param {ol.Layer} layer Layer. - * @param {ol.LayerRenderer} layerRenderer Layer renderer. - * @protected + * @return {ol.Map} Map. */ -ol.MapRenderer.prototype.setLayerRenderer = function(layer, layerRenderer) { - var key = goog.getUid(layer); - goog.asserts.assert(!(key in this.layerRenderers)); - this.layerRenderers[key] = layerRenderer; +ol.MapRenderer.prototype.getMap = function() { + return this.map; }; /** - * @return {boolean} Can rotate. + * @param {ol.Coordinate} coordinate Coordinate. + * @return {ol.Pixel} Pixel. */ -ol.MapRenderer.prototype.canRotate = goog.functions.FALSE; +ol.MapRenderer.prototype.getPixelFromCoordinate = function(coordinate) { + this.updateMatrices_(); + var vec3 = [coordinate.x, coordinate.y, 0]; + goog.vec.Mat4.multVec3(this.coordinateToPixelMatrix_, vec3, vec3); + return new ol.Pixel(vec3[0], vec3[1]); +}; /** @@ -179,6 +209,16 @@ ol.MapRenderer.prototype.handleCenterChanged = function() { }; +/** + * @param {ol.CollectionEvent} collectionEvent Collection event. + * @protected + */ +ol.MapRenderer.prototype.handleLayersAdd = function(collectionEvent) { + var layer = /** @type {ol.Layer} */ collectionEvent.elem; + this.addLayer(layer); +}; + + /** * @protected */ @@ -205,34 +245,6 @@ ol.MapRenderer.prototype.handleLayersChanged = function() { }; -/** - * @param {ol.CollectionEvent} collectionEvent Collection event. - * @protected - */ -ol.MapRenderer.prototype.handleLayersAdd = function(collectionEvent) { - var layer = /** @type {ol.Layer} */ collectionEvent.elem; - this.addLayer(layer); -}; - - -/** - * @param {ol.Layer} layer Layer. - * @protected - */ -ol.MapRenderer.prototype.addLayer = function(layer) { - var layerRenderer = this.createLayerRenderer(layer); - this.setLayerRenderer(layer, layerRenderer); -}; - - -/** - * @param {ol.Layer} layer Layer. - * @protected - * @return {ol.LayerRenderer} layerRenderer Layer renderer. - */ -ol.MapRenderer.prototype.createLayerRenderer = goog.abstractMethod; - - /** * @param {ol.CollectionEvent} collectionEvent Collection event. * @protected @@ -243,6 +255,30 @@ ol.MapRenderer.prototype.handleLayersRemove = function(collectionEvent) { }; +/** + * @protected + */ +ol.MapRenderer.prototype.handleResolutionChanged = function() { + this.matricesDirty_ = true; +}; + + +/** + * @protected + */ +ol.MapRenderer.prototype.handleRotationChanged = function() { + this.matricesDirty_ = true; +}; + + +/** + * @protected + */ +ol.MapRenderer.prototype.handleSizeChanged = function() { + this.matricesDirty_ = true; +}; + + /** * @param {ol.Layer} layer Layer. * @protected @@ -269,30 +305,6 @@ ol.MapRenderer.prototype.removeLayerRenderer = function(layer) { }; -/** - * @protected - */ -ol.MapRenderer.prototype.handleResolutionChanged = function() { - this.matricesDirty_ = true; -}; - - -/** - * @protected - */ -ol.MapRenderer.prototype.handleRotationChanged = function() { - this.matricesDirty_ = true; -}; - - -/** - * @protected - */ -ol.MapRenderer.prototype.handleSizeChanged = function() { - this.matricesDirty_ = true; -}; - - /** * @return {boolean} Animating. */ @@ -307,6 +319,18 @@ ol.MapRenderer.prototype.render = function() { }; +/** + * @param {ol.Layer} layer Layer. + * @param {ol.LayerRenderer} layerRenderer Layer renderer. + * @protected + */ +ol.MapRenderer.prototype.setLayerRenderer = function(layer, layerRenderer) { + var key = goog.getUid(layer); + goog.asserts.assert(!(key in this.layerRenderers)); + this.layerRenderers[key] = layerRenderer; +}; + + /** * @private */ @@ -350,27 +374,3 @@ ol.MapRenderer.prototype.updateMatrices_ = function() { } }; - - -/** - * @param {ol.Pixel} pixel Pixel. - * @return {ol.Coordinate} Coordinate. - */ -ol.MapRenderer.prototype.getCoordinateFromPixel = function(pixel) { - this.updateMatrices_(); - var vec3 = [pixel.x, pixel.y, 0]; - goog.vec.Mat4.multVec3(this.pixelToCoordinateMatrix_, vec3, vec3); - return new ol.Coordinate(vec3[0], vec3[1]); -}; - - -/** - * @param {ol.Coordinate} coordinate Coordinate. - * @return {ol.Pixel} Pixel. - */ -ol.MapRenderer.prototype.getPixelFromCoordinate = function(coordinate) { - this.updateMatrices_(); - var vec3 = [coordinate.x, coordinate.y, 0]; - goog.vec.Mat4.multVec3(this.coordinateToPixelMatrix_, vec3, vec3); - return new ol.Pixel(vec3[0], vec3[1]); -}; diff --git a/src/ol/base/object.js b/src/ol/base/object.js index e3555d3332..2d67333247 100644 --- a/src/ol/base/object.js +++ b/src/ol/base/object.js @@ -37,6 +37,27 @@ ol.Object = function(opt_values) { goog.inherits(ol.Object, goog.events.EventTarget); +/** + * @private + * @type {Object.} + */ +ol.Object.changedEventTypeCache_ = {}; + + +/** + * @private + * @type {Object.} + */ +ol.Object.getterNameCache_ = {}; + + +/** + * @private + * @type {Object.} + */ +ol.Object.setterNameCache_ = {}; + + /** * @param {string} str String. * @return {string} Capitalized string. @@ -62,10 +83,13 @@ ol.Object.create = function(arg) { /** - * @private - * @type {Object.} + * @param {ol.Object} obj Object. + * @return {Object.} Accessors. */ -ol.Object.changedEventTypeCache_ = {}; +ol.Object.getAccessors = function(obj) { + return obj[ol.ObjectProperty.ACCESSORS] || + (obj[ol.ObjectProperty.ACCESSORS] = {}); +}; /** @@ -78,13 +102,6 @@ ol.Object.getChangedEventType = function(key) { }; -/** - * @private - * @type {Object.} - */ -ol.Object.getterNameCache_ = {}; - - /** * @param {string} key String. * @return {string} Getter name. @@ -96,10 +113,13 @@ ol.Object.getGetterName = function(key) { /** - * @private - * @type {Object.} + * @param {ol.Object} obj Object. + * @return {Object.} Listeners. */ -ol.Object.setterNameCache_ = {}; +ol.Object.getListeners = function(obj) { + return obj[ol.ObjectProperty.BINDINGS] || + (obj[ol.ObjectProperty.BINDINGS] = {}); +}; /** @@ -112,26 +132,6 @@ ol.Object.getSetterName = function(key) { }; -/** - * @param {ol.Object} obj Object. - * @return {Object.} Accessors. - */ -ol.Object.getAccessors = function(obj) { - return obj[ol.ObjectProperty.ACCESSORS] || - (obj[ol.ObjectProperty.ACCESSORS] = {}); -}; - - -/** - * @param {ol.Object} obj Object. - * @return {Object.} Listeners. - */ -ol.Object.getListeners = function(obj) { - return obj[ol.ObjectProperty.BINDINGS] || - (obj[ol.ObjectProperty.BINDINGS] = {}); -}; - - /** * @param {string} key Key. * @param {ol.Object} target Target. diff --git a/src/ol/control/attribution.js b/src/ol/control/attribution.js index 8157301ff1..5cc4bf28c3 100644 --- a/src/ol/control/attribution.js +++ b/src/ol/control/attribution.js @@ -78,6 +78,28 @@ ol.control.Attribution = function(map) { goog.inherits(ol.control.Attribution, ol.Control); +/** + * @param {ol.Layer} layer Layer. + * @protected + */ +ol.control.Attribution.prototype.addLayer = function(layer) { + + var layerKey = goog.getUid(layer); + + this.layerVisibleChangeListenerKeys_[layerKey] = goog.events.listen( + layer, ol.Object.getChangedEventType(ol.LayerProperty.VISIBLE), + this.handleLayerVisibleChanged, false, this); + + if (layer.getStore().isReady()) { + this.createAttributionElementsForLayer_(layer); + } else { + goog.events.listenOnce(layer, goog.events.EventType.LOAD, + this.handleLayerLoad, false, this); + } + +}; + + /** * @param {ol.Layer} layer Layer. * @private @@ -140,23 +162,83 @@ ol.control.Attribution.prototype.getElement = function() { /** * @param {ol.Layer} layer Layer. - * @protected + * @param {ol.Extent} mapExtent Map extent. + * @param {number} mapResolution Map resolution. + * @param {ol.Projection} mapProjection Map projection. + * @return {Object.} Attribution visibilities. + * @private */ -ol.control.Attribution.prototype.addLayer = function(layer) { +ol.control.Attribution.prototype.getLayerAttributionVisiblities_ = + function(layer, mapExtent, mapResolution, mapProjection) { - var layerKey = goog.getUid(layer); + var store = layer.getStore(); + var attributions = store.getAttributions(); - this.layerVisibleChangeListenerKeys_[layerKey] = goog.events.listen( - layer, ol.Object.getChangedEventType(ol.LayerProperty.VISIBLE), - this.handleLayerVisibleChanged, false, this); - - if (layer.getStore().isReady()) { - this.createAttributionElementsForLayer_(layer); - } else { - goog.events.listenOnce(layer, goog.events.EventType.LOAD, - this.handleLayerLoad, false, this); + if (goog.isNull(attributions)) { + return null; } + var mapZ; + if (store instanceof ol.TileStore) { + var tileStore = /** @type {ol.TileStore} */ store; + var tileGrid = tileStore.getTileGrid(); + mapZ = tileGrid.getZForResolution(mapResolution); + } + + var attributionVisibilities = {}; + goog.array.forEach(attributions, function(attribution) { + + var attributionKey = goog.getUid(attribution); + + var attributionVisible = true; + + var coverageAreas; + if (attributionKey in this.coverageAreass_) { + coverageAreas = this.coverageAreass_[attributionKey]; + } else { + var attributionProjection = attribution.getProjection(); + coverageAreas = attribution.getCoverageAreas(); + if (!goog.isNull(coverageAreas) && + !ol.Projection.equivalent(attributionProjection, mapProjection)) { + var transformFn = ol.Projection.getTransform( + attributionProjection, mapProjection); + if (transformFn !== ol.Projection.cloneTransform) { + coverageAreas = goog.array.map(coverageAreas, function(coverageArea) { + return coverageArea.transform(transformFn); + }); + } + } + this.coverageAreass_[attributionKey] = coverageAreas; + } + + if (!goog.isNull(coverageAreas)) { + if (store instanceof ol.TileStore) { + attributionVisible = goog.array.some( + coverageAreas, + /** + * @param {ol.TileCoverageArea} tileCoverageArea Tile coverage area. + */ + function(tileCoverageArea) { + goog.asserts.assert( + tileCoverageArea instanceof ol.TileCoverageArea); + return tileCoverageArea.intersectsExtentAndZ(mapExtent, mapZ); + }); + } else { + attributionVisible = goog.array.some( + coverageAreas, + function(coverageArea) { + return coverageArea.intersectsExtentAndResolution( + mapExtent, mapResolution); + }); + } + } + + attributionVisibilities[attributionKey] = attributionVisible; + + }, this); + + return attributionVisibilities; + }; @@ -170,29 +252,7 @@ ol.control.Attribution.prototype.handleLayerLoad = function(event) { /** - * @param {ol.Layer} layer Layer. - * @protected - */ -ol.control.Attribution.prototype.removeLayer = function(layer) { - - var layerKey = goog.getUid(layer); - - goog.events.unlistenByKey(this.layerVisibleChangeListenerKeys_[layerKey]); - delete this.layerVisibleChangeListenerKeys_[layerKey]; - - goog.array.forEach(layer.getStore().getAttributions(), function(attribution) { - var attributionKey = goog.getUid(attribution); - delete this.coverageAreass_[attributionKey]; - var attributionElement = this.attributionElements_[attributionKey]; - goog.dom.removeNode(attributionElement); - delete this.attributionElements_[attributionKey]; - }, this); - -}; - - -/** - * @param {goog.events.Event} event Eveny. + * @param {goog.events.Event} event Event. * @protected */ ol.control.Attribution.prototype.handleLayerVisibleChanged = function(event) { @@ -281,83 +341,23 @@ ol.control.Attribution.prototype.handleMapLayersChanged = function() { /** * @param {ol.Layer} layer Layer. - * @param {ol.Extent} mapExtent Map extent. - * @param {number} mapResolution Map resolution. - * @param {ol.Projection} mapProjection Map projection. - * @return {Object.} Attribution visibilities. - * @private + * @protected */ -ol.control.Attribution.prototype.getLayerAttributionVisiblities_ = - function(layer, mapExtent, mapResolution, mapProjection) { +ol.control.Attribution.prototype.removeLayer = function(layer) { - var store = layer.getStore(); - var attributions = store.getAttributions(); + var layerKey = goog.getUid(layer); - if (goog.isNull(attributions)) { - return null; - } - - var mapZ; - if (store instanceof ol.TileStore) { - var tileStore = /** @type {ol.TileStore} */ store; - var tileGrid = tileStore.getTileGrid(); - mapZ = tileGrid.getZForResolution(mapResolution); - } - - var attributionVisibilities = {}; - goog.array.forEach(attributions, function(attribution) { + goog.events.unlistenByKey(this.layerVisibleChangeListenerKeys_[layerKey]); + delete this.layerVisibleChangeListenerKeys_[layerKey]; + goog.array.forEach(layer.getStore().getAttributions(), function(attribution) { var attributionKey = goog.getUid(attribution); - - var attributionVisible = true; - - var coverageAreas; - if (attributionKey in this.coverageAreass_) { - coverageAreas = this.coverageAreass_[attributionKey]; - } else { - var attributionProjection = attribution.getProjection(); - coverageAreas = attribution.getCoverageAreas(); - if (!goog.isNull(coverageAreas) && - !ol.Projection.equivalent(attributionProjection, mapProjection)) { - var transformFn = ol.Projection.getTransform( - attributionProjection, mapProjection); - if (transformFn !== ol.Projection.cloneTransform) { - coverageAreas = goog.array.map(coverageAreas, function(coverageArea) { - return coverageArea.transform(transformFn); - }); - } - } - this.coverageAreass_[attributionKey] = coverageAreas; - } - - if (!goog.isNull(coverageAreas)) { - if (store instanceof ol.TileStore) { - attributionVisible = goog.array.some( - coverageAreas, - /** - * @param {ol.TileCoverageArea} tileCoverageArea Tile coverage area. - */ - function(tileCoverageArea) { - goog.asserts.assert( - tileCoverageArea instanceof ol.TileCoverageArea); - return tileCoverageArea.intersectsExtentAndZ(mapExtent, mapZ); - }); - } else { - attributionVisible = goog.array.some( - coverageAreas, - function(coverageArea) { - return coverageArea.intersectsExtentAndResolution( - mapExtent, mapResolution); - }); - } - } - - attributionVisibilities[attributionKey] = attributionVisible; - + delete this.coverageAreass_[attributionKey]; + var attributionElement = this.attributionElements_[attributionKey]; + goog.dom.removeNode(attributionElement); + delete this.attributionElements_[attributionKey]; }, this); - return attributionVisibilities; - }; diff --git a/src/ol/control/mouseposition.js b/src/ol/control/mouseposition.js index 52f7ca220d..c8ed67088e 100644 --- a/src/ol/control/mouseposition.js +++ b/src/ol/control/mouseposition.js @@ -96,15 +96,6 @@ ol.control.MousePosition.prototype.handleMapProjectionChanged = function() { }; -/** - * @param {goog.events.BrowserEvent} browserEvent Browser event. - * @protected - */ -ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) { - this.divElement_.innerHTML = this.undefinedHTML_; -}; - - /** * @param {goog.events.BrowserEvent} browserEvent Browser event. * @protected @@ -126,3 +117,12 @@ ol.control.MousePosition.prototype.handleMouseMove = function(browserEvent) { } this.divElement_.innerHTML = html; }; + + +/** + * @param {goog.events.BrowserEvent} browserEvent Browser event. + * @protected + */ +ol.control.MousePosition.prototype.handleMouseOut = function(browserEvent) { + this.divElement_.innerHTML = this.undefinedHTML_; +}; diff --git a/src/ol/dom/layerrenderer.js b/src/ol/dom/layerrenderer.js index 72352f7e30..7667c13b30 100644 --- a/src/ol/dom/layerrenderer.js +++ b/src/ol/dom/layerrenderer.js @@ -45,16 +45,6 @@ ol.dom.LayerRenderer.prototype.getMapRenderer = function() { }; -/** - * Set the location of the top left corner of the target. - * - * @param {ol.Coordinate} origin Origin. - */ -ol.dom.LayerRenderer.prototype.setOrigin = function(origin) { - this.origin = origin; -}; - - /** * @inheritDoc */ @@ -74,3 +64,13 @@ ol.dom.LayerRenderer.prototype.handleLayerVisibleChange = function() { /** */ ol.dom.LayerRenderer.prototype.render = goog.abstractMethod; + + +/** + * Set the location of the top left corner of the target. + * + * @param {ol.Coordinate} origin Origin. + */ +ol.dom.LayerRenderer.prototype.setOrigin = function(origin) { + this.origin = origin; +}; diff --git a/src/ol/dom/maprenderer.js b/src/ol/dom/maprenderer.js index cd42503188..2014f10901 100644 --- a/src/ol/dom/maprenderer.js +++ b/src/ol/dom/maprenderer.js @@ -66,6 +66,59 @@ ol.dom.MapRenderer = function(target, map) { goog.inherits(ol.dom.MapRenderer, ol.MapRenderer); +/** + * @inheritDoc + */ +ol.dom.MapRenderer.prototype.createLayerRenderer = function(layer) { + + if (layer instanceof ol.TileLayer) { + + var layerPane = goog.dom.createElement(goog.dom.TagName.DIV); + layerPane.className = 'ol-layer'; + layerPane.style.position = 'absolute'; + goog.dom.appendChild(this.layersPane_, layerPane); + + var layerRenderer = new ol.dom.TileLayerRenderer(this, layer, layerPane); + + this.layerPanes_[goog.getUid(layerRenderer)] = layerPane; + + return layerRenderer; + + } else { + goog.asserts.assert(false); + return null; + } +}; + + +/** + * @inheritDoc + */ +ol.dom.MapRenderer.prototype.handleCenterChanged = function() { + goog.base(this, 'handleCenterChanged'); + // FIXME: shiftLayersPane_ and resetLayersPane_ should be called + // elsewhere as we may be frozen here + if (goog.isDef(this.renderedCenter_)) { + this.shiftLayersPane_(); + } else { + this.resetLayersPane_(); + } + this.render(); +}; + + +/** + * @inheritDoc + */ +ol.dom.MapRenderer.prototype.handleResolutionChanged = function() { + goog.base(this, 'handleResolutionChanged'); + // FIXME: resetLayersPane_ should be called + // elsewhere as we may be frozen here + this.resetLayersPane_(); + this.render(); +}; + + /** * Reset the layers pane to its initial position. * @private @@ -118,56 +171,3 @@ ol.dom.MapRenderer.prototype.shiftLayersPane_ = function() { this.renderedCenter_ = center; } }; - - -/** - * @inheritDoc - */ -ol.dom.MapRenderer.prototype.createLayerRenderer = function(layer) { - - if (layer instanceof ol.TileLayer) { - - var layerPane = goog.dom.createElement(goog.dom.TagName.DIV); - layerPane.className = 'ol-layer'; - layerPane.style.position = 'absolute'; - goog.dom.appendChild(this.layersPane_, layerPane); - - var layerRenderer = new ol.dom.TileLayerRenderer(this, layer, layerPane); - - this.layerPanes_[goog.getUid(layerRenderer)] = layerPane; - - return layerRenderer; - - } else { - goog.asserts.assert(false); - return null; - } -}; - - -/** - * @inheritDoc - */ -ol.dom.MapRenderer.prototype.handleCenterChanged = function() { - goog.base(this, 'handleCenterChanged'); - // FIXME: shiftLayersPane_ and resetLayersPane_ should be called - // elsewhere as we may be frozen here - if (goog.isDef(this.renderedCenter_)) { - this.shiftLayersPane_(); - } else { - this.resetLayersPane_(); - } - this.render(); -}; - - -/** - * @inheritDoc - */ -ol.dom.MapRenderer.prototype.handleResolutionChanged = function() { - goog.base(this, 'handleResolutionChanged'); - // FIXME: resetLayersPane_ should be called - // elsewhere as we may be frozen here - this.resetLayersPane_(); - this.render(); -}; diff --git a/src/ol/dom/tilelayerrenderer.js b/src/ol/dom/tilelayerrenderer.js index d60b4bad37..5c66bcf786 100644 --- a/src/ol/dom/tilelayerrenderer.js +++ b/src/ol/dom/tilelayerrenderer.js @@ -44,6 +44,50 @@ ol.dom.TileLayerRenderer.prototype.getLayer = function() { }; +/** + * Get the pixel offset between the tile origin and the container origin. + * @private + * @param {number} z Z. + * @param {number} resolution Resolution. + * @return {ol.Coordinate} Offset. + */ +ol.dom.TileLayerRenderer.prototype.getTileOffset_ = function(z, resolution) { + var tileLayer = this.getLayer(); + var tileStore = tileLayer.getStore(); + var tileGrid = tileStore.getTileGrid(); + var tileOrigin = tileGrid.getOrigin(z); + var offset = new ol.Coordinate( + Math.round((this.origin.x - tileOrigin.x) / resolution), + Math.round((tileOrigin.y - this.origin.y) / resolution)); + return offset; +}; + + +/** + * Get rid of tiles outside the rendered extent. + * @private + * @param {ol.TileBounds} tileBounds Tile bounds. + * @param {number} z Z. + */ +ol.dom.TileLayerRenderer.prototype.removeInvisibleTiles_ = function( + tileBounds, z) { + var key, tileCoord, prune, tile; + for (key in this.renderedTiles_) { + tileCoord = ol.TileCoord.createFromString(key); + prune = z !== tileCoord.z || + tileCoord.x < tileBounds.minX || + tileCoord.x > tileBounds.maxX || + tileCoord.y < tileBounds.minY || + tileCoord.y > tileBounds.maxY; + if (prune) { + tile = this.renderedTiles_[key]; + delete this.renderedTiles_[key]; + goog.dom.removeNode(tile.getImage(this)); + } + } +}; + + /** * @inheritDoc */ @@ -105,47 +149,3 @@ ol.dom.TileLayerRenderer.prototype.render = function() { this.removeInvisibleTiles_(tileBounds, z); this.renderedMapResolution_ = mapResolution; }; - - -/** - * Get the pixel offset between the tile origin and the container origin. - * @private - * @param {number} z Z. - * @param {number} resolution Resolution. - * @return {ol.Coordinate} Offset. - */ -ol.dom.TileLayerRenderer.prototype.getTileOffset_ = function(z, resolution) { - var tileLayer = this.getLayer(); - var tileStore = tileLayer.getStore(); - var tileGrid = tileStore.getTileGrid(); - var tileOrigin = tileGrid.getOrigin(z); - var offset = new ol.Coordinate( - Math.round((this.origin.x - tileOrigin.x) / resolution), - Math.round((tileOrigin.y - this.origin.y) / resolution)); - return offset; -}; - - -/** - * Get rid of tiles outside the rendered extent. - * @private - * @param {ol.TileBounds} tileBounds Tile bounds. - * @param {number} z Z. - */ -ol.dom.TileLayerRenderer.prototype.removeInvisibleTiles_ = function( - tileBounds, z) { - var key, tileCoord, prune, tile; - for (key in this.renderedTiles_) { - tileCoord = ol.TileCoord.createFromString(key); - prune = z !== tileCoord.z || - tileCoord.x < tileBounds.minX || - tileCoord.x > tileBounds.maxX || - tileCoord.y < tileBounds.minY || - tileCoord.y > tileBounds.maxY; - if (prune) { - tile = this.renderedTiles_[key]; - delete this.renderedTiles_[key]; - goog.dom.removeNode(tile.getImage(this)); - } - } -}; diff --git a/src/ol/interaction/drag.js b/src/ol/interaction/drag.js index 85dc8f3880..a7e57ea505 100644 --- a/src/ol/interaction/drag.js +++ b/src/ol/interaction/drag.js @@ -70,16 +70,16 @@ ol.interaction.Drag.prototype.handleDrag = goog.nullFunction; /** * @param {ol.MapBrowserEvent} mapBrowserEvent Event. * @protected - * @return {boolean} Capture dragging. */ -ol.interaction.Drag.prototype.handleDragStart = goog.functions.FALSE; +ol.interaction.Drag.prototype.handleDragEnd = goog.nullFunction; /** * @param {ol.MapBrowserEvent} mapBrowserEvent Event. * @protected + * @return {boolean} Capture dragging. */ -ol.interaction.Drag.prototype.handleDragEnd = goog.nullFunction; +ol.interaction.Drag.prototype.handleDragStart = goog.functions.FALSE; /** diff --git a/src/ol/interaction/interaction.js b/src/ol/interaction/interaction.js index 30532e870e..b148a63e82 100644 --- a/src/ol/interaction/interaction.js +++ b/src/ol/interaction/interaction.js @@ -22,12 +22,6 @@ ol.Interaction = function(constraints) { }; -/** - * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. - */ -ol.Interaction.prototype.handleMapBrowserEvent = goog.abstractMethod; - - /** * @param {ol.Map} map Map. * @param {ol.Extent} extent Extent. @@ -44,6 +38,12 @@ ol.Interaction.prototype.fitExtent = function(map, extent) { }; +/** + * @param {ol.MapBrowserEvent} mapBrowserEvent Map browser event. + */ +ol.Interaction.prototype.handleMapBrowserEvent = goog.abstractMethod; + + /** * @param {ol.Map} map Map. * @param {ol.Coordinate} delta Delta. diff --git a/src/ol/tile/tileurlfunction.js b/src/ol/tile/tileurlfunction.js index 03a3c32561..d61cf898e2 100644 --- a/src/ol/tile/tileurlfunction.js +++ b/src/ol/tile/tileurlfunction.js @@ -41,6 +41,16 @@ ol.TileUrlFunction.createFromTemplate = function(template) { }; +/** + * @param {Array.} templates Templates. + * @return {ol.TileUrlFunctionType} Tile URL function. + */ +ol.TileUrlFunction.createFromTemplates = function(templates) { + return ol.TileUrlFunction.createFromTileUrlFunctions( + goog.array.map(templates, ol.TileUrlFunction.createFromTemplate)); +}; + + /** * @param {Array.} tileUrlFunctions Tile URL Functions. * @return {ol.TileUrlFunctionType} Tile URL function. @@ -57,16 +67,6 @@ ol.TileUrlFunction.createFromTileUrlFunctions = function(tileUrlFunctions) { }; -/** - * @param {Array.} templates Templates. - * @return {ol.TileUrlFunctionType} Tile URL function. - */ -ol.TileUrlFunction.createFromTemplates = function(templates) { - return ol.TileUrlFunction.createFromTileUrlFunctions( - goog.array.map(templates, ol.TileUrlFunction.createFromTemplate)); -}; - - /** * @param {ol.TileCoord} tileCoord Tile coordinate. * @return {string|undefined} Tile URL. diff --git a/src/ol/webgl/layerrenderer.js b/src/ol/webgl/layerrenderer.js index 59ca120d7a..9e0f70a9ac 100644 --- a/src/ol/webgl/layerrenderer.js +++ b/src/ol/webgl/layerrenderer.js @@ -26,12 +26,6 @@ ol.webgl.LayerRenderer.prototype.dispatchChangeEvent = function() { }; -/** - * @return {WebGLTexture} Texture. - */ -ol.webgl.LayerRenderer.prototype.getTexture = goog.abstractMethod; - - /** * @override * @return {ol.MapRenderer} MapRenderer. @@ -47,6 +41,12 @@ ol.webgl.LayerRenderer.prototype.getMapRenderer = function() { ol.webgl.LayerRenderer.prototype.getMatrix = goog.abstractMethod; +/** + * @return {WebGLTexture} Texture. + */ +ol.webgl.LayerRenderer.prototype.getTexture = goog.abstractMethod; + + /** * @inheritDoc */ diff --git a/src/ol/webgl/maprenderer.js b/src/ol/webgl/maprenderer.js index a923626336..d2b5055e67 100644 --- a/src/ol/webgl/maprenderer.js +++ b/src/ol/webgl/maprenderer.js @@ -514,6 +514,31 @@ ol.webgl.MapRenderer.prototype.isImageTextureLoaded = function(image) { }; +/** + * @inheritDoc + */ +ol.webgl.MapRenderer.prototype.removeLayer = function(layer) { + goog.base(this, 'removeLayer', layer); + if (layer.getVisible()) { + this.render(); + } +}; + + +/** + * @inheritDoc + */ +ol.webgl.MapRenderer.prototype.removeLayerRenderer = function(layer) { + var layerRenderer = goog.base(this, 'removeLayerRenderer', layer); + if (!goog.isNull(layerRenderer)) { + var layerKey = goog.getUid(layer); + goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[layerKey]); + delete this.layerRendererChangeListenKeys_[layerKey]; + } + return layerRenderer; +}; + + /** * @inheritDoc */ @@ -592,31 +617,6 @@ ol.webgl.MapRenderer.prototype.render = function() { }; -/** - * @inheritDoc - */ -ol.webgl.MapRenderer.prototype.removeLayer = function(layer) { - goog.base(this, 'removeLayer', layer); - if (layer.getVisible()) { - this.render(); - } -}; - - -/** - * @inheritDoc - */ -ol.webgl.MapRenderer.prototype.removeLayerRenderer = function(layer) { - var layerRenderer = goog.base(this, 'removeLayerRenderer', layer); - if (!goog.isNull(layerRenderer)) { - var layerKey = goog.getUid(layer); - goog.events.unlistenByKey(this.layerRendererChangeListenKeys_[layerKey]); - delete this.layerRendererChangeListenKeys_[layerKey]; - } - return layerRenderer; -}; - - /** * @inheritDoc */ diff --git a/src/ol/webgl/tilelayerrenderer.js b/src/ol/webgl/tilelayerrenderer.js index de57ee598b..c193d38238 100644 --- a/src/ol/webgl/tilelayerrenderer.js +++ b/src/ol/webgl/tilelayerrenderer.js @@ -145,21 +145,6 @@ ol.webgl.TileLayerRenderer = function(mapRenderer, tileLayer) { goog.inherits(ol.webgl.TileLayerRenderer, ol.webgl.LayerRenderer); -/** - * @protected - */ -ol.webgl.TileLayerRenderer.prototype.disposeInternal = function() { - var mapRenderer = this.getMapRenderer(); - var gl = mapRenderer.getGL(); - if (!gl.isContextLost()) { - gl.deleteBuffer(this.arrayBuffer_); - gl.deleteFramebuffer(this.framebuffer_); - gl.deleteTexture(this.texture_); - } - goog.base(this, 'disposeInternal'); -}; - - /** * @param {number} framebufferDimension Framebuffer dimension. * @private @@ -202,6 +187,21 @@ ol.webgl.TileLayerRenderer.prototype.bindFramebuffer_ = }; +/** + * @protected + */ +ol.webgl.TileLayerRenderer.prototype.disposeInternal = function() { + var mapRenderer = this.getMapRenderer(); + var gl = mapRenderer.getGL(); + if (!gl.isContextLost()) { + gl.deleteBuffer(this.arrayBuffer_); + gl.deleteFramebuffer(this.framebuffer_); + gl.deleteTexture(this.texture_); + } + goog.base(this, 'disposeInternal'); +}; + + /** * @return {ol.TileLayer} Layer. * @override