diff --git a/src/ol/VectorTile.js b/src/ol/VectorTile.js index 3a59e2fce4..c4ba60e768 100644 --- a/src/ol/VectorTile.js +++ b/src/ol/VectorTile.js @@ -65,7 +65,7 @@ class VectorTile extends Tile { /** * @private - * @type {Object} + * @type {Object} */ this.replayGroups_ = {}; @@ -142,7 +142,7 @@ class VectorTile extends Tile { /** * @param {import("./layer/Layer.js").default} layer Layer. * @param {string} key Key. - * @return {import("./render/ReplayGroup.js").default} Replay group. + * @return {import("./render/BuilderGroup.js").default} Replay group. */ getReplayGroup(layer, key) { return this.replayGroups_[getUid(layer) + ',' + key]; @@ -153,7 +153,7 @@ class VectorTile extends Tile { * @param {import("./layer/Layer").default} layer Layer. * @param {number} zoom Zoom. * @param {import("./extent").Extent} extent Extent. - * @return {import("./render/ReplayGroup.js").default} Replay groups. + * @return {import("./render/BuilderGroup.js").default} Replay groups. */ getLowResReplayGroup(layer, zoom, extent) { const layerId = getUid(layer); @@ -244,7 +244,7 @@ class VectorTile extends Tile { /** * @param {import("./layer/Layer.js").default} layer Layer. * @param {string} key Key. - * @param {import("./render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("./render/BuilderGroup.js").default} replayGroup Replay group. */ setReplayGroup(layer, key, replayGroup) { this.replayGroups_[getUid(layer) + ',' + key] = replayGroup; diff --git a/src/ol/render/BuilderGroup.js b/src/ol/render/BuilderGroup.js new file mode 100644 index 0000000000..6809455f30 --- /dev/null +++ b/src/ol/render/BuilderGroup.js @@ -0,0 +1,38 @@ +/** + * @module ol/render/BuilderGroup + */ +import {abstract} from '../util.js'; + +/** + * Base class for builder groups. + */ +class BuilderGroup { + /** + * @abstract + * @param {number|undefined} zIndex Z index. + * @param {import("./ReplayType.js").default} replayType Replay type. + * @return {import("./VectorContext.js").default} Replay. + */ + getBuilder(zIndex, replayType) { + return abstract(); + } + + /** + * @abstract + * @return {boolean} Is empty. + */ + isEmpty() { + return abstract(); + } + + /** + * @abstract + * @param {boolean} group Group with previous builder + * @return {Array<*>} The resulting instruction group + */ + addDeclutter(group) { + return abstract(); + } +} + +export default BuilderGroup; diff --git a/src/ol/render/ReplayGroup.js b/src/ol/render/ExecutorGroup.js similarity index 83% rename from src/ol/render/ReplayGroup.js rename to src/ol/render/ExecutorGroup.js index 0cf176a3f5..af533b65a1 100644 --- a/src/ol/render/ReplayGroup.js +++ b/src/ol/render/ExecutorGroup.js @@ -1,19 +1,19 @@ /** - * @module ol/render/ReplayGroup + * @module ol/render/ExecutorGroup */ import {abstract} from '../util.js'; /** * Base class for replay groups. */ -class ReplayGroup { +class ExecutorGroup { /** * @abstract * @param {number|undefined} zIndex Z index. * @param {import("./ReplayType.js").default} replayType Replay type. * @return {import("./VectorContext.js").default} Replay. */ - getReplay(zIndex, replayType) { + getExecutor(zIndex, replayType) { return abstract(); } @@ -35,4 +35,4 @@ class ReplayGroup { } } -export default ReplayGroup; +export default ExecutorGroup; diff --git a/src/ol/render/canvas/ImageBuilder.js b/src/ol/render/canvas/ImageBuilder.js index 72c1add279..12725d8338 100644 --- a/src/ol/render/canvas/ImageBuilder.js +++ b/src/ol/render/canvas/ImageBuilder.js @@ -10,7 +10,7 @@ class CanvasImageBuilder extends CanvasInstructionsBuilder { * @param {import("../../extent.js").Extent} maxExtent Maximum extent. * @param {number} resolution Resolution. * @param {number} pixelRatio Pixel ratio. - * @param {boolean} overlaps The replay can have overlapping geometries. + * @param {boolean} overlaps The builder can have overlapping geometries. * @param {?} declutterTree Declutter tree. */ constructor(tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) { diff --git a/src/ol/render/canvas/InstructionsBuilder.js b/src/ol/render/canvas/InstructionsBuilder.js index 85c04e4b43..303392b5e2 100644 --- a/src/ol/render/canvas/InstructionsBuilder.js +++ b/src/ol/render/canvas/InstructionsBuilder.js @@ -36,7 +36,7 @@ class CanvasInstructionsBuilder extends VectorContext { * @param {import("../../extent.js").Extent} maxExtent Maximum extent. * @param {number} resolution Resolution. * @param {number} pixelRatio Pixel ratio. - * @param {boolean} overlaps The replay can have overlapping geometries. + * @param {boolean} overlaps The builder can have overlapping geometries. * @param {?} declutterTree Declutter tree. */ constructor(tolerance, maxExtent, resolution, pixelRatio, overlaps, declutterTree) { @@ -230,14 +230,14 @@ class CanvasInstructionsBuilder extends VectorContext { * @param {number} offset Offset. * @param {Array} ends Ends. * @param {number} stride Stride. - * @param {Array} replayEnds Replay ends. + * @param {Array} builderEnds Builder ends. * @return {number} Offset. */ - drawCustomCoordinates_(flatCoordinates, offset, ends, stride, replayEnds) { + drawCustomCoordinates_(flatCoordinates, offset, ends, stride, builderEnds) { for (let i = 0, ii = ends.length; i < ii; ++i) { const end = ends[i]; - const replayEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false, false); - replayEnds.push(replayEnd); + const builderEnd = this.appendFlatCoordinates(flatCoordinates, offset, end, stride, false, false); + builderEnds.push(builderEnd); offset = end; } return offset; @@ -250,44 +250,44 @@ class CanvasInstructionsBuilder extends VectorContext { this.beginGeometry(geometry, feature); const type = geometry.getType(); const stride = geometry.getStride(); - const replayBegin = this.coordinates.length; - let flatCoordinates, replayEnd, replayEnds, replayEndss; + const builderBegin = this.coordinates.length; + let flatCoordinates, builderEnd, builderEnds, builderEndss; let offset; if (type == GeometryType.MULTI_POLYGON) { geometry = /** @type {import("../../geom/MultiPolygon.js").default} */ (geometry); flatCoordinates = geometry.getOrientedFlatCoordinates(); - replayEndss = []; + builderEndss = []; const endss = geometry.getEndss(); offset = 0; for (let i = 0, ii = endss.length; i < ii; ++i) { const myEnds = []; offset = this.drawCustomCoordinates_(flatCoordinates, offset, endss[i], stride, myEnds); - replayEndss.push(myEnds); + builderEndss.push(myEnds); } this.instructions.push([CanvasInstruction.CUSTOM, - replayBegin, replayEndss, geometry, renderer, inflateMultiCoordinatesArray]); + builderBegin, builderEndss, geometry, renderer, inflateMultiCoordinatesArray]); } else if (type == GeometryType.POLYGON || type == GeometryType.MULTI_LINE_STRING) { - replayEnds = []; + builderEnds = []; flatCoordinates = (type == GeometryType.POLYGON) ? /** @type {import("../../geom/Polygon.js").default} */ (geometry).getOrientedFlatCoordinates() : geometry.getFlatCoordinates(); offset = this.drawCustomCoordinates_(flatCoordinates, 0, /** @type {import("../../geom/Polygon.js").default|import("../../geom/MultiLineString.js").default} */ (geometry).getEnds(), - stride, replayEnds); + stride, builderEnds); this.instructions.push([CanvasInstruction.CUSTOM, - replayBegin, replayEnds, geometry, renderer, inflateCoordinatesArray]); + builderBegin, builderEnds, geometry, renderer, inflateCoordinatesArray]); } else if (type == GeometryType.LINE_STRING || type == GeometryType.MULTI_POINT) { flatCoordinates = geometry.getFlatCoordinates(); - replayEnd = this.appendFlatCoordinates( + builderEnd = this.appendFlatCoordinates( flatCoordinates, 0, flatCoordinates.length, stride, false, false); this.instructions.push([CanvasInstruction.CUSTOM, - replayBegin, replayEnd, geometry, renderer, inflateCoordinates]); + builderBegin, builderEnd, geometry, renderer, inflateCoordinates]); } else if (type == GeometryType.POINT) { flatCoordinates = geometry.getFlatCoordinates(); this.coordinates.push(flatCoordinates[0], flatCoordinates[1]); - replayEnd = this.coordinates.length; + builderEnd = this.coordinates.length; this.instructions.push([CanvasInstruction.CUSTOM, - replayBegin, replayEnd, geometry, renderer]); + builderBegin, builderEnd, geometry, renderer]); } this.endGeometry(geometry, feature); } diff --git a/src/ol/render/canvas/InstructionsExecutor.js b/src/ol/render/canvas/InstructionsExecutor.js index 4854d32db4..ede2f436db 100644 --- a/src/ol/render/canvas/InstructionsExecutor.js +++ b/src/ol/render/canvas/InstructionsExecutor.js @@ -547,7 +547,7 @@ class CanvasInstructionsExecutor { * @return {T|undefined} Callback result. * @template T */ - replay_( + execute_( context, transform, skippedFeaturesHash, @@ -909,9 +909,9 @@ class CanvasInstructionsExecutor { * to skip. * @param {boolean} snapToPixel Snap point symbols and text to integer pixels. */ - replay(context, transform, viewRotation, skippedFeaturesHash, snapToPixel) { + execute(context, transform, viewRotation, skippedFeaturesHash, snapToPixel) { this.viewRotation_ = viewRotation; - this.replay_(context, transform, + this.execute_(context, transform, skippedFeaturesHash, this.instructions, snapToPixel, undefined, undefined); } @@ -928,7 +928,7 @@ class CanvasInstructionsExecutor { * @return {T|undefined} Callback result. * @template T */ - replayHitDetection( + executeHitDetection( context, transform, viewRotation, @@ -937,7 +937,7 @@ class CanvasInstructionsExecutor { opt_hitExtent ) { this.viewRotation_ = viewRotation; - return this.replay_(context, transform, skippedFeaturesHash, + return this.execute_(context, transform, skippedFeaturesHash, this.hitDetectionInstructions, true, opt_featureCallback, opt_hitExtent); } diff --git a/src/ol/render/canvas/InstructionsGroupBuilder.js b/src/ol/render/canvas/InstructionsGroupBuilder.js index 4fee44defc..91d0649428 100644 --- a/src/ol/render/canvas/InstructionsGroupBuilder.js +++ b/src/ol/render/canvas/InstructionsGroupBuilder.js @@ -7,7 +7,7 @@ import {createCanvasContext2D} from '../../dom.js'; import {buffer, createEmpty, extendCoordinate} from '../../extent.js'; import {transform2D} from '../../geom/flat/transform.js'; import {isEmpty} from '../../obj.js'; -import ReplayGroup from '../ReplayGroup.js'; +import BuilderGroup from '../BuilderGroup.js'; import ReplayType from '../ReplayType.js'; import CanvasInstructionsBuilder from './InstructionsBuilder.js'; import CanvasImageBuilder from './ImageBuilder.js'; @@ -31,13 +31,13 @@ const BATCH_CONSTRUCTORS = { }; -class CanvasInstructionsGroupBuilder extends ReplayGroup { +class CanvasBuilderGroup extends BuilderGroup { /** * @param {number} tolerance Tolerance. * @param {import("../../extent.js").Extent} maxExtent Max extent. * @param {number} resolution Resolution. * @param {number} pixelRatio Pixel ratio. - * @param {boolean} overlaps The replay group can have overlapping geometries. + * @param {boolean} overlaps The builder group can have overlapping geometries. * @param {?} declutterTree Declutter tree for declutter processing in postrender. * @param {number=} opt_renderBuffer Optional rendering buffer. */ @@ -104,7 +104,7 @@ class CanvasInstructionsGroupBuilder extends ReplayGroup { * @private * @type {!Object>} */ - this.replaysByZIndex_ = {}; + this.buildersByZIndex_ = {}; /** * @private @@ -150,31 +150,16 @@ class CanvasInstructionsGroupBuilder extends ReplayGroup { context.clip(); } - /** - * Recreate replays and populate them using the provided instructions. - * @param {!Object>} allInstructions The serializable instructions - */ - replaceInstructions(allInstructions) { - this.replaysByZIndex_ = {}; - for (const zIndex in allInstructions) { - const instructionByZindex = allInstructions[zIndex]; - for (const replayType in instructionByZindex) { - const instructions = instructionByZindex[replayType]; - const replay = this.getReplay(zIndex, replayType); - replay.replaceInstructions(instructions); - } - } - } /** - * @param {Array} replays Replays. - * @return {boolean} Has replays of the provided types. + * @param {Array} builders Builders. + * @return {boolean} Has builders of the provided types. */ - hasReplays(replays) { - for (const zIndex in this.replaysByZIndex_) { - const candidates = this.replaysByZIndex_[zIndex]; - for (let i = 0, ii = replays.length; i < ii; ++i) { - if (replays[i] in candidates) { + hasBuilders(builders) { + for (const zIndex in this.buildersByZIndex_) { + const candidates = this.buildersByZIndex_[zIndex]; + for (let i = 0, ii = builders.length; i < ii; ++i) { + if (builders[i] in candidates) { return true; } } @@ -186,16 +171,16 @@ class CanvasInstructionsGroupBuilder extends ReplayGroup { * @return {!Object>} The serializable instructions */ finish() { - const replaysInstructions = {}; - for (const zKey in this.replaysByZIndex_) { - replaysInstructions[zKey] = replaysInstructions[zKey] || {}; - const replays = this.replaysByZIndex_[zKey]; - for (const replayKey in replays) { - const replayInstructions = replays[replayKey].finish(); - replaysInstructions[zKey][replayKey] = replayInstructions; + const builderInstructions = {}; + for (const zKey in this.buildersByZIndex_) { + builderInstructions[zKey] = builderInstructions[zKey] || {}; + const builders = this.buildersByZIndex_[zKey]; + for (const builderKey in builders) { + const builderInstruction = builders[builderKey].finish(); + builderInstructions[zKey][builderKey] = builderInstruction; } } - return replaysInstructions; + return builderInstructions; } /** @@ -283,27 +268,27 @@ class CanvasInstructionsGroupBuilder extends ReplayGroup { } /** @type {Array} */ - const zs = Object.keys(this.replaysByZIndex_).map(Number); + const zs = Object.keys(this.buildersByZIndex_).map(Number); zs.sort(numberSafeCompareFunction); - let i, j, replays, replay, result; + let i, j, builders, builder, result; for (i = zs.length - 1; i >= 0; --i) { const zIndexKey = zs[i].toString(); - replays = this.replaysByZIndex_[zIndexKey]; + builders = this.buildersByZIndex_[zIndexKey]; for (j = ORDER.length - 1; j >= 0; --j) { replayType = ORDER[j]; - replay = replays[replayType]; - if (replay !== undefined) { + builder = builders[replayType]; + if (builder !== undefined) { if (declutterReplays && (replayType == ReplayType.IMAGE || replayType == ReplayType.TEXT)) { const declutter = declutterReplays[zIndexKey]; if (!declutter) { - declutterReplays[zIndexKey] = [replay, transform.slice(0)]; + declutterReplays[zIndexKey] = [builder, transform.slice(0)]; } else { - declutter.push(replay, transform.slice(0)); + declutter.push(builder, transform.slice(0)); } } else { - result = replay.replayHitDetection(context, transform, rotation, + result = builder.executeHitDetection(context, transform, rotation, skippedFeaturesHash, featureCallback, hitExtent); if (result) { return result; @@ -341,12 +326,12 @@ class CanvasInstructionsGroupBuilder extends ReplayGroup { /** * @inheritDoc */ - getReplay(zIndex, replayType) { + getBuilder(zIndex, replayType) { const zIndexKey = zIndex !== undefined ? zIndex.toString() : '0'; - let replays = this.replaysByZIndex_[zIndexKey]; + let replays = this.buildersByZIndex_[zIndexKey]; if (replays === undefined) { replays = {}; - this.replaysByZIndex_[zIndexKey] = replays; + this.buildersByZIndex_[zIndexKey] = replays; } let replay = replays[replayType]; if (replay === undefined) { @@ -362,70 +347,14 @@ class CanvasInstructionsGroupBuilder extends ReplayGroup { * @return {Object>} Replays. */ getReplays() { - return this.replaysByZIndex_; + return this.buildersByZIndex_; } /** * @inheritDoc */ isEmpty() { - return isEmpty(this.replaysByZIndex_); - } - - /** - * @param {CanvasRenderingContext2D} context Context. - * @param {import("../../transform.js").Transform} transform Transform. - * @param {number} viewRotation View rotation. - * @param {Object} skippedFeaturesHash Ids of features to skip. - * @param {boolean} snapToPixel Snap point symbols and test to integer pixel. - * @param {Array=} opt_replayTypes Ordered replay types to replay. - * Default is {@link module:ol/render/replay~ORDER} - * @param {Object=} opt_declutterReplays Declutter replays. - */ - replay( - context, - transform, - viewRotation, - skippedFeaturesHash, - snapToPixel, - opt_replayTypes, - opt_declutterReplays - ) { - - /** @type {Array} */ - const zs = Object.keys(this.replaysByZIndex_).map(Number); - zs.sort(numberSafeCompareFunction); - - // setup clipping so that the parts of over-simplified geometries are not - // visible outside the current extent when panning - context.save(); - this.clip(context, transform); - - const replayTypes = opt_replayTypes ? opt_replayTypes : ORDER; - let i, ii, j, jj, replays, replay; - for (i = 0, ii = zs.length; i < ii; ++i) { - const zIndexKey = zs[i].toString(); - replays = this.replaysByZIndex_[zIndexKey]; - for (j = 0, jj = replayTypes.length; j < jj; ++j) { - const replayType = replayTypes[j]; - replay = replays[replayType]; - if (replay !== undefined) { - if (opt_declutterReplays && - (replayType == ReplayType.IMAGE || replayType == ReplayType.TEXT)) { - const declutter = opt_declutterReplays[zIndexKey]; - if (!declutter) { - opt_declutterReplays[zIndexKey] = [replay, transform.slice(0)]; - } else { - declutter.push(replay, transform.slice(0)); - } - } else { - replay.replay(context, transform, viewRotation, skippedFeaturesHash, snapToPixel); - } - } - } - } - - context.restore(); + return isEmpty(this.buildersByZIndex_); } } @@ -522,10 +451,10 @@ export function replayDeclutter(declutterReplays, context, rotation, snapToPixel for (let i = 0, ii = replayData.length; i < ii;) { const replay = replayData[i++]; const transform = replayData[i++]; - replay.replay(context, transform, rotation, skippedFeatureUids, snapToPixel); + replay.execute(context, transform, rotation, skippedFeatureUids, snapToPixel); } } } -export default CanvasInstructionsGroupBuilder; +export default CanvasBuilderGroup; diff --git a/src/ol/render/canvas/InstructionsGroupExecutor.js b/src/ol/render/canvas/InstructionsGroupExecutor.js index 1f9ba3ccf7..b09e3e0150 100644 --- a/src/ol/render/canvas/InstructionsGroupExecutor.js +++ b/src/ol/render/canvas/InstructionsGroupExecutor.js @@ -7,20 +7,20 @@ import {createCanvasContext2D} from '../../dom.js'; import {buffer, createEmpty, extendCoordinate} from '../../extent.js'; import {transform2D} from '../../geom/flat/transform.js'; import {isEmpty} from '../../obj.js'; -import ReplayGroup from '../ReplayGroup.js'; +import ExecutorGroup from '../ExecutorGroup.js'; import ReplayType from '../ReplayType.js'; import {ORDER} from '../replay.js'; import {create as createTransform, compose as composeTransform} from '../../transform.js'; import CanvasInstructionsExecutor from './InstructionsExecutor.js'; -class InstructionsGroupExectuor extends ReplayGroup { +class InstructionsGroupExectuor extends ExecutorGroup { /** * @param {number} tolerance Tolerance. * @param {import("../../extent.js").Extent} maxExtent Max extent. * @param {number} resolution Resolution. * @param {number} pixelRatio Pixel ratio. - * @param {boolean} overlaps The replay group can have overlapping geometries. + * @param {boolean} overlaps The executor group can have overlapping geometries. * @param {?} declutterTree Declutter tree for declutter processing in postrender. * @param {number=} opt_renderBuffer Optional rendering buffer. */ @@ -87,7 +87,7 @@ class InstructionsGroupExectuor extends ReplayGroup { * @private * @type {!Object>} */ - this.replaysByZIndex_ = {}; + this.executorsByZIndex_ = {}; /** * @private @@ -134,30 +134,30 @@ class InstructionsGroupExectuor extends ReplayGroup { } /** - * Recreate replays and populate them using the provided instructions. + * Create executors and populate them using the provided instructions. * @param {!Object>} allInstructions The serializable instructions */ replaceInstructions(allInstructions) { - this.replaysByZIndex_ = {}; + this.executorsByZIndex_ = {}; for (const zIndex in allInstructions) { const instructionByZindex = allInstructions[zIndex]; for (const replayType in instructionByZindex) { const instructions = instructionByZindex[replayType]; - const replay = this.getReplay(zIndex, replayType); - replay.replaceInstructions(instructions); + const executor = this.getExecutor(zIndex, replayType); + executor.replaceInstructions(instructions); } } } /** - * @param {Array} replays Replays. - * @return {boolean} Has replays of the provided types. + * @param {Array} executors Executors. + * @return {boolean} Has executors of the provided types. */ - hasReplays(replays) { - for (const zIndex in this.replaysByZIndex_) { - const candidates = this.replaysByZIndex_[zIndex]; - for (let i = 0, ii = replays.length; i < ii; ++i) { - if (replays[i] in candidates) { + hasExecutors(executors) { + for (const zIndex in this.executorsByZIndex_) { + const candidates = this.executorsByZIndex_[zIndex]; + for (let i = 0, ii = executors.length; i < ii; ++i) { + if (executors[i] in candidates) { return true; } } @@ -251,27 +251,27 @@ class InstructionsGroupExectuor extends ReplayGroup { } /** @type {Array} */ - const zs = Object.keys(this.replaysByZIndex_).map(Number); + const zs = Object.keys(this.executorsByZIndex_).map(Number); zs.sort(numberSafeCompareFunction); - let i, j, replays, replay, result; + let i, j, executors, executor, result; for (i = zs.length - 1; i >= 0; --i) { const zIndexKey = zs[i].toString(); - replays = this.replaysByZIndex_[zIndexKey]; + executors = this.executorsByZIndex_[zIndexKey]; for (j = ORDER.length - 1; j >= 0; --j) { replayType = ORDER[j]; - replay = replays[replayType]; - if (replay !== undefined) { + executor = executors[replayType]; + if (executor !== undefined) { if (declutterReplays && (replayType == ReplayType.IMAGE || replayType == ReplayType.TEXT)) { const declutter = declutterReplays[zIndexKey]; if (!declutter) { - declutterReplays[zIndexKey] = [replay, transform.slice(0)]; + declutterReplays[zIndexKey] = [executor, transform.slice(0)]; } else { - declutter.push(replay, transform.slice(0)); + declutter.push(executor, transform.slice(0)); } } else { - result = replay.replayHitDetection(context, transform, rotation, + result = executor.executeHitDetection(context, transform, rotation, skippedFeaturesHash, featureCallback, hitExtent); if (result) { return result; @@ -302,34 +302,34 @@ class InstructionsGroupExectuor extends ReplayGroup { /** * @inheritDoc */ - getReplay(zIndex, replayType) { + getExecutor(zIndex, replayType) { const zIndexKey = zIndex !== undefined ? zIndex.toString() : '0'; - let replays = this.replaysByZIndex_[zIndexKey]; - if (replays === undefined) { - replays = {}; - this.replaysByZIndex_[zIndexKey] = replays; + let executors = this.executorsByZIndex_[zIndexKey]; + if (executors === undefined) { + executors = {}; + this.executorsByZIndex_[zIndexKey] = executors; } - let replay = replays[replayType]; - if (replay === undefined) { - replay = new CanvasInstructionsExecutor(this.tolerance_, this.maxExtent_, + let executor = executors[replayType]; + if (executor === undefined) { + executor = new CanvasInstructionsExecutor(this.tolerance_, this.maxExtent_, this.resolution_, this.pixelRatio_, this.overlaps_, this.declutterTree_); - replays[replayType] = replay; + executors[replayType] = executor; } - return replay; + return executor; } /** * @return {Object>} Replays. */ - getReplays() { - return this.replaysByZIndex_; + getExecutors() { + return this.executorsByZIndex_; } /** * @inheritDoc */ isEmpty() { - return isEmpty(this.replaysByZIndex_); + return isEmpty(this.executorsByZIndex_); } /** @@ -353,7 +353,7 @@ class InstructionsGroupExectuor extends ReplayGroup { ) { /** @type {Array} */ - const zs = Object.keys(this.replaysByZIndex_).map(Number); + const zs = Object.keys(this.executorsByZIndex_).map(Number); zs.sort(numberSafeCompareFunction); // setup clipping so that the parts of over-simplified geometries are not @@ -365,7 +365,7 @@ class InstructionsGroupExectuor extends ReplayGroup { let i, ii, j, jj, replays, replay; for (i = 0, ii = zs.length; i < ii; ++i) { const zIndexKey = zs[i].toString(); - replays = this.replaysByZIndex_[zIndexKey]; + replays = this.executorsByZIndex_[zIndexKey]; for (j = 0, jj = replayTypes.length; j < jj; ++j) { const replayType = replayTypes[j]; replay = replays[replayType]; @@ -379,7 +379,7 @@ class InstructionsGroupExectuor extends ReplayGroup { declutter.push(replay, transform.slice(0)); } } else { - replay.replay(context, transform, viewRotation, skippedFeaturesHash, snapToPixel); + replay.execute(context, transform, viewRotation, skippedFeaturesHash, snapToPixel); } } } @@ -482,7 +482,7 @@ export function replayDeclutter(declutterReplays, context, rotation, snapToPixel for (let i = 0, ii = replayData.length; i < ii;) { const replay = replayData[i++]; const transform = replayData[i++]; - replay.replay(context, transform, rotation, skippedFeatureUids, snapToPixel); + replay.execute(context, transform, rotation, skippedFeatureUids, snapToPixel); } } } diff --git a/src/ol/render/webgl/Immediate.js b/src/ol/render/webgl/Immediate.js index 407cb843a7..ad0e77a78c 100644 --- a/src/ol/render/webgl/Immediate.js +++ b/src/ol/render/webgl/Immediate.js @@ -90,7 +90,7 @@ class WebGLImmediateRenderer extends VectorContext { drawText_(replayGroup, geometry) { const context = this.context_; const replay = /** @type {import("./TextReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.TEXT)); + replayGroup.getBuilder(0, ReplayType.TEXT)); replay.setTextStyle(this.textStyle_); replay.drawText(geometry, null); replay.finish(context); @@ -191,7 +191,7 @@ class WebGLImmediateRenderer extends VectorContext { const context = this.context_; const replayGroup = new WebGLReplayGroup(1, this.extent_); const replay = /** @type {import("./ImageReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.IMAGE)); + replayGroup.getBuilder(0, ReplayType.IMAGE)); replay.setImageStyle(this.imageStyle_); replay.drawPoint(geometry, data); replay.finish(context); @@ -218,7 +218,7 @@ class WebGLImmediateRenderer extends VectorContext { const context = this.context_; const replayGroup = new WebGLReplayGroup(1, this.extent_); const replay = /** @type {import("./ImageReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.IMAGE)); + replayGroup.getBuilder(0, ReplayType.IMAGE)); replay.setImageStyle(this.imageStyle_); replay.drawMultiPoint(geometry, data); replay.finish(context); @@ -244,7 +244,7 @@ class WebGLImmediateRenderer extends VectorContext { const context = this.context_; const replayGroup = new WebGLReplayGroup(1, this.extent_); const replay = /** @type {import("./LineStringReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.LINE_STRING)); + replayGroup.getBuilder(0, ReplayType.LINE_STRING)); replay.setFillStrokeStyle(null, this.strokeStyle_); replay.drawLineString(geometry, data); replay.finish(context); @@ -270,7 +270,7 @@ class WebGLImmediateRenderer extends VectorContext { const context = this.context_; const replayGroup = new WebGLReplayGroup(1, this.extent_); const replay = /** @type {import("./LineStringReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.LINE_STRING)); + replayGroup.getBuilder(0, ReplayType.LINE_STRING)); replay.setFillStrokeStyle(null, this.strokeStyle_); replay.drawMultiLineString(geometry, data); replay.finish(context); @@ -296,7 +296,7 @@ class WebGLImmediateRenderer extends VectorContext { const context = this.context_; const replayGroup = new WebGLReplayGroup(1, this.extent_); const replay = /** @type {import("./PolygonReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.POLYGON)); + replayGroup.getBuilder(0, ReplayType.POLYGON)); replay.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_); replay.drawPolygon(geometry, data); replay.finish(context); @@ -322,7 +322,7 @@ class WebGLImmediateRenderer extends VectorContext { const context = this.context_; const replayGroup = new WebGLReplayGroup(1, this.extent_); const replay = /** @type {import("./PolygonReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.POLYGON)); + replayGroup.getBuilder(0, ReplayType.POLYGON)); replay.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_); replay.drawMultiPolygon(geometry, data); replay.finish(context); @@ -348,7 +348,7 @@ class WebGLImmediateRenderer extends VectorContext { const context = this.context_; const replayGroup = new WebGLReplayGroup(1, this.extent_); const replay = /** @type {import("./CircleReplay.js").default} */ ( - replayGroup.getReplay(0, ReplayType.CIRCLE)); + replayGroup.getBuilder(0, ReplayType.CIRCLE)); replay.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_); replay.drawCircle(geometry, data); replay.finish(context); diff --git a/src/ol/render/webgl/ReplayGroup.js b/src/ol/render/webgl/ReplayGroup.js index 16fa92713e..207d69164e 100644 --- a/src/ol/render/webgl/ReplayGroup.js +++ b/src/ol/render/webgl/ReplayGroup.js @@ -6,7 +6,7 @@ import {numberSafeCompareFunction} from '../../array.js'; import {buffer, createOrUpdateFromCoordinate} from '../../extent.js'; import {isEmpty} from '../../obj.js'; import {ORDER} from '../replay.js'; -import ReplayGroup from '../ReplayGroup.js'; +import ReplayGroup from '../BuilderGroup.js'; import WebGLCircleReplay from './CircleReplay.js'; import WebGLImageReplay from './ImageReplay.js'; import WebGLLineStringReplay from './LineStringReplay.js'; @@ -113,7 +113,7 @@ class WebGLReplayGroup extends ReplayGroup { /** * @inheritDoc */ - getReplay(zIndex, replayType) { + getBuilder(zIndex, replayType) { const zIndexKey = zIndex !== undefined ? zIndex.toString() : '0'; let replays = this.replaysByZIndex_[zIndexKey]; if (replays === undefined) { diff --git a/src/ol/renderer/canvas/VectorLayer.js b/src/ol/renderer/canvas/VectorLayer.js index 002f07e800..6429c4b327 100644 --- a/src/ol/renderer/canvas/VectorLayer.js +++ b/src/ol/renderer/canvas/VectorLayer.js @@ -10,7 +10,7 @@ import rbush from 'rbush'; import {buffer, createEmpty, containsExtent, getWidth} from '../../extent.js'; import RenderEventType from '../../render/EventType.js'; import {labelCache, rotateAtOffset} from '../../render/canvas.js'; -import CanvasInstructionsGroupBuilder from '../../render/canvas/InstructionsGroupBuilder.js'; +import CanvasBuilderGroup from '../../render/canvas/InstructionsGroupBuilder.js'; import InstructionsGroupExecutor from '../../render/canvas/InstructionsGroupExecutor.js'; import CanvasLayerRenderer from './Layer.js'; import {defaultOrder as defaultRenderOrder, getTolerance as getRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance, renderFeature} from '../vector.js'; @@ -444,7 +444,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { this.dirty_ = false; - const replayGroup = new CanvasInstructionsGroupBuilder( + const replayGroup = new CanvasBuilderGroup( getRenderTolerance(resolution, pixelRatio), extent, resolution, pixelRatio, vectorSource.getOverlaps(), this.declutterTree_, vectorLayer.getRenderBuffer()); vectorSource.loadFeatures(extent, resolution, projection); diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index d14274912e..9d923061c3 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -13,7 +13,7 @@ import {equivalent as equivalentProjection} from '../../proj.js'; import Units from '../../proj/Units.js'; import ReplayType from '../../render/ReplayType.js'; import {labelCache, rotateAtOffset} from '../../render/canvas.js'; -import CanvasInstructionsGroupBuilder, {replayDeclutter} from '../../render/canvas/InstructionsGroupBuilder.js'; +import CanvasBuilderGroup, {replayDeclutter} from '../../render/canvas/InstructionsGroupBuilder.js'; import {ORDER} from '../../render/replay.js'; import CanvasTileLayerRenderer from './TileLayer.js'; import {getSquaredTolerance as getSquaredRenderTolerance, renderFeature} from '../vector.js'; @@ -24,7 +24,7 @@ import { scale as scaleTransform, translate as translateTransform } from '../../transform.js'; -import InstructionsGroupExectuor from '../../render/canvas/InstructionsGroupExecutor.js'; +import CanvasGroupExecutor from '../../render/canvas/InstructionsGroupExecutor.js'; /** @@ -187,7 +187,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { sourceTile.setProjection(projection); } replayState.dirty = false; - const replayGroup = new CanvasInstructionsGroupBuilder(0, sharedExtent, resolution, + const replayGroup = new CanvasBuilderGroup(0, sharedExtent, resolution, pixelRatio, source.getOverlaps(), this.declutterTree_, layer.getRenderBuffer()); const squaredTolerance = getSquaredRenderTolerance(resolution, pixelRatio); @@ -228,7 +228,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { } } const replayGroupInstructions = replayGroup.finish(); - const renderingReplayGroup = new InstructionsGroupExectuor(0, sharedExtent, resolution, + const renderingReplayGroup = new CanvasGroupExecutor(0, sharedExtent, resolution, pixelRatio, source.getOverlaps(), this.declutterTree_, layer.getRenderBuffer()); renderingReplayGroup.replaceInstructions(replayGroupInstructions); sourceTile.setReplayGroup(layer, tile.tileCoord.toString(), renderingReplayGroup); @@ -263,7 +263,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { if (sourceTile.getState() != TileState.LOADED) { continue; } - const replayGroup = /** @type {CanvasInstructionsGroupBuilder} */ (sourceTile.getReplayGroup(layer, + const replayGroup = /** @type {CanvasBuilderGroup} */ (sourceTile.getReplayGroup(layer, tile.tileCoord.toString())); found = found || replayGroup.forEachFeatureAtCoordinate(coordinate, resolution, rotation, hitTolerance, {}, /** @@ -371,8 +371,8 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { if (sourceTile.getState() != TileState.LOADED) { continue; } - const replayGroup = /** @type {CanvasInstructionsGroupBuilder} */ (sourceTile.getReplayGroup(layer, tileCoord.toString())); - if (!replayGroup || !replayGroup.hasReplays(replayTypes)) { + const executorGroup = /** @type {CanvasGroupExecutor} */ (sourceTile.getReplayGroup(layer, tileCoord.toString())); + if (!executorGroup || !executorGroup.hasExecutors(replayTypes)) { // sourceTile was not yet loaded when this.createReplayGroup_() was // called, or it has no replays of the types we want to render continue; @@ -381,7 +381,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { transform = this.getTransform(frameState, worldOffset); } const currentZ = sourceTile.tileCoord[0]; - const currentClip = replayGroup.getClipCoords(transform); + const currentClip = executorGroup.getClipCoords(transform); context.save(); context.globalAlpha = layerState.opacity; // Create a clip mask for regions in this low resolution tile that are @@ -403,7 +403,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { context.clip(); } } - replayGroup.replay(context, transform, rotation, {}, snapToPixel, replayTypes, declutterReplays); + executorGroup.replay(context, transform, rotation, {}, snapToPixel, replayTypes, declutterReplays); context.restore(); clips.push(currentClip); zs.push(currentZ); @@ -478,7 +478,7 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { const transform = resetTransform(this.tmpTransform_); scaleTransform(transform, pixelScale, -pixelScale); translateTransform(transform, -tileExtent[0], -tileExtent[3]); - const replayGroup = /** @type {CanvasInstructionsGroupBuilder} */ (sourceTile.getReplayGroup(layer, + const replayGroup = /** @type {CanvasBuilderGroup} */ (sourceTile.getReplayGroup(layer, tile.tileCoord.toString())); replayGroup.replay(context, transform, 0, {}, true, replays); } diff --git a/src/ol/renderer/vector.js b/src/ol/renderer/vector.js index 6ebb0f32ed..356b7da3bf 100644 --- a/src/ol/renderer/vector.js +++ b/src/ol/renderer/vector.js @@ -4,7 +4,7 @@ import {getUid} from '../util.js'; import ImageState from '../ImageState.js'; import GeometryType from '../geom/GeometryType.js'; -import ReplayType from '../render/ReplayType.js'; +import BuilderType from '../render/ReplayType.js'; /** @@ -17,7 +17,7 @@ const SIMPLIFY_TOLERANCE = 0.5; /** * @const * @type {Object} */ const GEOMETRY_RENDERERS = { @@ -64,30 +64,30 @@ export function getTolerance(resolution, pixelRatio) { /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} builderGroup Builder group. * @param {import("../geom/Circle.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").default} feature Feature. */ -function renderCircleGeometry(replayGroup, geometry, style, feature) { +function renderCircleGeometry(builderGroup, geometry, style, feature) { const fillStyle = style.getFill(); const strokeStyle = style.getStroke(); if (fillStyle || strokeStyle) { - const circleReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.CIRCLE); + const circleReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.CIRCLE); circleReplay.setFillStrokeStyle(fillStyle, strokeStyle); circleReplay.drawCircle(geometry, feature); } const textStyle = style.getText(); if (textStyle) { - const textReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.TEXT); - textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false)); + const textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT); + textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false)); textReplay.drawText(geometry, feature); } } /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} replayGroup Replay group. * @param {import("../Feature.js").FeatureLike} feature Feature. * @param {import("../style/Style.js").default} style Style. * @param {number} squaredTolerance Squared tolerance. @@ -119,7 +119,7 @@ export function renderFeature(replayGroup, feature, style, squaredTolerance, lis /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} replayGroup Replay group. * @param {import("../Feature.js").FeatureLike} feature Feature. * @param {import("../style/Style.js").default} style Style. * @param {number} squaredTolerance Squared tolerance. @@ -141,7 +141,7 @@ function renderFeatureInternal(replayGroup, feature, style, squaredTolerance) { /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} replayGroup Replay group. * @param {import("../geom/Geometry.js").default|import("../render/Feature.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").FeatureLike} feature Feature. @@ -154,13 +154,13 @@ function renderGeometry(replayGroup, geometry, style, feature) { } return; } - const replay = replayGroup.getReplay(style.getZIndex(), ReplayType.DEFAULT); + const replay = replayGroup.getBuilder(style.getZIndex(), BuilderType.DEFAULT); replay.drawCustom(/** @type {import("../geom/SimpleGeometry.js").default} */ (geometry), feature, style.getRenderer()); } /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} replayGroup Replay group. * @param {import("../geom/GeometryCollection.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").default} feature Feature. @@ -177,140 +177,140 @@ function renderGeometryCollectionGeometry(replayGroup, geometry, style, feature) /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} builderGroup Replay group. * @param {import("../geom/LineString.js").default|import("../render/Feature.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").FeatureLike} feature Feature. */ -function renderLineStringGeometry(replayGroup, geometry, style, feature) { +function renderLineStringGeometry(builderGroup, geometry, style, feature) { const strokeStyle = style.getStroke(); if (strokeStyle) { - const lineStringReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.LINE_STRING); + const lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING); lineStringReplay.setFillStrokeStyle(null, strokeStyle); lineStringReplay.drawLineString(geometry, feature); } const textStyle = style.getText(); if (textStyle) { - const textReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.TEXT); - textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false)); + const textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT); + textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false)); textReplay.drawText(geometry, feature); } } /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} builderGroup Replay group. * @param {import("../geom/MultiLineString.js").default|import("../render/Feature.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").FeatureLike} feature Feature. */ -function renderMultiLineStringGeometry(replayGroup, geometry, style, feature) { +function renderMultiLineStringGeometry(builderGroup, geometry, style, feature) { const strokeStyle = style.getStroke(); if (strokeStyle) { - const lineStringReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.LINE_STRING); + const lineStringReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.LINE_STRING); lineStringReplay.setFillStrokeStyle(null, strokeStyle); lineStringReplay.drawMultiLineString(geometry, feature); } const textStyle = style.getText(); if (textStyle) { - const textReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.TEXT); - textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false)); + const textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT); + textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false)); textReplay.drawText(geometry, feature); } } /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} builderGroup Replay group. * @param {import("../geom/MultiPolygon.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").default} feature Feature. */ -function renderMultiPolygonGeometry(replayGroup, geometry, style, feature) { +function renderMultiPolygonGeometry(builderGroup, geometry, style, feature) { const fillStyle = style.getFill(); const strokeStyle = style.getStroke(); if (strokeStyle || fillStyle) { - const polygonReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.POLYGON); + const polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.drawMultiPolygon(geometry, feature); } const textStyle = style.getText(); if (textStyle) { - const textReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.TEXT); - textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false)); + const textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT); + textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false)); textReplay.drawText(geometry, feature); } } /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} builderGroup Replay group. * @param {import("../geom/Point.js").default|import("../render/Feature.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").FeatureLike} feature Feature. */ -function renderPointGeometry(replayGroup, geometry, style, feature) { +function renderPointGeometry(builderGroup, geometry, style, feature) { const imageStyle = style.getImage(); if (imageStyle) { if (imageStyle.getImageState() != ImageState.LOADED) { return; } - const imageReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.IMAGE); - imageReplay.setImageStyle(imageStyle, replayGroup.addDeclutter(false)); + const imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE); + imageReplay.setImageStyle(imageStyle, builderGroup.addDeclutter(false)); imageReplay.drawPoint(geometry, feature); } const textStyle = style.getText(); if (textStyle) { - const textReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.TEXT); - textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(!!imageStyle)); + const textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT); + textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(!!imageStyle)); textReplay.drawText(geometry, feature); } } /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} builderGroup Replay group. * @param {import("../geom/MultiPoint.js").default|import("../render/Feature.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").FeatureLike} feature Feature. */ -function renderMultiPointGeometry(replayGroup, geometry, style, feature) { +function renderMultiPointGeometry(builderGroup, geometry, style, feature) { const imageStyle = style.getImage(); if (imageStyle) { if (imageStyle.getImageState() != ImageState.LOADED) { return; } - const imageReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.IMAGE); - imageReplay.setImageStyle(imageStyle, replayGroup.addDeclutter(false)); + const imageReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.IMAGE); + imageReplay.setImageStyle(imageStyle, builderGroup.addDeclutter(false)); imageReplay.drawMultiPoint(geometry, feature); } const textStyle = style.getText(); if (textStyle) { - const textReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.TEXT); - textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(!!imageStyle)); + const textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT); + textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(!!imageStyle)); textReplay.drawText(geometry, feature); } } /** - * @param {import("../render/ReplayGroup.js").default} replayGroup Replay group. + * @param {import("../render/BuilderGroup.js").default} builderGroup Replay group. * @param {import("../geom/Polygon.js").default|import("../render/Feature.js").default} geometry Geometry. * @param {import("../style/Style.js").default} style Style. * @param {import("../Feature.js").FeatureLike} feature Feature. */ -function renderPolygonGeometry(replayGroup, geometry, style, feature) { +function renderPolygonGeometry(builderGroup, geometry, style, feature) { const fillStyle = style.getFill(); const strokeStyle = style.getStroke(); if (fillStyle || strokeStyle) { - const polygonReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.POLYGON); + const polygonReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.POLYGON); polygonReplay.setFillStrokeStyle(fillStyle, strokeStyle); polygonReplay.drawPolygon(geometry, feature); } const textStyle = style.getText(); if (textStyle) { - const textReplay = replayGroup.getReplay(style.getZIndex(), ReplayType.TEXT); - textReplay.setTextStyle(textStyle, replayGroup.addDeclutter(false)); + const textReplay = builderGroup.getBuilder(style.getZIndex(), BuilderType.TEXT); + textReplay.setTextStyle(textStyle, builderGroup.addDeclutter(false)); textReplay.drawText(geometry, feature); } } diff --git a/test/spec/ol/renderer/vector.test.js b/test/spec/ol/renderer/vector.test.js index 62e7050779..32581697fb 100644 --- a/test/spec/ol/renderer/vector.test.js +++ b/test/spec/ol/renderer/vector.test.js @@ -6,7 +6,7 @@ import Polygon from '../../../../src/ol/geom/Polygon.js'; import MultiLineString from '../../../../src/ol/geom/MultiLineString.js'; import MultiPoint from '../../../../src/ol/geom/MultiPoint.js'; import MultiPolygon from '../../../../src/ol/geom/MultiPolygon.js'; -import CanvasReplayGroup from '../../../../src/ol/render/canvas/InstructionsGroupBuilder.js'; +import CanvasBuilderGroup from '../../../../src/ol/render/canvas/InstructionsGroupBuilder.js'; import {renderFeature} from '../../../../src/ol/renderer/vector.js'; import Fill from '../../../../src/ol/style/Fill.js'; import Icon from '../../../../src/ol/style/Icon.js'; @@ -17,12 +17,12 @@ import Feature from '../../../../src/ol/Feature.js'; describe('ol.renderer.vector', function() { describe('#renderFeature', function() { - let replayGroup; + let builderGroup; let feature, iconStyle, style, squaredTolerance, listener, listenerThis; let iconStyleLoadSpy; beforeEach(function() { - replayGroup = new CanvasReplayGroup(1); + builderGroup = new CanvasBuilderGroup(1); feature = new Feature(); iconStyle = new Icon({ src: 'http://example.com/icon.png' @@ -50,7 +50,7 @@ describe('ol.renderer.vector', function() { let listeners; // call #1 - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(iconStyleLoadSpy.calledOnce).to.be.ok(); @@ -59,7 +59,7 @@ describe('ol.renderer.vector', function() { expect(listeners.length).to.eql(1); // call #2 - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(iconStyleLoadSpy.calledOnce).to.be.ok(); @@ -74,11 +74,11 @@ describe('ol.renderer.vector', function() { it('does not render the point', function() { feature.setGeometry(new Point([0, 0])); - const imageReplay = replayGroup.getReplay( + const imageReplay = builderGroup.getBuilder( style.getZIndex(), 'Image'); const setImageStyleSpy = sinon.spy(imageReplay, 'setImageStyle'); const drawPointSpy = sinon.stub(imageReplay, 'drawPoint').callsFake(VOID); - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(setImageStyleSpy.called).to.be(false); setImageStyleSpy.restore(); @@ -87,11 +87,11 @@ describe('ol.renderer.vector', function() { it('does not render the multipoint', function() { feature.setGeometry(new MultiPoint([[0, 0], [1, 1]])); - const imageReplay = replayGroup.getReplay( + const imageReplay = builderGroup.getBuilder( style.getZIndex(), 'Image'); const setImageStyleSpy = sinon.spy(imageReplay, 'setImageStyle'); const drawMultiPointSpy = sinon.stub(imageReplay, 'drawMultiPoint').callsFake(VOID); - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(setImageStyleSpy.called).to.be(false); setImageStyleSpy.restore(); @@ -100,12 +100,12 @@ describe('ol.renderer.vector', function() { it('does render the linestring', function() { feature.setGeometry(new LineString([[0, 0], [1, 1]])); - const lineStringReplay = replayGroup.getReplay( + const lineStringReplay = builderGroup.getBuilder( style.getZIndex(), 'LineString'); const setFillStrokeStyleSpy = sinon.spy(lineStringReplay, 'setFillStrokeStyle'); const drawLineStringSpy = sinon.stub(lineStringReplay, 'drawLineString').callsFake(VOID); - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(setFillStrokeStyleSpy.called).to.be(true); expect(drawLineStringSpy.called).to.be(true); @@ -115,12 +115,12 @@ describe('ol.renderer.vector', function() { it('does render the multilinestring', function() { feature.setGeometry(new MultiLineString([[[0, 0], [1, 1]]])); - const lineStringReplay = replayGroup.getReplay( + const lineStringReplay = builderGroup.getBuilder( style.getZIndex(), 'LineString'); const setFillStrokeStyleSpy = sinon.spy(lineStringReplay, 'setFillStrokeStyle'); const drawMultiLineStringSpy = sinon.stub(lineStringReplay, 'drawMultiLineString').callsFake(VOID); - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(setFillStrokeStyleSpy.called).to.be(true); expect(drawMultiLineStringSpy.called).to.be(true); @@ -131,12 +131,12 @@ describe('ol.renderer.vector', function() { it('does render the polygon', function() { feature.setGeometry(new Polygon( [[[0, 0], [1, 1], [1, 0], [0, 0]]])); - const polygonReplay = replayGroup.getReplay( + const polygonReplay = builderGroup.getBuilder( style.getZIndex(), 'Polygon'); const setFillStrokeStyleSpy = sinon.spy(polygonReplay, 'setFillStrokeStyle'); const drawPolygonSpy = sinon.stub(polygonReplay, 'drawPolygon').callsFake(VOID); - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(setFillStrokeStyleSpy.called).to.be(true); expect(drawPolygonSpy.called).to.be(true); @@ -147,12 +147,12 @@ describe('ol.renderer.vector', function() { it('does render the multipolygon', function() { feature.setGeometry(new MultiPolygon( [[[[0, 0], [1, 1], [1, 0], [0, 0]]]])); - const polygonReplay = replayGroup.getReplay( + const polygonReplay = builderGroup.getBuilder( style.getZIndex(), 'Polygon'); const setFillStrokeStyleSpy = sinon.spy(polygonReplay, 'setFillStrokeStyle'); const drawMultiPolygonSpy = sinon.stub(polygonReplay, 'drawMultiPolygon').callsFake(VOID); - renderFeature(replayGroup, feature, + renderFeature(builderGroup, feature, style, squaredTolerance, listener, listenerThis); expect(setFillStrokeStyleSpy.called).to.be(true); expect(drawMultiPolygonSpy.called).to.be(true);