@@ -651,28 +651,38 @@ export default class TrackManager<POIMeta> {
651
651
if ( ! extent ?. length ) return ;
652
652
const viewport = event . target . getViewport ( ) ;
653
653
const canvases = viewport . getElementsByTagName ( 'canvas' ) ;
654
+ const frameState = event . frameState ;
655
+ const viewportWidth = Math . round ( frameState . size [ 0 ] * frameState . pixelRatio ) ;
656
+ const viewportHeight = Math . round ( frameState . size [ 1 ] * frameState . pixelRatio ) ;
657
+
654
658
const canvas = canvases . item ( canvases . length - 1 ) ;
655
- const context = canvas . getContext ( '2d' ) ;
656
659
657
- const coordinates = [
658
- [ extent [ 0 ] , extent [ 1 ] ] , // Bottom-left
659
- [ extent [ 0 ] , extent [ 3 ] ] , // Top-left
660
- [ extent [ 2 ] , extent [ 3 ] ] , // Top-right
661
- [ extent [ 2 ] , extent [ 1 ] ] , // Bottom-right
662
- ] ;
660
+ const canvasViewportRatio = ( canvas . width / viewportWidth ) * frameState . pixelRatio ;
661
+ console . assert (
662
+ canvasViewportRatio === ( canvas . height / viewportHeight ) * frameState . pixelRatio ,
663
+ ) ;
664
+
665
+ const coordinates = [
666
+ [ extent [ 0 ] , extent [ 1 ] ] , // Bottom-left
667
+ [ extent [ 0 ] , extent [ 3 ] ] , // Top-left
668
+ [ extent [ 2 ] , extent [ 3 ] ] , // Top-right
669
+ [ extent [ 2 ] , extent [ 1 ] ] , // Bottom-right
670
+ ] ;
663
671
664
- const pixelCoordinates = coordinates . map ( ( coord ) => this . map_ . getPixelFromCoordinate ( coord ) ) ;
672
+ const pixelCoordinates = coordinates . map ( ( coord ) => this . map_ . getPixelFromCoordinate ( coord ) ) ;
665
673
674
+ const width = ( pixelCoordinates [ 3 ] [ 0 ] - pixelCoordinates [ 0 ] [ 0 ] ) * canvasViewportRatio ;
675
+ const height = ( pixelCoordinates [ 1 ] [ 1 ] - pixelCoordinates [ 0 ] [ 1 ] ) * canvasViewportRatio ;
676
+
677
+
678
+ const context = canvas . getContext ( '2d' ) ;
666
679
context . beginPath ( ) ;
667
680
668
681
// outer rectangle
669
682
context . rect ( 0 , 0 , canvas . width , canvas . height ) ;
670
683
671
- const width = pixelCoordinates [ 3 ] [ 0 ] - pixelCoordinates [ 0 ] [ 0 ] ;
672
- const height = pixelCoordinates [ 1 ] [ 1 ] - pixelCoordinates [ 0 ] [ 1 ] ;
673
-
674
684
// inner rectangle
675
- context . rect ( pixelCoordinates [ 0 ] [ 0 ] , pixelCoordinates [ 0 ] [ 1 ] , width , height ) ;
685
+ context . rect ( pixelCoordinates [ 0 ] [ 0 ] * canvasViewportRatio , pixelCoordinates [ 0 ] [ 1 ] * canvasViewportRatio , width , height ) ;
676
686
677
687
context . closePath ( ) ;
678
688
context . fillStyle = this . drawMaskColor_ ;
0 commit comments