44import { scale as scaleCoordinate } from 'ol/coordinate.js' ;
55import { createCanvasContext2D } from 'ol/dom.js' ;
66import { containsExtent , intersects } from 'ol/extent.js' ;
7- import { VOID } from 'ol/functions .js' ;
7+ import CanvasLayerRenderer from './Layer .js' ;
88import { create as createTransform , apply as applyTransform } from 'ol/transform.js' ;
9- import CanvasLayerRenderer from './Layer' ;
10-
119
10+ /**
11+ * @abstract
12+ */
1213class IntermediateCanvasRenderer extends CanvasLayerRenderer {
1314
1415 /**
@@ -82,32 +83,16 @@ class IntermediateCanvasRenderer extends CanvasLayerRenderer {
8283 * @abstract
8384 * @return {HTMLCanvasElement|HTMLVideoElement|HTMLImageElement } Canvas.
8485 */
85- getImage ( ) { }
86+ getImage ( ) {
87+ return abstract ( ) ;
88+ }
8689
8790 /**
8891 * @abstract
8992 * @return {!import("../../transform.js").Transform } Image transform.
9093 */
91- getImageTransform ( ) { }
92-
93- /**
94- * @inheritDoc
95- */
96- forEachFeatureAtCoordinate ( coordinate , frameState , hitTolerance , callback , thisArg ) {
97- const layer = this . getLayer ( ) ;
98- const source = layer . getSource ( ) ;
99- const resolution = frameState . viewState . resolution ;
100- const rotation = frameState . viewState . rotation ;
101- const skippedFeatureUids = frameState . skippedFeatureUids ;
102- return source . forEachFeatureAtCoordinate (
103- coordinate , resolution , rotation , hitTolerance , skippedFeatureUids ,
104- /**
105- * @param {import("../../Feature.js").FeatureLike } feature Feature.
106- * @return {? } Callback result.
107- */
108- function ( feature ) {
109- return callback . call ( thisArg , feature , layer ) ;
110- } ) ;
94+ getImageTransform ( ) {
95+ return abstract ( ) ;
11196 }
11297
11398 /**
@@ -118,27 +103,21 @@ class IntermediateCanvasRenderer extends CanvasLayerRenderer {
118103 return undefined ;
119104 }
120105
121- if ( this . getLayer ( ) . getSource ( ) . forEachFeatureAtCoordinate !== VOID ) {
122- // for ImageCanvas sources use the original hit-detection logic,
123- // so that for example also transparent polygons are detected
124- return super . forEachLayerAtCoordinate ( arguments ) ;
125- } else {
126- const pixel = applyTransform ( this . coordinateToCanvasPixelTransform , coordinate . slice ( ) ) ;
127- scaleCoordinate ( pixel , frameState . viewState . resolution / this . renderedResolution ) ;
106+ const pixel = applyTransform ( this . coordinateToCanvasPixelTransform , coordinate . slice ( ) ) ;
107+ scaleCoordinate ( pixel , frameState . viewState . resolution / this . renderedResolution ) ;
128108
129- if ( ! this . hitCanvasContext_ ) {
130- this . hitCanvasContext_ = createCanvasContext2D ( 1 , 1 ) ;
131- }
109+ if ( ! this . hitCanvasContext_ ) {
110+ this . hitCanvasContext_ = createCanvasContext2D ( 1 , 1 ) ;
111+ }
132112
133- this . hitCanvasContext_ . clearRect ( 0 , 0 , 1 , 1 ) ;
134- this . hitCanvasContext_ . drawImage ( this . getImage ( ) , pixel [ 0 ] , pixel [ 1 ] , 1 , 1 , 0 , 0 , 1 , 1 ) ;
113+ this . hitCanvasContext_ . clearRect ( 0 , 0 , 1 , 1 ) ;
114+ this . hitCanvasContext_ . drawImage ( this . getImage ( ) , pixel [ 0 ] , pixel [ 1 ] , 1 , 1 , 0 , 0 , 1 , 1 ) ;
135115
136- const imageData = this . hitCanvasContext_ . getImageData ( 0 , 0 , 1 , 1 ) . data ;
137- if ( imageData [ 3 ] > 0 ) {
138- return callback . call ( thisArg , this . getLayer ( ) , imageData ) ;
139- } else {
140- return undefined ;
141- }
116+ const imageData = this . hitCanvasContext_ . getImageData ( 0 , 0 , 1 , 1 ) . data ;
117+ if ( imageData [ 3 ] > 0 ) {
118+ return callback . call ( thisArg , this . getLayer ( ) , imageData ) ;
119+ } else {
120+ return undefined ;
142121 }
143122 }
144123}
0 commit comments