Simplify hit detection code

This commit is contained in:
Éric Lemoine
2014-12-05 15:42:54 +01:00
parent 571cd1c57a
commit fdf52c1865
12 changed files with 142 additions and 158 deletions
+1 -1
View File
@@ -191,7 +191,7 @@ ol.FeatureOverlay.prototype.handleMapPostCompose_ = function(event) {
ii = styles.length; ii = styles.length;
for (i = 0; i < ii; ++i) { for (i = 0; i < ii; ++i) {
ol.renderer.vector.renderFeature(replayGroup, feature, styles[i], ol.renderer.vector.renderFeature(replayGroup, feature, styles[i],
squaredTolerance, feature, this.handleImageChange_, this); squaredTolerance, this.handleImageChange_, this);
} }
}, this); }, this);
}; };
+17 -17
View File
@@ -428,11 +428,11 @@ ol.render.canvas.Immediate.prototype.drawAsync = function(zIndex, callback) {
* the current fill and stroke styles. * the current fill and stroke styles.
* *
* @param {ol.geom.Circle} circleGeometry Circle geometry. * @param {ol.geom.Circle} circleGeometry Circle geometry.
* @param {Object} data Opaque data object, * @param {ol.Feature} feature Feature,
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawCircleGeometry = ol.render.canvas.Immediate.prototype.drawCircleGeometry =
function(circleGeometry, data) { function(circleGeometry, feature) {
if (!ol.extent.intersects(this.extent_, circleGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, circleGeometry.getExtent())) {
return; return;
} }
@@ -504,10 +504,10 @@ ol.render.canvas.Immediate.prototype.drawFeature = function(feature, style) {
* *
* @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry * @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry
* collection. * collection.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry = ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry =
function(geometryCollectionGeometry, data) { function(geometryCollectionGeometry, feature) {
var geometries = geometryCollectionGeometry.getGeometriesArray(); var geometries = geometryCollectionGeometry.getGeometriesArray();
var i, ii; var i, ii;
for (i = 0, ii = geometries.length; i < ii; ++i) { for (i = 0, ii = geometries.length; i < ii; ++i) {
@@ -515,7 +515,7 @@ ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry =
var geometryRenderer = var geometryRenderer =
ol.render.canvas.Immediate.GEOMETRY_RENDERERS_[geometry.getType()]; ol.render.canvas.Immediate.GEOMETRY_RENDERERS_[geometry.getType()];
goog.asserts.assert(goog.isDef(geometryRenderer)); goog.asserts.assert(goog.isDef(geometryRenderer));
geometryRenderer.call(this, geometry, data); geometryRenderer.call(this, geometry, feature);
} }
}; };
@@ -525,11 +525,11 @@ ol.render.canvas.Immediate.prototype.drawGeometryCollectionGeometry =
* the current style. * the current style.
* *
* @param {ol.geom.Point} pointGeometry Point geometry. * @param {ol.geom.Point} pointGeometry Point geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawPointGeometry = ol.render.canvas.Immediate.prototype.drawPointGeometry =
function(pointGeometry, data) { function(pointGeometry, feature) {
var flatCoordinates = pointGeometry.getFlatCoordinates(); var flatCoordinates = pointGeometry.getFlatCoordinates();
var stride = pointGeometry.getStride(); var stride = pointGeometry.getStride();
if (!goog.isNull(this.image_)) { if (!goog.isNull(this.image_)) {
@@ -546,11 +546,11 @@ ol.render.canvas.Immediate.prototype.drawPointGeometry =
* uses the current style. * uses the current style.
* *
* @param {ol.geom.MultiPoint} multiPointGeometry MultiPoint geometry. * @param {ol.geom.MultiPoint} multiPointGeometry MultiPoint geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawMultiPointGeometry = ol.render.canvas.Immediate.prototype.drawMultiPointGeometry =
function(multiPointGeometry, data) { function(multiPointGeometry, feature) {
var flatCoordinates = multiPointGeometry.getFlatCoordinates(); var flatCoordinates = multiPointGeometry.getFlatCoordinates();
var stride = multiPointGeometry.getStride(); var stride = multiPointGeometry.getStride();
if (!goog.isNull(this.image_)) { if (!goog.isNull(this.image_)) {
@@ -567,11 +567,11 @@ ol.render.canvas.Immediate.prototype.drawMultiPointGeometry =
* the current style. * the current style.
* *
* @param {ol.geom.LineString} lineStringGeometry Line string geometry. * @param {ol.geom.LineString} lineStringGeometry Line string geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawLineStringGeometry = ol.render.canvas.Immediate.prototype.drawLineStringGeometry =
function(lineStringGeometry, data) { function(lineStringGeometry, feature) {
if (!ol.extent.intersects(this.extent_, lineStringGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, lineStringGeometry.getExtent())) {
return; return;
} }
@@ -597,11 +597,11 @@ ol.render.canvas.Immediate.prototype.drawLineStringGeometry =
* *
* @param {ol.geom.MultiLineString} multiLineStringGeometry * @param {ol.geom.MultiLineString} multiLineStringGeometry
* MultiLineString geometry. * MultiLineString geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry = ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry =
function(multiLineStringGeometry, data) { function(multiLineStringGeometry, feature) {
var geometryExtent = multiLineStringGeometry.getExtent(); var geometryExtent = multiLineStringGeometry.getExtent();
if (!ol.extent.intersects(this.extent_, geometryExtent)) { if (!ol.extent.intersects(this.extent_, geometryExtent)) {
return; return;
@@ -633,11 +633,11 @@ ol.render.canvas.Immediate.prototype.drawMultiLineStringGeometry =
* the current style. * the current style.
* *
* @param {ol.geom.Polygon} polygonGeometry Polygon geometry. * @param {ol.geom.Polygon} polygonGeometry Polygon geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawPolygonGeometry = ol.render.canvas.Immediate.prototype.drawPolygonGeometry =
function(polygonGeometry, data) { function(polygonGeometry, feature) {
if (!ol.extent.intersects(this.extent_, polygonGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, polygonGeometry.getExtent())) {
return; return;
} }
@@ -670,11 +670,11 @@ ol.render.canvas.Immediate.prototype.drawPolygonGeometry =
* Render MultiPolygon geometry into the canvas. Rendering is immediate and * Render MultiPolygon geometry into the canvas. Rendering is immediate and
* uses the current style. * uses the current style.
* @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry. * @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @api * @api
*/ */
ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry = ol.render.canvas.Immediate.prototype.drawMultiPolygonGeometry =
function(multiPolygonGeometry, data) { function(multiPolygonGeometry, feature) {
if (!ol.extent.intersects(this.extent_, multiPolygonGeometry.getExtent())) { if (!ol.extent.intersects(this.extent_, multiPolygonGeometry.getExtent())) {
return; return;
} }
+54 -60
View File
@@ -195,14 +195,14 @@ ol.render.canvas.Replay.prototype.appendFlatCoordinates =
/** /**
* @protected * @protected
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, data) { ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, feature) {
this.beginGeometryInstruction1_ = this.beginGeometryInstruction1_ =
[ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, data, 0]; [ol.render.canvas.Instruction.BEGIN_GEOMETRY, feature, 0];
this.instructions.push(this.beginGeometryInstruction1_); this.instructions.push(this.beginGeometryInstruction1_);
this.beginGeometryInstruction2_ = this.beginGeometryInstruction2_ =
[ol.render.canvas.Instruction.BEGIN_GEOMETRY, geometry, data, 0]; [ol.render.canvas.Instruction.BEGIN_GEOMETRY, feature, 0];
this.hitDetectionInstructions.push(this.beginGeometryInstruction2_); this.hitDetectionInstructions.push(this.beginGeometryInstruction2_);
}; };
@@ -215,14 +215,13 @@ ol.render.canvas.Replay.prototype.beginGeometry = function(geometry, data) {
* @param {number} viewRotation View rotation. * @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip. * @param {Object} skippedFeaturesHash Ids of features to skip.
* @param {Array.<*>} instructions Instructions array. * @param {Array.<*>} instructions Instructions array.
* @param {function(ol.geom.Geometry, Object): T|undefined} geometryCallback * @param {function(ol.Feature): T|undefined} featureCallback Feature callback.
* Geometry callback.
* @return {T|undefined} Callback result. * @return {T|undefined} Callback result.
* @template T * @template T
*/ */
ol.render.canvas.Replay.prototype.replay_ = function( ol.render.canvas.Replay.prototype.replay_ = function(
context, pixelRatio, transform, viewRotation, skippedFeaturesHash, context, pixelRatio, transform, viewRotation, skippedFeaturesHash,
instructions, geometryCallback) { instructions, featureCallback) {
/** @type {Array.<number>} */ /** @type {Array.<number>} */
var pixelCoordinates; var pixelCoordinates;
if (ol.vec.Mat4.equals2D(transform, this.renderedTransform_)) { if (ol.vec.Mat4.equals2D(transform, this.renderedTransform_)) {
@@ -242,16 +241,15 @@ ol.render.canvas.Replay.prototype.replay_ = function(
while (i < ii) { while (i < ii) {
var instruction = instructions[i]; var instruction = instructions[i];
var type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]); var type = /** @type {ol.render.canvas.Instruction} */ (instruction[0]);
var data, fill, geometry, stroke, text, x, y; var feature, fill, stroke, text, x, y;
switch (type) { switch (type) {
case ol.render.canvas.Instruction.BEGIN_GEOMETRY: case ol.render.canvas.Instruction.BEGIN_GEOMETRY:
geometry = /** @type {ol.geom.Geometry} */ (instruction[1]); feature = /** @type {ol.Feature} */ (instruction[1]);
data = /** @type {Object} */ (instruction[2]); var featureUid = goog.getUid(feature).toString();
var dataUid = goog.getUid(data).toString(); if (!goog.isDef(goog.object.get(skippedFeaturesHash, featureUid))) {
if (!goog.isDef(goog.object.get(skippedFeaturesHash, dataUid))) {
++i; ++i;
} else { } else {
i = /** @type {number} */ (instruction[3]); i = /** @type {number} */ (instruction[2]);
} }
break; break;
case ol.render.canvas.Instruction.BEGIN_PATH: case ol.render.canvas.Instruction.BEGIN_PATH:
@@ -381,10 +379,9 @@ ol.render.canvas.Replay.prototype.replay_ = function(
++i; ++i;
break; break;
case ol.render.canvas.Instruction.END_GEOMETRY: case ol.render.canvas.Instruction.END_GEOMETRY:
if (goog.isDef(geometryCallback)) { if (goog.isDef(featureCallback)) {
geometry = /** @type {ol.geom.Geometry} */ (instruction[1]); feature = /** @type {ol.Feature} */ (instruction[1]);
data = /** @type {Object} */ (instruction[2]); var result = featureCallback(feature);
var result = geometryCallback(geometry, data);
if (result) { if (result) {
return result; return result;
} }
@@ -475,17 +472,16 @@ ol.render.canvas.Replay.prototype.replay = function(
* @param {goog.vec.Mat4.Number} transform Transform. * @param {goog.vec.Mat4.Number} transform Transform.
* @param {number} viewRotation View rotation. * @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip * @param {Object} skippedFeaturesHash Ids of features to skip
* @param {function(ol.geom.Geometry, Object): T=} opt_geometryCallback * @param {function(ol.Feature): T=} opt_featureCallback Feature callback.
* Geometry callback.
* @return {T|undefined} Callback result. * @return {T|undefined} Callback result.
* @template T * @template T
*/ */
ol.render.canvas.Replay.prototype.replayHitDetection = function( ol.render.canvas.Replay.prototype.replayHitDetection = function(
context, transform, viewRotation, skippedFeaturesHash, context, transform, viewRotation, skippedFeaturesHash,
opt_geometryCallback) { opt_featureCallback) {
var instructions = this.hitDetectionInstructions; var instructions = this.hitDetectionInstructions;
return this.replay_(context, 1, transform, viewRotation, return this.replay_(context, 1, transform, viewRotation,
skippedFeaturesHash, instructions, opt_geometryCallback); skippedFeaturesHash, instructions, opt_featureCallback);
}; };
@@ -510,7 +506,7 @@ ol.render.canvas.Replay.prototype.reverseHitDetectionInstructions_ =
goog.asserts.assert(begin == -1); goog.asserts.assert(begin == -1);
begin = i; begin = i;
} else if (type == ol.render.canvas.Instruction.BEGIN_GEOMETRY) { } else if (type == ol.render.canvas.Instruction.BEGIN_GEOMETRY) {
instruction[3] = i; instruction[2] = i;
goog.asserts.assert(begin >= 0); goog.asserts.assert(begin >= 0);
ol.array.reverseSubArray(this.hitDetectionInstructions, begin, i); ol.array.reverseSubArray(this.hitDetectionInstructions, begin, i);
begin = -1; begin = -1;
@@ -590,17 +586,17 @@ ol.render.canvas.Replay.prototype.drawText = goog.abstractMethod;
/** /**
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.canvas.Replay.prototype.endGeometry = function(geometry, data) { ol.render.canvas.Replay.prototype.endGeometry = function(geometry, feature) {
goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction1_)); goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction1_));
this.beginGeometryInstruction1_[3] = this.instructions.length; this.beginGeometryInstruction1_[2] = this.instructions.length;
this.beginGeometryInstruction1_ = null; this.beginGeometryInstruction1_ = null;
goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction2_)); goog.asserts.assert(!goog.isNull(this.beginGeometryInstruction2_));
this.beginGeometryInstruction2_[3] = this.hitDetectionInstructions.length; this.beginGeometryInstruction2_[2] = this.hitDetectionInstructions.length;
this.beginGeometryInstruction2_ = null; this.beginGeometryInstruction2_ = null;
var endGeometryInstruction = var endGeometryInstruction =
[ol.render.canvas.Instruction.END_GEOMETRY, geometry, data]; [ol.render.canvas.Instruction.END_GEOMETRY, feature];
this.instructions.push(endGeometryInstruction); this.instructions.push(endGeometryInstruction);
this.hitDetectionInstructions.push(endGeometryInstruction); this.hitDetectionInstructions.push(endGeometryInstruction);
}; };
@@ -765,7 +761,7 @@ ol.render.canvas.ImageReplay.prototype.drawCoordinates_ =
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.ImageReplay.prototype.drawPointGeometry = ol.render.canvas.ImageReplay.prototype.drawPointGeometry =
function(pointGeometry, data) { function(pointGeometry, feature) {
if (goog.isNull(this.image_)) { if (goog.isNull(this.image_)) {
return; return;
} }
@@ -780,7 +776,7 @@ ol.render.canvas.ImageReplay.prototype.drawPointGeometry =
goog.asserts.assert(goog.isDef(this.scale_)); goog.asserts.assert(goog.isDef(this.scale_));
goog.asserts.assert(goog.isDef(this.width_)); goog.asserts.assert(goog.isDef(this.width_));
ol.extent.extend(this.extent_, pointGeometry.getExtent()); ol.extent.extend(this.extent_, pointGeometry.getExtent());
this.beginGeometry(pointGeometry, data); this.beginGeometry(pointGeometry, feature);
var flatCoordinates = pointGeometry.getFlatCoordinates(); var flatCoordinates = pointGeometry.getFlatCoordinates();
var stride = pointGeometry.getStride(); var stride = pointGeometry.getStride();
var myBegin = this.coordinates.length; var myBegin = this.coordinates.length;
@@ -801,7 +797,7 @@ ol.render.canvas.ImageReplay.prototype.drawPointGeometry =
this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_,
this.scale_, this.snapToPixel_, this.width_ this.scale_, this.snapToPixel_, this.width_
]); ]);
this.endGeometry(pointGeometry, data); this.endGeometry(pointGeometry, feature);
}; };
@@ -809,7 +805,7 @@ ol.render.canvas.ImageReplay.prototype.drawPointGeometry =
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry = ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry =
function(multiPointGeometry, data) { function(multiPointGeometry, feature) {
if (goog.isNull(this.image_)) { if (goog.isNull(this.image_)) {
return; return;
} }
@@ -824,7 +820,7 @@ ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry =
goog.asserts.assert(goog.isDef(this.scale_)); goog.asserts.assert(goog.isDef(this.scale_));
goog.asserts.assert(goog.isDef(this.width_)); goog.asserts.assert(goog.isDef(this.width_));
ol.extent.extend(this.extent_, multiPointGeometry.getExtent()); ol.extent.extend(this.extent_, multiPointGeometry.getExtent());
this.beginGeometry(multiPointGeometry, data); this.beginGeometry(multiPointGeometry, feature);
var flatCoordinates = multiPointGeometry.getFlatCoordinates(); var flatCoordinates = multiPointGeometry.getFlatCoordinates();
var stride = multiPointGeometry.getStride(); var stride = multiPointGeometry.getStride();
var myBegin = this.coordinates.length; var myBegin = this.coordinates.length;
@@ -845,7 +841,7 @@ ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry =
this.originX_, this.originY_, this.rotateWithView_, this.rotation_, this.originX_, this.originY_, this.rotateWithView_, this.rotation_,
this.scale_, this.snapToPixel_, this.width_ this.scale_, this.snapToPixel_, this.width_
]); ]);
this.endGeometry(multiPointGeometry, data); this.endGeometry(multiPointGeometry, feature);
}; };
@@ -1032,7 +1028,7 @@ ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() {
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry = ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry =
function(lineStringGeometry, data) { function(lineStringGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(!goog.isNull(state)); goog.asserts.assert(!goog.isNull(state));
var strokeStyle = state.strokeStyle; var strokeStyle = state.strokeStyle;
@@ -1042,7 +1038,7 @@ ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry =
} }
ol.extent.extend(this.extent_, lineStringGeometry.getExtent()); ol.extent.extend(this.extent_, lineStringGeometry.getExtent());
this.setStrokeStyle_(); this.setStrokeStyle_();
this.beginGeometry(lineStringGeometry, data); this.beginGeometry(lineStringGeometry, feature);
this.hitDetectionInstructions.push( this.hitDetectionInstructions.push(
[ol.render.canvas.Instruction.SET_STROKE_STYLE, [ol.render.canvas.Instruction.SET_STROKE_STYLE,
state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
@@ -1053,7 +1049,7 @@ ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry =
this.drawFlatCoordinates_( this.drawFlatCoordinates_(
flatCoordinates, 0, flatCoordinates.length, stride); flatCoordinates, 0, flatCoordinates.length, stride);
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]); this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);
this.endGeometry(lineStringGeometry, data); this.endGeometry(lineStringGeometry, feature);
}; };
@@ -1061,7 +1057,7 @@ ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry =
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry = ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry =
function(multiLineStringGeometry, data) { function(multiLineStringGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(!goog.isNull(state)); goog.asserts.assert(!goog.isNull(state));
var strokeStyle = state.strokeStyle; var strokeStyle = state.strokeStyle;
@@ -1071,7 +1067,7 @@ ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry =
} }
ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent()); ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent());
this.setStrokeStyle_(); this.setStrokeStyle_();
this.beginGeometry(multiLineStringGeometry, data); this.beginGeometry(multiLineStringGeometry, feature);
this.hitDetectionInstructions.push( this.hitDetectionInstructions.push(
[ol.render.canvas.Instruction.SET_STROKE_STYLE, [ol.render.canvas.Instruction.SET_STROKE_STYLE,
state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin, state.strokeStyle, state.lineWidth, state.lineCap, state.lineJoin,
@@ -1087,7 +1083,7 @@ ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry =
flatCoordinates, offset, ends[i], stride); flatCoordinates, offset, ends[i], stride);
} }
this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]); this.hitDetectionInstructions.push([ol.render.canvas.Instruction.STROKE]);
this.endGeometry(multiLineStringGeometry, data); this.endGeometry(multiLineStringGeometry, feature);
}; };
@@ -1236,7 +1232,7 @@ ol.render.canvas.PolygonReplay.prototype.drawFlatCoordinatess_ =
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry = ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry =
function(circleGeometry, data) { function(circleGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(!goog.isNull(state)); goog.asserts.assert(!goog.isNull(state));
var fillStyle = state.fillStyle; var fillStyle = state.fillStyle;
@@ -1249,7 +1245,7 @@ ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry =
} }
ol.extent.extend(this.extent_, circleGeometry.getExtent()); ol.extent.extend(this.extent_, circleGeometry.getExtent());
this.setFillStrokeStyles_(); this.setFillStrokeStyles_();
this.beginGeometry(circleGeometry, data); this.beginGeometry(circleGeometry, feature);
// always fill the circle for hit detection // always fill the circle for hit detection
this.hitDetectionInstructions.push( this.hitDetectionInstructions.push(
[ol.render.canvas.Instruction.SET_FILL_STYLE, [ol.render.canvas.Instruction.SET_FILL_STYLE,
@@ -1280,7 +1276,7 @@ ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry =
this.instructions.push(strokeInstruction); this.instructions.push(strokeInstruction);
this.hitDetectionInstructions.push(strokeInstruction); this.hitDetectionInstructions.push(strokeInstruction);
} }
this.endGeometry(circleGeometry, data); this.endGeometry(circleGeometry, feature);
}; };
@@ -1288,7 +1284,7 @@ ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry =
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry = ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry =
function(polygonGeometry, data) { function(polygonGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(!goog.isNull(state)); goog.asserts.assert(!goog.isNull(state));
var fillStyle = state.fillStyle; var fillStyle = state.fillStyle;
@@ -1301,7 +1297,7 @@ ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry =
} }
ol.extent.extend(this.extent_, polygonGeometry.getExtent()); ol.extent.extend(this.extent_, polygonGeometry.getExtent());
this.setFillStrokeStyles_(); this.setFillStrokeStyles_();
this.beginGeometry(polygonGeometry, data); this.beginGeometry(polygonGeometry, feature);
// always fill the polygon for hit detection // always fill the polygon for hit detection
this.hitDetectionInstructions.push( this.hitDetectionInstructions.push(
[ol.render.canvas.Instruction.SET_FILL_STYLE, [ol.render.canvas.Instruction.SET_FILL_STYLE,
@@ -1316,7 +1312,7 @@ ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry =
var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates(); var flatCoordinates = polygonGeometry.getOrientedFlatCoordinates();
var stride = polygonGeometry.getStride(); var stride = polygonGeometry.getStride();
this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride); this.drawFlatCoordinatess_(flatCoordinates, 0, ends, stride);
this.endGeometry(polygonGeometry, data); this.endGeometry(polygonGeometry, feature);
}; };
@@ -1324,7 +1320,7 @@ ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry =
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry = ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry =
function(multiPolygonGeometry, data) { function(multiPolygonGeometry, feature) {
var state = this.state_; var state = this.state_;
goog.asserts.assert(!goog.isNull(state)); goog.asserts.assert(!goog.isNull(state));
var fillStyle = state.fillStyle; var fillStyle = state.fillStyle;
@@ -1337,7 +1333,7 @@ ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry =
} }
ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent()); ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent());
this.setFillStrokeStyles_(); this.setFillStrokeStyles_();
this.beginGeometry(multiPolygonGeometry, data); this.beginGeometry(multiPolygonGeometry, feature);
// always fill the multi-polygon for hit detection // always fill the multi-polygon for hit detection
this.hitDetectionInstructions.push( this.hitDetectionInstructions.push(
[ol.render.canvas.Instruction.SET_FILL_STYLE, [ol.render.canvas.Instruction.SET_FILL_STYLE,
@@ -1357,7 +1353,7 @@ ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry =
offset = this.drawFlatCoordinatess_( offset = this.drawFlatCoordinatess_(
flatCoordinates, offset, endss[i], stride); flatCoordinates, offset, endss[i], stride);
} }
this.endGeometry(multiPolygonGeometry, data); this.endGeometry(multiPolygonGeometry, feature);
}; };
@@ -1573,7 +1569,7 @@ goog.inherits(ol.render.canvas.TextReplay, ol.render.canvas.Replay);
* @inheritDoc * @inheritDoc
*/ */
ol.render.canvas.TextReplay.prototype.drawText = ol.render.canvas.TextReplay.prototype.drawText =
function(flatCoordinates, offset, end, stride, geometry, data) { function(flatCoordinates, offset, end, stride, geometry, feature) {
if (this.text_ === '' || if (this.text_ === '' ||
goog.isNull(this.textState_) || goog.isNull(this.textState_) ||
(goog.isNull(this.textFillState_) && (goog.isNull(this.textFillState_) &&
@@ -1589,7 +1585,7 @@ ol.render.canvas.TextReplay.prototype.drawText =
this.setReplayStrokeState_(this.textStrokeState_); this.setReplayStrokeState_(this.textStrokeState_);
} }
this.setReplayTextState_(this.textState_); this.setReplayTextState_(this.textState_);
this.beginGeometry(geometry, data); this.beginGeometry(geometry, feature);
var myBegin = this.coordinates.length; var myBegin = this.coordinates.length;
var myEnd = var myEnd =
this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false); this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false);
@@ -1601,7 +1597,7 @@ ol.render.canvas.TextReplay.prototype.drawText =
fill, stroke]; fill, stroke];
this.instructions.push(drawTextInstruction); this.instructions.push(drawTextInstruction);
this.hitDetectionInstructions.push(drawTextInstruction); this.hitDetectionInstructions.push(drawTextInstruction);
this.endGeometry(geometry, data); this.endGeometry(geometry, feature);
}; };
@@ -1875,7 +1871,7 @@ ol.render.canvas.ReplayGroup.prototype.finish = function() {
* @param {number} rotation Rotation. * @param {number} rotation Rotation.
* @param {ol.Coordinate} coordinate Coordinate. * @param {ol.Coordinate} coordinate Coordinate.
* @param {Object} skippedFeaturesHash Ids of features to skip * @param {Object} skippedFeaturesHash Ids of features to skip
* @param {function(ol.geom.Geometry, Object): T} callback Geometry callback. * @param {function(ol.Feature): T} callback Feature callback.
* @return {T|undefined} Callback result. * @return {T|undefined} Callback result.
* @template T * @template T
*/ */
@@ -1894,14 +1890,13 @@ ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(
return this.replayHitDetection_(context, extent, transform, return this.replayHitDetection_(context, extent, transform,
rotation, skippedFeaturesHash, rotation, skippedFeaturesHash,
/** /**
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.Feature} feature Feature.
* @param {Object} data Opaque data object.
* @return {?} Callback result. * @return {?} Callback result.
*/ */
function(geometry, data) { function(feature) {
var imageData = context.getImageData(0, 0, 1, 1).data; var imageData = context.getImageData(0, 0, 1, 1).data;
if (imageData[3] > 0) { if (imageData[3] > 0) {
var result = callback(geometry, data); var result = callback(feature);
if (result) { if (result) {
return result; return result;
} }
@@ -1998,14 +1993,13 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(
* @param {goog.vec.Mat4.Number} transform Transform. * @param {goog.vec.Mat4.Number} transform Transform.
* @param {number} viewRotation View rotation. * @param {number} viewRotation View rotation.
* @param {Object} skippedFeaturesHash Ids of features to skip * @param {Object} skippedFeaturesHash Ids of features to skip
* @param {function(ol.geom.Geometry, Object): T} geometryCallback Geometry * @param {function(ol.Feature): T} featureCallback Feature callback.
* callback.
* @return {T|undefined} Callback result. * @return {T|undefined} Callback result.
* @template T * @template T
*/ */
ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function( ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
context, extent, transform, viewRotation, skippedFeaturesHash, context, extent, transform, viewRotation, skippedFeaturesHash,
geometryCallback) { featureCallback) {
/** @type {Array.<number>} */ /** @type {Array.<number>} */
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number); var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
goog.array.sort(zs, function(a, b) { return b - a; }); goog.array.sort(zs, function(a, b) { return b - a; });
@@ -2018,7 +2012,7 @@ ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
if (goog.isDef(replay) && if (goog.isDef(replay) &&
ol.extent.intersects(extent, replay.getExtent())) { ol.extent.intersects(extent, replay.getExtent())) {
result = replay.replayHitDetection(context, transform, viewRotation, result = replay.replayHitDetection(context, transform, viewRotation,
skippedFeaturesHash, geometryCallback); skippedFeaturesHash, featureCallback);
if (result) { if (result) {
return result; return result;
} }
+18 -18
View File
@@ -23,10 +23,10 @@ ol.render.IVectorContext.prototype.drawAsync = function(zIndex, callback) {
/** /**
* @param {ol.geom.Circle} circleGeometry Circle geometry. * @param {ol.geom.Circle} circleGeometry Circle geometry.
* @param {Object} data Opaque data object, * @param {ol.Feature} feature Feature,
*/ */
ol.render.IVectorContext.prototype.drawCircleGeometry = ol.render.IVectorContext.prototype.drawCircleGeometry =
function(circleGeometry, data) { function(circleGeometry, feature) {
}; };
@@ -41,65 +41,65 @@ ol.render.IVectorContext.prototype.drawFeature = function(feature, style) {
/** /**
* @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry * @param {ol.geom.GeometryCollection} geometryCollectionGeometry Geometry
* collection. * collection.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawGeometryCollectionGeometry = ol.render.IVectorContext.prototype.drawGeometryCollectionGeometry =
function(geometryCollectionGeometry, data) { function(geometryCollectionGeometry, feature) {
}; };
/** /**
* @param {ol.geom.Point} pointGeometry Point geometry. * @param {ol.geom.Point} pointGeometry Point geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawPointGeometry = ol.render.IVectorContext.prototype.drawPointGeometry =
function(pointGeometry, data) { function(pointGeometry, feature) {
}; };
/** /**
* @param {ol.geom.LineString} lineStringGeometry Line string geometry. * @param {ol.geom.LineString} lineStringGeometry Line string geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawLineStringGeometry = ol.render.IVectorContext.prototype.drawLineStringGeometry =
function(lineStringGeometry, data) { function(lineStringGeometry, feature) {
}; };
/** /**
* @param {ol.geom.MultiLineString} multiLineStringGeometry * @param {ol.geom.MultiLineString} multiLineStringGeometry
* MultiLineString geometry. * MultiLineString geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawMultiLineStringGeometry = ol.render.IVectorContext.prototype.drawMultiLineStringGeometry =
function(multiLineStringGeometry, data) { function(multiLineStringGeometry, feature) {
}; };
/** /**
* @param {ol.geom.MultiPoint} multiPointGeometry MultiPoint geometry. * @param {ol.geom.MultiPoint} multiPointGeometry MultiPoint geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawMultiPointGeometry = ol.render.IVectorContext.prototype.drawMultiPointGeometry =
function(multiPointGeometry, data) { function(multiPointGeometry, feature) {
}; };
/** /**
* @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry. * @param {ol.geom.MultiPolygon} multiPolygonGeometry MultiPolygon geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawMultiPolygonGeometry = ol.render.IVectorContext.prototype.drawMultiPolygonGeometry =
function(multiPolygonGeometry, data) { function(multiPolygonGeometry, feature) {
}; };
/** /**
* @param {ol.geom.Polygon} polygonGeometry Polygon geometry. * @param {ol.geom.Polygon} polygonGeometry Polygon geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawPolygonGeometry = ol.render.IVectorContext.prototype.drawPolygonGeometry =
function(polygonGeometry, data) { function(polygonGeometry, feature) {
}; };
@@ -109,10 +109,10 @@ ol.render.IVectorContext.prototype.drawPolygonGeometry =
* @param {number} end End. * @param {number} end End.
* @param {number} stride Stride. * @param {number} stride Stride.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
*/ */
ol.render.IVectorContext.prototype.drawText = ol.render.IVectorContext.prototype.drawText =
function(flatCoordinates, offset, end, stride, geometry, data) { function(flatCoordinates, offset, end, stride, geometry, feature) {
}; };
+36 -38
View File
@@ -49,11 +49,11 @@ ol.renderer.vector.getTolerance = function(resolution, pixelRatio) {
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderCircleGeometry_ = ol.renderer.vector.renderCircleGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.Circle); goog.asserts.assertInstanceof(geometry, ol.geom.Circle);
var fillStyle = style.getFill(); var fillStyle = style.getFill();
var strokeStyle = style.getStroke(); var strokeStyle = style.getStroke();
@@ -61,14 +61,14 @@ ol.renderer.vector.renderCircleGeometry_ =
var polygonReplay = replayGroup.getReplay( var polygonReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawCircleGeometry(geometry, data); polygonReplay.drawCircleGeometry(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(textStyle)) { if (!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay( var textReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.TEXT); style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle); textReplay.setTextStyle(textStyle);
textReplay.drawText(geometry.getCenter(), 0, 2, 2, geometry, data); textReplay.drawText(geometry.getCenter(), 0, 2, 2, geometry, feature);
} }
}; };
@@ -78,20 +78,19 @@ ol.renderer.vector.renderCircleGeometry_ =
* @param {ol.Feature} feature Feature. * @param {ol.Feature} feature Feature.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {number} squaredTolerance Squared tolerance. * @param {number} squaredTolerance Squared tolerance.
* @param {Object} data Opaque data object.
* @param {function(this: T, goog.events.Event)} listener Listener function. * @param {function(this: T, goog.events.Event)} listener Listener function.
* @param {T} thisArg Value to use as `this` when executing `listener`. * @param {T} thisArg Value to use as `this` when executing `listener`.
* @return {boolean} `true` if style is loading. * @return {boolean} `true` if style is loading.
* @template T * @template T
*/ */
ol.renderer.vector.renderFeature = function( ol.renderer.vector.renderFeature = function(
replayGroup, feature, style, squaredTolerance, data, listener, thisArg) { replayGroup, feature, style, squaredTolerance, listener, thisArg) {
var loading = false; var loading = false;
var imageStyle, imageState; var imageStyle, imageState;
imageStyle = style.getImage(); imageStyle = style.getImage();
if (goog.isNull(imageStyle)) { if (goog.isNull(imageStyle)) {
ol.renderer.vector.renderFeature_( ol.renderer.vector.renderFeature_(
replayGroup, feature, style, squaredTolerance, data); replayGroup, feature, style, squaredTolerance);
} else { } else {
imageState = imageStyle.getImageState(); imageState = imageStyle.getImageState();
if (imageState == ol.style.ImageState.LOADED || if (imageState == ol.style.ImageState.LOADED ||
@@ -99,7 +98,7 @@ ol.renderer.vector.renderFeature = function(
imageStyle.unlistenImageChange(listener, thisArg); imageStyle.unlistenImageChange(listener, thisArg);
if (imageState == ol.style.ImageState.LOADED) { if (imageState == ol.style.ImageState.LOADED) {
ol.renderer.vector.renderFeature_( ol.renderer.vector.renderFeature_(
replayGroup, feature, style, squaredTolerance, data); replayGroup, feature, style, squaredTolerance);
} }
} else { } else {
if (imageState == ol.style.ImageState.IDLE) { if (imageState == ol.style.ImageState.IDLE) {
@@ -120,11 +119,10 @@ ol.renderer.vector.renderFeature = function(
* @param {ol.Feature} feature Feature. * @param {ol.Feature} feature Feature.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {number} squaredTolerance Squared tolerance. * @param {number} squaredTolerance Squared tolerance.
* @param {Object} data Opaque data object.
* @private * @private
*/ */
ol.renderer.vector.renderFeature_ = function( ol.renderer.vector.renderFeature_ = function(
replayGroup, feature, style, squaredTolerance, data) { replayGroup, feature, style, squaredTolerance) {
var geometry = feature.getGeometry(); var geometry = feature.getGeometry();
if (!goog.isDefAndNotNull(geometry)) { if (!goog.isDefAndNotNull(geometry)) {
return; return;
@@ -133,7 +131,7 @@ ol.renderer.vector.renderFeature_ = function(
var geometryRenderer = var geometryRenderer =
ol.renderer.vector.GEOMETRY_RENDERERS_[simplifiedGeometry.getType()]; ol.renderer.vector.GEOMETRY_RENDERERS_[simplifiedGeometry.getType()];
goog.asserts.assert(goog.isDef(geometryRenderer)); goog.asserts.assert(goog.isDef(geometryRenderer));
geometryRenderer(replayGroup, simplifiedGeometry, style, data); geometryRenderer(replayGroup, simplifiedGeometry, style, feature);
}; };
@@ -141,11 +139,11 @@ ol.renderer.vector.renderFeature_ = function(
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderGeometryCollectionGeometry_ = ol.renderer.vector.renderGeometryCollectionGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection); goog.asserts.assertInstanceof(geometry, ol.geom.GeometryCollection);
var geometries = geometry.getGeometriesArray(); var geometries = geometry.getGeometriesArray();
var i, ii; var i, ii;
@@ -153,7 +151,7 @@ ol.renderer.vector.renderGeometryCollectionGeometry_ =
var geometryRenderer = var geometryRenderer =
ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()]; ol.renderer.vector.GEOMETRY_RENDERERS_[geometries[i].getType()];
goog.asserts.assert(goog.isDef(geometryRenderer)); goog.asserts.assert(goog.isDef(geometryRenderer));
geometryRenderer(replayGroup, geometries[i], style, data); geometryRenderer(replayGroup, geometries[i], style, feature);
} }
}; };
@@ -162,25 +160,25 @@ ol.renderer.vector.renderGeometryCollectionGeometry_ =
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderLineStringGeometry_ = ol.renderer.vector.renderLineStringGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.LineString); goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
var strokeStyle = style.getStroke(); var strokeStyle = style.getStroke();
if (!goog.isNull(strokeStyle)) { if (!goog.isNull(strokeStyle)) {
var lineStringReplay = replayGroup.getReplay( var lineStringReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.LINE_STRING); style.getZIndex(), ol.render.ReplayType.LINE_STRING);
lineStringReplay.setFillStrokeStyle(null, strokeStyle); lineStringReplay.setFillStrokeStyle(null, strokeStyle);
lineStringReplay.drawLineStringGeometry(geometry, data); lineStringReplay.drawLineStringGeometry(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(textStyle)) { if (!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay( var textReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.TEXT); style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle); textReplay.setTextStyle(textStyle);
textReplay.drawText(geometry.getFlatMidpoint(), 0, 2, 2, geometry, data); textReplay.drawText(geometry.getFlatMidpoint(), 0, 2, 2, geometry, feature);
} }
}; };
@@ -189,18 +187,18 @@ ol.renderer.vector.renderLineStringGeometry_ =
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderMultiLineStringGeometry_ = ol.renderer.vector.renderMultiLineStringGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString); goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString);
var strokeStyle = style.getStroke(); var strokeStyle = style.getStroke();
if (!goog.isNull(strokeStyle)) { if (!goog.isNull(strokeStyle)) {
var lineStringReplay = replayGroup.getReplay( var lineStringReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.LINE_STRING); style.getZIndex(), ol.render.ReplayType.LINE_STRING);
lineStringReplay.setFillStrokeStyle(null, strokeStyle); lineStringReplay.setFillStrokeStyle(null, strokeStyle);
lineStringReplay.drawMultiLineStringGeometry(geometry, data); lineStringReplay.drawMultiLineStringGeometry(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(textStyle)) { if (!goog.isNull(textStyle)) {
@@ -209,7 +207,7 @@ ol.renderer.vector.renderMultiLineStringGeometry_ =
textReplay.setTextStyle(textStyle); textReplay.setTextStyle(textStyle);
var flatMidpointCoordinates = geometry.getFlatMidpoints(); var flatMidpointCoordinates = geometry.getFlatMidpoints();
textReplay.drawText(flatMidpointCoordinates, 0, textReplay.drawText(flatMidpointCoordinates, 0,
flatMidpointCoordinates.length, 2, geometry, data); flatMidpointCoordinates.length, 2, geometry, feature);
} }
}; };
@@ -218,11 +216,11 @@ ol.renderer.vector.renderMultiLineStringGeometry_ =
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderMultiPolygonGeometry_ = ol.renderer.vector.renderMultiPolygonGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon); goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon);
var fillStyle = style.getFill(); var fillStyle = style.getFill();
var strokeStyle = style.getStroke(); var strokeStyle = style.getStroke();
@@ -230,7 +228,7 @@ ol.renderer.vector.renderMultiPolygonGeometry_ =
var polygonReplay = replayGroup.getReplay( var polygonReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawMultiPolygonGeometry(geometry, data); polygonReplay.drawMultiPolygonGeometry(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(textStyle)) { if (!goog.isNull(textStyle)) {
@@ -239,7 +237,7 @@ ol.renderer.vector.renderMultiPolygonGeometry_ =
textReplay.setTextStyle(textStyle); textReplay.setTextStyle(textStyle);
var flatInteriorPointCoordinates = geometry.getFlatInteriorPoints(); var flatInteriorPointCoordinates = geometry.getFlatInteriorPoints();
textReplay.drawText(flatInteriorPointCoordinates, 0, textReplay.drawText(flatInteriorPointCoordinates, 0,
flatInteriorPointCoordinates.length, 2, geometry, data); flatInteriorPointCoordinates.length, 2, geometry, feature);
} }
}; };
@@ -248,25 +246,25 @@ ol.renderer.vector.renderMultiPolygonGeometry_ =
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderPointGeometry_ = ol.renderer.vector.renderPointGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.Point); goog.asserts.assertInstanceof(geometry, ol.geom.Point);
var imageStyle = style.getImage(); var imageStyle = style.getImage();
if (!goog.isNull(imageStyle)) { if (!goog.isNull(imageStyle)) {
var imageReplay = replayGroup.getReplay( var imageReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.IMAGE); style.getZIndex(), ol.render.ReplayType.IMAGE);
imageReplay.setImageStyle(imageStyle); imageReplay.setImageStyle(imageStyle);
imageReplay.drawPointGeometry(geometry, data); imageReplay.drawPointGeometry(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(textStyle)) { if (!goog.isNull(textStyle)) {
var textReplay = replayGroup.getReplay( var textReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.TEXT); style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle); textReplay.setTextStyle(textStyle);
textReplay.drawText(geometry.getCoordinates(), 0, 2, 2, geometry, data); textReplay.drawText(geometry.getCoordinates(), 0, 2, 2, geometry, feature);
} }
}; };
@@ -275,18 +273,18 @@ ol.renderer.vector.renderPointGeometry_ =
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderMultiPointGeometry_ = ol.renderer.vector.renderMultiPointGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint); goog.asserts.assertInstanceof(geometry, ol.geom.MultiPoint);
var imageStyle = style.getImage(); var imageStyle = style.getImage();
if (!goog.isNull(imageStyle)) { if (!goog.isNull(imageStyle)) {
var imageReplay = replayGroup.getReplay( var imageReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.IMAGE); style.getZIndex(), ol.render.ReplayType.IMAGE);
imageReplay.setImageStyle(imageStyle); imageReplay.setImageStyle(imageStyle);
imageReplay.drawMultiPointGeometry(geometry, data); imageReplay.drawMultiPointGeometry(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(textStyle)) { if (!goog.isNull(textStyle)) {
@@ -295,7 +293,7 @@ ol.renderer.vector.renderMultiPointGeometry_ =
textReplay.setTextStyle(textStyle); textReplay.setTextStyle(textStyle);
var flatCoordinates = geometry.getFlatCoordinates(); var flatCoordinates = geometry.getFlatCoordinates();
textReplay.drawText(flatCoordinates, 0, flatCoordinates.length, textReplay.drawText(flatCoordinates, 0, flatCoordinates.length,
geometry.getStride(), geometry, data); geometry.getStride(), geometry, feature);
} }
}; };
@@ -304,11 +302,11 @@ ol.renderer.vector.renderMultiPointGeometry_ =
* @param {ol.render.IReplayGroup} replayGroup Replay group. * @param {ol.render.IReplayGroup} replayGroup Replay group.
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.geom.Geometry} geometry Geometry.
* @param {ol.style.Style} style Style. * @param {ol.style.Style} style Style.
* @param {Object} data Opaque data object. * @param {ol.Feature} feature Feature.
* @private * @private
*/ */
ol.renderer.vector.renderPolygonGeometry_ = ol.renderer.vector.renderPolygonGeometry_ =
function(replayGroup, geometry, style, data) { function(replayGroup, geometry, style, feature) {
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon); goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
var fillStyle = style.getFill(); var fillStyle = style.getFill();
var strokeStyle = style.getStroke(); var strokeStyle = style.getStroke();
@@ -316,7 +314,7 @@ ol.renderer.vector.renderPolygonGeometry_ =
var polygonReplay = replayGroup.getReplay( var polygonReplay = replayGroup.getReplay(
style.getZIndex(), ol.render.ReplayType.POLYGON); style.getZIndex(), ol.render.ReplayType.POLYGON);
polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle);
polygonReplay.drawPolygonGeometry(geometry, data); polygonReplay.drawPolygonGeometry(geometry, feature);
} }
var textStyle = style.getText(); var textStyle = style.getText();
if (!goog.isNull(textStyle)) { if (!goog.isNull(textStyle)) {
@@ -324,7 +322,7 @@ ol.renderer.vector.renderPolygonGeometry_ =
style.getZIndex(), ol.render.ReplayType.TEXT); style.getZIndex(), ol.render.ReplayType.TEXT);
textReplay.setTextStyle(textStyle); textReplay.setTextStyle(textStyle);
textReplay.drawText( textReplay.drawText(
geometry.getFlatInteriorPoint(), 0, 2, 2, geometry, data); geometry.getFlatInteriorPoint(), 0, 2, 2, geometry, feature);
} }
}; };
+2 -2
View File
@@ -382,7 +382,7 @@ ol.render.webgl.ImageReplay.prototype.drawMultiLineStringGeometry =
* @inheritDoc * @inheritDoc
*/ */
ol.render.webgl.ImageReplay.prototype.drawMultiPointGeometry = ol.render.webgl.ImageReplay.prototype.drawMultiPointGeometry =
function(multiPointGeometry, data) { function(multiPointGeometry, feature) {
ol.extent.extend(this.extent_, multiPointGeometry.getExtent()); ol.extent.extend(this.extent_, multiPointGeometry.getExtent());
var flatCoordinates = multiPointGeometry.getFlatCoordinates(); var flatCoordinates = multiPointGeometry.getFlatCoordinates();
var stride = multiPointGeometry.getStride(); var stride = multiPointGeometry.getStride();
@@ -402,7 +402,7 @@ ol.render.webgl.ImageReplay.prototype.drawMultiPolygonGeometry =
* @inheritDoc * @inheritDoc
*/ */
ol.render.webgl.ImageReplay.prototype.drawPointGeometry = ol.render.webgl.ImageReplay.prototype.drawPointGeometry =
function(pointGeometry, data) { function(pointGeometry, feature) {
ol.extent.extend(this.extent_, pointGeometry.getExtent()); ol.extent.extend(this.extent_, pointGeometry.getExtent());
var flatCoordinates = pointGeometry.getFlatCoordinates(); var flatCoordinates = pointGeometry.getFlatCoordinates();
var stride = pointGeometry.getStride(); var stride = pointGeometry.getStride();
@@ -130,12 +130,10 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel =
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, return this.replayGroup_.forEachGeometryAtPixel(extent, resolution,
rotation, coordinate, frameState.skippedFeatureUids, rotation, coordinate, frameState.skippedFeatureUids,
/** /**
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.Feature} feature Feature.
* @param {Object} data Data.
* @return {?} Callback result. * @return {?} Callback result.
*/ */
function(geometry, data) { function(feature) {
var feature = /** @type {ol.Feature} */ (data);
goog.asserts.assert(goog.isDef(feature)); goog.asserts.assert(goog.isDef(feature));
var key = goog.getUid(feature).toString(); var key = goog.getUid(feature).toString();
if (!(key in features)) { if (!(key in features)) {
@@ -278,7 +276,7 @@ ol.renderer.canvas.VectorLayer.prototype.renderFeature =
loading = ol.renderer.vector.renderFeature( loading = ol.renderer.vector.renderFeature(
replayGroup, feature, styles[i], replayGroup, feature, styles[i],
ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio), ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
feature, this.handleImageChange_, this) || loading; this.handleImageChange_, this) || loading;
} }
return loading; return loading;
}; };
@@ -171,12 +171,10 @@ ol.renderer.dom.VectorLayer.prototype.forEachFeatureAtPixel =
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution, return this.replayGroup_.forEachGeometryAtPixel(extent, resolution,
rotation, coordinate, frameState.skippedFeatureUids, rotation, coordinate, frameState.skippedFeatureUids,
/** /**
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.Feature} feature Feature.
* @param {Object} data Data.
* @return {?} Callback result. * @return {?} Callback result.
*/ */
function(geometry, data) { function(feature) {
var feature = /** @type {ol.Feature} */ (data);
goog.asserts.assert(goog.isDef(feature)); goog.asserts.assert(goog.isDef(feature));
var key = goog.getUid(feature).toString(); var key = goog.getUid(feature).toString();
if (!(key in features)) { if (!(key in features)) {
@@ -319,7 +317,7 @@ ol.renderer.dom.VectorLayer.prototype.renderFeature =
loading = ol.renderer.vector.renderFeature( loading = ol.renderer.vector.renderFeature(
replayGroup, feature, styles[i], replayGroup, feature, styles[i],
ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio), ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
feature, this.handleImageChange_, this) || loading; this.handleImageChange_, this) || loading;
} }
return loading; return loading;
}; };
+2 -4
View File
@@ -135,12 +135,10 @@ ol.renderer.Map.prototype.forEachFeatureAtPixel =
result = this.replayGroup.forEachGeometryAtPixel(extent, viewResolution, result = this.replayGroup.forEachGeometryAtPixel(extent, viewResolution,
viewRotation, coordinate, {}, viewRotation, coordinate, {},
/** /**
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.Feature} feature Feature.
* @param {Object} data Data.
* @return {?} Callback result. * @return {?} Callback result.
*/ */
function(geometry, data) { function(feature) {
var feature = /** @type {ol.Feature} */ (data);
goog.asserts.assert(goog.isDef(feature)); goog.asserts.assert(goog.isDef(feature));
var key = goog.getUid(feature).toString(); var key = goog.getUid(feature).toString();
if (!(key in features)) { if (!(key in features)) {
@@ -234,7 +234,7 @@ ol.renderer.webgl.VectorLayer.prototype.renderFeature =
loading = ol.renderer.vector.renderFeature( loading = ol.renderer.vector.renderFeature(
replayGroup, feature, styles[i], replayGroup, feature, styles[i],
ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio), ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
feature, this.handleImageChange_, this) || loading; this.handleImageChange_, this) || loading;
} }
return loading; return loading;
}; };
+3 -5
View File
@@ -163,12 +163,10 @@ ol.source.ImageVector.prototype.forEachFeatureAtPixel = function(
return this.replayGroup_.forEachGeometryAtPixel( return this.replayGroup_.forEachGeometryAtPixel(
extent, resolution, 0, coordinate, skippedFeatureUids, extent, resolution, 0, coordinate, skippedFeatureUids,
/** /**
* @param {ol.geom.Geometry} geometry Geometry. * @param {ol.Feature} feature Feature.
* @param {Object} data Data.
* @return {?} Callback result. * @return {?} Callback result.
*/ */
function(geometry, data) { function(feature) {
var feature = /** @type {ol.Feature} */ (data);
goog.asserts.assert(goog.isDef(feature)); goog.asserts.assert(goog.isDef(feature));
var key = goog.getUid(feature).toString(); var key = goog.getUid(feature).toString();
if (!(key in features)) { if (!(key in features)) {
@@ -274,7 +272,7 @@ ol.source.ImageVector.prototype.renderFeature_ =
loading = ol.renderer.vector.renderFeature( loading = ol.renderer.vector.renderFeature(
replayGroup, feature, styles[i], replayGroup, feature, styles[i],
ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio), ol.renderer.vector.getSquaredTolerance(resolution, pixelRatio),
feature, this.handleImageChange_, this) || loading; this.handleImageChange_, this) || loading;
} }
return loading; return loading;
}; };
+2 -2
View File
@@ -33,7 +33,7 @@ describe('ol.renderer.vector', function() {
// call #1 // call #1
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, 1, feature, listener, listenerThis); style, 1, listener, listenerThis);
expect(iconStyleLoadSpy.calledOnce).to.be.ok(); expect(iconStyleLoadSpy.calledOnce).to.be.ok();
listeners = goog.events.getListeners( listeners = goog.events.getListeners(
@@ -42,7 +42,7 @@ describe('ol.renderer.vector', function() {
// call #2 // call #2
ol.renderer.vector.renderFeature(replayGroup, feature, ol.renderer.vector.renderFeature(replayGroup, feature,
style, 1, feature, listener, listenerThis); style, 1, listener, listenerThis);
expect(iconStyleLoadSpy.calledOnce).to.be.ok(); expect(iconStyleLoadSpy.calledOnce).to.be.ok();
listeners = goog.events.getListeners( listeners = goog.events.getListeners(