1
- import { MediaCoordinatesRenderingScope } from 'fancy-canvas' ;
1
+ import { BitmapCoordinatesRenderingScope } from 'fancy-canvas' ;
2
2
3
3
import { ensureNever } from '../helpers/assertions' ;
4
4
import { makeFont } from '../helpers/make-font' ;
@@ -9,11 +9,12 @@ import { SeriesMarkerShape } from '../model/series-markers';
9
9
import { TextWidthCache } from '../model/text-width-cache' ;
10
10
import { SeriesItemsIndexesRange , TimedValue } from '../model/time-data' ;
11
11
12
- import { MediaCoordinatesPaneRenderer } from './media -coordinates-pane-renderer' ;
12
+ import { BitmapCoordinatesPaneRenderer } from './bitmap -coordinates-pane-renderer' ;
13
13
import { drawArrow , hitTestArrow } from './series-markers-arrow' ;
14
14
import { drawCircle , hitTestCircle } from './series-markers-circle' ;
15
15
import { drawSquare , hitTestSquare } from './series-markers-square' ;
16
16
import { drawText , hitTestText } from './series-markers-text' ;
17
+ import { BitmapShapeItemCoordinates } from './series-markers-utils' ;
17
18
18
19
export interface SeriesMarkerText {
19
20
content : string ;
@@ -38,7 +39,7 @@ export interface SeriesMarkerRendererData {
38
39
visibleRange : SeriesItemsIndexesRange | null ;
39
40
}
40
41
41
- export class SeriesMarkersRenderer extends MediaCoordinatesPaneRenderer {
42
+ export class SeriesMarkersRenderer extends BitmapCoordinatesPaneRenderer {
42
43
private _data : SeriesMarkerRendererData | null = null ;
43
44
private _textWidthCache : TextWidthCache = new TextWidthCache ( ) ;
44
45
private _fontSize : number = - 1 ;
@@ -76,7 +77,7 @@ export class SeriesMarkersRenderer extends MediaCoordinatesPaneRenderer {
76
77
return null ;
77
78
}
78
79
79
- protected _drawImpl ( { context : ctx } : MediaCoordinatesRenderingScope , isHovered : boolean , hitTestData ?: unknown ) : void {
80
+ protected _drawImpl ( { context : ctx , horizontalPixelRatio , verticalPixelRatio } : BitmapCoordinatesRenderingScope , isHovered : boolean , hitTestData ?: unknown ) : void {
80
81
if ( this . _data === null || this . _data . visibleRange === null ) {
81
82
return ;
82
83
}
@@ -91,38 +92,48 @@ export class SeriesMarkersRenderer extends MediaCoordinatesPaneRenderer {
91
92
item . text . height = this . _fontSize ;
92
93
item . text . x = item . x - item . text . width / 2 as Coordinate ;
93
94
}
94
- drawItem ( item , ctx ) ;
95
+ drawItem ( item , ctx , horizontalPixelRatio , verticalPixelRatio ) ;
95
96
}
96
97
}
97
98
}
98
99
99
- function drawItem ( item : SeriesMarkerRendererDataItem , ctx : CanvasRenderingContext2D ) : void {
100
+ function bitmapShapeItemCoordinates ( item : SeriesMarkerRendererDataItem , horizontalPixelRatio : number , verticalPixelRatio : number ) : BitmapShapeItemCoordinates {
101
+ const tickWidth = Math . max ( 1 , Math . floor ( horizontalPixelRatio ) ) ;
102
+ const correction = ( tickWidth % 2 ) / 2 ;
103
+ return {
104
+ x : Math . round ( item . x * horizontalPixelRatio ) + correction ,
105
+ y : item . y * verticalPixelRatio ,
106
+ pixelRatio : horizontalPixelRatio ,
107
+ } ;
108
+ }
109
+
110
+ function drawItem ( item : SeriesMarkerRendererDataItem , ctx : CanvasRenderingContext2D , horizontalPixelRatio : number , verticalPixelRatio : number ) : void {
100
111
ctx . fillStyle = item . color ;
101
112
102
113
if ( item . text !== undefined ) {
103
- drawText ( ctx , item . text . content , item . text . x , item . text . y ) ;
114
+ drawText ( ctx , item . text . content , item . text . x , item . text . y , horizontalPixelRatio , verticalPixelRatio ) ;
104
115
}
105
116
106
- drawShape ( item , ctx ) ;
117
+ drawShape ( item , ctx , bitmapShapeItemCoordinates ( item , horizontalPixelRatio , verticalPixelRatio ) ) ;
107
118
}
108
119
109
- function drawShape ( item : SeriesMarkerRendererDataItem , ctx : CanvasRenderingContext2D ) : void {
120
+ function drawShape ( item : SeriesMarkerRendererDataItem , ctx : CanvasRenderingContext2D , coordinates : BitmapShapeItemCoordinates ) : void {
110
121
if ( item . size === 0 ) {
111
122
return ;
112
123
}
113
124
114
125
switch ( item . shape ) {
115
126
case 'arrowDown' :
116
- drawArrow ( false , ctx , item . x , item . y , item . size ) ;
127
+ drawArrow ( false , ctx , coordinates , item . size ) ;
117
128
return ;
118
129
case 'arrowUp' :
119
- drawArrow ( true , ctx , item . x , item . y , item . size ) ;
130
+ drawArrow ( true , ctx , coordinates , item . size ) ;
120
131
return ;
121
132
case 'circle' :
122
- drawCircle ( ctx , item . x , item . y , item . size ) ;
133
+ drawCircle ( ctx , coordinates , item . size ) ;
123
134
return ;
124
135
case 'square' :
125
- drawSquare ( ctx , item . x , item . y , item . size ) ;
136
+ drawSquare ( ctx , coordinates , item . size ) ;
126
137
return ;
127
138
}
128
139
0 commit comments