Fix forEachLayerAtPixel and improve class hierarchy

This commit is contained in:
Andreas Hocevar
2016-12-07 19:34:28 +01:00
parent f795019215
commit d854222c4b
5 changed files with 208 additions and 222 deletions

View File

@@ -9,17 +9,17 @@ goog.require('ol.Tile');
goog.require('ol.array');
goog.require('ol.dom');
goog.require('ol.extent');
goog.require('ol.renderer.canvas.Layer');
goog.require('ol.renderer.canvas.IntermediateCanvas');
/**
* @constructor
* @extends {ol.renderer.canvas.Layer}
* @extends {ol.renderer.canvas.IntermediateCanvas}
* @param {ol.layer.Tile|ol.layer.VectorTile} tileLayer Tile layer.
*/
ol.renderer.canvas.TileLayer = function(tileLayer) {
ol.renderer.canvas.Layer.call(this, tileLayer);
ol.renderer.canvas.IntermediateCanvas.call(this, tileLayer);
/**
* @protected
@@ -33,12 +33,6 @@ ol.renderer.canvas.TileLayer = function(tileLayer) {
*/
this.renderedExtent_ = null;
/**
* @private
* @type {number}
*/
this.renderedResolution_;
/**
* @private
* @type {number}
@@ -75,12 +69,6 @@ ol.renderer.canvas.TileLayer = function(tileLayer) {
*/
this.imageTransform_ = ol.transform.create();
/**
* @private
* @type {ol.Transform}
*/
this.coordinateToCanvasPixelTransform_ = ol.transform.create();
/**
* @protected
* @type {number}
@@ -88,7 +76,7 @@ ol.renderer.canvas.TileLayer = function(tileLayer) {
this.zDirection = 0;
};
ol.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.Layer);
ol.inherits(ol.renderer.canvas.TileLayer, ol.renderer.canvas.IntermediateCanvas);
/**
@@ -172,7 +160,7 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layer
}
var hints = frameState.viewHints;
if (!(this.renderedResolution_ && Date.now() - frameState.time > 16 &&
if (!(this.renderedResolution && Date.now() - frameState.time > 16 &&
(hints[ol.View.Hint.ANIMATING] || hints[ol.View.Hint.INTERACTING])) &&
(newTiles || !(this.renderedExtent_ &&
ol.extent.equals(this.renderedExtent_, imageExtent)) ||
@@ -220,18 +208,18 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = function(frameState, layer
}
this.renderedRevision_ = sourceRevision;
this.renderedResolution_ = tileResolution;
this.renderedResolution = tileResolution;
this.renderedExtent_ = imageExtent;
}
var scale = pixelRatio / tilePixelRatio * this.renderedResolution_ / viewResolution;
var scale = pixelRatio / tilePixelRatio * this.renderedResolution / viewResolution;
var transform = ol.transform.compose(this.imageTransform_,
pixelRatio * size[0] / 2, pixelRatio * size[1] / 2,
scale, scale,
0,
tilePixelRatio * (this.renderedExtent_[0] - viewCenter[0]) / this.renderedResolution_,
tilePixelRatio * (viewCenter[1] - this.renderedExtent_[3]) / this.renderedResolution_);
ol.transform.compose(this.coordinateToCanvasPixelTransform_,
tilePixelRatio * (this.renderedExtent_[0] - viewCenter[0]) / this.renderedResolution,
tilePixelRatio * (viewCenter[1] - this.renderedExtent_[3]) / this.renderedResolution);
ol.transform.compose(this.coordinateToCanvasPixelTransform,
pixelRatio * size[0] / 2 - transform[4], pixelRatio * size[1] / 2 - transform[5],
pixelRatio / viewResolution, -pixelRatio / viewResolution,
0,
@@ -267,29 +255,6 @@ ol.renderer.canvas.TileLayer.prototype.drawTileImage = function(tile, frameState
};
/**
* @param {ol.Coordinate} coordinate Coordinate.
* @param {olx.FrameState} frameState FrameState.
* @param {function(this: S, ol.layer.Layer, (Uint8ClampedArray|Uint8Array)): T} callback Layer
* callback.
* @param {S} thisArg Value to use as `this` when executing `callback`.
* @return {T|undefined} Callback result.
* @template S,T,U
*/
ol.renderer.canvas.TileLayer.prototype.forEachLayerAtCoordinate = function(
coordinate, frameState, callback, thisArg) {
var canvasPixel = ol.transform.apply(this.coordinateToCanvasPixelTransform_, coordinate);
var imageData = this.context.getImageData(canvasPixel[0], canvasPixel[1], 1, 1).data;
if (imageData[3] > 0) {
return callback.call(thisArg, this.getLayer(), imageData);
} else {
return undefined;
}
};
/**
* @inheritDoc
*/