Merge pull request #7559 from ahocevar/unskip-image-features
Handle skipping and unskipping features with renderMode: 'image'
This commit is contained in:
+1
-1
@@ -8525,7 +8525,7 @@ olx.view.FitOptions.prototype.callback;
|
|||||||
* pixelToCoordinateTransform: ol.Transform,
|
* pixelToCoordinateTransform: ol.Transform,
|
||||||
* postRenderFunctions: Array.<ol.PostRenderFunction>,
|
* postRenderFunctions: Array.<ol.PostRenderFunction>,
|
||||||
* size: ol.Size,
|
* size: ol.Size,
|
||||||
* skippedFeatureUids: Object.<string, boolean>,
|
* skippedFeatureUids: !Object.<string, boolean>,
|
||||||
* tileQueue: ol.TileQueue,
|
* tileQueue: ol.TileQueue,
|
||||||
* time: number,
|
* time: number,
|
||||||
* usedTiles: Object.<string, Object.<string, ol.TileRange>>,
|
* usedTiles: Object.<string, Object.<string, ol.TileRange>>,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ goog.require('ol');
|
|||||||
goog.require('ol.ImageCanvas');
|
goog.require('ol.ImageCanvas');
|
||||||
goog.require('ol.LayerType');
|
goog.require('ol.LayerType');
|
||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
|
goog.require('ol.array');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.VectorRenderType');
|
goog.require('ol.layer.VectorRenderType');
|
||||||
goog.require('ol.obj');
|
goog.require('ol.obj');
|
||||||
@@ -35,6 +36,11 @@ ol.renderer.canvas.ImageLayer = function(imageLayer) {
|
|||||||
*/
|
*/
|
||||||
this.imageTransform_ = ol.transform.create();
|
this.imageTransform_ = ol.transform.create();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {!Array.<string>}
|
||||||
|
*/
|
||||||
|
this.skippedFeatures_ = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {ol.renderer.canvas.VectorLayer}
|
* @type {ol.renderer.canvas.VectorLayer}
|
||||||
@@ -139,11 +145,15 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, laye
|
|||||||
rotation: 0
|
rotation: 0
|
||||||
}))
|
}))
|
||||||
}));
|
}));
|
||||||
if (vectorRenderer.prepareFrame(imageFrameState, layerState) && vectorRenderer.replayGroupChanged) {
|
var skippedFeatures = Object.keys(imageFrameState.skippedFeatureUids).sort();
|
||||||
|
if (vectorRenderer.prepareFrame(imageFrameState, layerState) &&
|
||||||
|
(vectorRenderer.replayGroupChanged ||
|
||||||
|
!ol.array.equals(skippedFeatures, this.skippedFeatures_))) {
|
||||||
context.canvas.width = imageFrameState.size[0] * pixelRatio;
|
context.canvas.width = imageFrameState.size[0] * pixelRatio;
|
||||||
context.canvas.height = imageFrameState.size[1] * pixelRatio;
|
context.canvas.height = imageFrameState.size[1] * pixelRatio;
|
||||||
vectorRenderer.composeFrame(imageFrameState, layerState, context);
|
vectorRenderer.composeFrame(imageFrameState, layerState, context);
|
||||||
this.image_ = new ol.ImageCanvas(renderedExtent, viewResolution, pixelRatio, context.canvas);
|
this.image_ = new ol.ImageCanvas(renderedExtent, viewResolution, pixelRatio, context.canvas);
|
||||||
|
this.skippedFeatures_ = skippedFeatures;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
image = imageSource.getImage(
|
image = imageSource.getImage(
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
@@ -248,6 +248,32 @@ describe('ol.rendering.layer.Vector', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('unskips features correctly with renderMode: \'image\'', function(done) {
|
||||||
|
createMap('canvas');
|
||||||
|
addCircle(500);
|
||||||
|
addPolygon(300);
|
||||||
|
map.skipFeature(source.getFeatures()[1]);
|
||||||
|
map.addLayer(new ol.layer.Vector({
|
||||||
|
renderMode: 'image',
|
||||||
|
source: source,
|
||||||
|
style: new ol.style.Style({
|
||||||
|
fill: new ol.style.Fill({
|
||||||
|
color: 'rgba(255,0,0,0.5)'
|
||||||
|
}),
|
||||||
|
stroke: new ol.style.Stroke({
|
||||||
|
width: 2,
|
||||||
|
color: 'black'
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
map.renderSync();
|
||||||
|
map.unskipFeature(source.getFeatures()[1]);
|
||||||
|
map.once('postrender', function() {
|
||||||
|
expectResemble(map, 'rendering/ol/layer/expected/vector.png',
|
||||||
|
IMAGE_TOLERANCE, done);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('renders fill/stroke batches correctly with the canvas renderer', function(done) {
|
it('renders fill/stroke batches correctly with the canvas renderer', function(done) {
|
||||||
createMap('canvas');
|
createMap('canvas');
|
||||||
source = new ol.source.Vector({
|
source = new ol.source.Vector({
|
||||||
|
|||||||
Reference in New Issue
Block a user