Skip to content

Commit 5491cb3

Browse files
committed
fix(clip): calculate with dpr when extending clip path. close #19051
1 parent bb1e18c commit 5491cb3

File tree

7 files changed

+116
-18
lines changed

7 files changed

+116
-18
lines changed

src/chart/bar/BarView.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,12 +163,12 @@ class BarView extends ChartView {
163163
}
164164
}
165165

166-
incrementalPrepareRender(seriesModel: BarSeriesModel): void {
166+
incrementalPrepareRender(seriesModel: BarSeriesModel, ecModel: GlobalModel, api: ExtensionAPI): void {
167167
this._clear();
168168
this._updateDrawMode(seriesModel);
169169
// incremental also need to clip, otherwise might be overlow.
170170
// But must not set clip in each frame, otherwise all of the children will be marked redraw.
171-
this._updateLargeClip(seriesModel);
171+
this._updateLargeClip(seriesModel, ecModel, api);
172172
}
173173

174174
incrementalRender(params: StageHandlerProgressParams, seriesModel: BarSeriesModel): void {
@@ -455,18 +455,18 @@ class BarView extends ChartView {
455455
private _renderLarge(seriesModel: BarSeriesModel, ecModel: GlobalModel, api: ExtensionAPI): void {
456456
this._clear();
457457
createLarge(seriesModel, this.group);
458-
this._updateLargeClip(seriesModel);
458+
this._updateLargeClip(seriesModel, ecModel, api);
459459
}
460460

461461
private _incrementalRenderLarge(params: StageHandlerProgressParams, seriesModel: BarSeriesModel): void {
462462
this._removeBackground();
463463
createLarge(seriesModel, this.group, this._progressiveEls, true);
464464
}
465465

466-
private _updateLargeClip(seriesModel: BarSeriesModel): void {
466+
private _updateLargeClip(seriesModel: BarSeriesModel, ecModel: GlobalModel, api: ExtensionAPI): void {
467467
// Use clipPath in large mode.
468468
const clipPath = seriesModel.get('clip', true)
469-
&& createClipPath(seriesModel.coordinateSystem, false, seriesModel);
469+
&& createClipPath(seriesModel.coordinateSystem, false, seriesModel, api.getDevicePixelRatio());
470470
const group = this.group;
471471
if (clipPath) {
472472
group.setClipPath(clipPath);

src/chart/candlestick/CandlestickView.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class CandlestickView extends ChartView {
5656
this._updateDrawMode(seriesModel);
5757

5858
this._isLargeDraw
59-
? this._renderLarge(seriesModel)
59+
? this._renderLarge(seriesModel, ecModel, api)
6060
: this._renderNormal(seriesModel);
6161
}
6262

@@ -166,13 +166,13 @@ class CandlestickView extends ChartView {
166166
this._data = data;
167167
}
168168

169-
_renderLarge(seriesModel: CandlestickSeriesModel) {
169+
_renderLarge(seriesModel: CandlestickSeriesModel, ecModel: GlobalModel, api: ExtensionAPI) {
170170
this._clear();
171171

172172
createLarge(seriesModel, this.group);
173173

174174
const clipPath = seriesModel.get('clip', true)
175-
? createClipPath(seriesModel.coordinateSystem, false, seriesModel)
175+
? createClipPath(seriesModel.coordinateSystem, false, seriesModel, api.getDevicePixelRatio())
176176
: null;
177177
if (clipPath) {
178178
this.group.setClipPath(clipPath);

src/chart/custom/CustomView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ export default class CustomChartView extends ChartView {
243243

244244
// Do clipping
245245
const clipPath = customSeries.get('clip', true)
246-
? createClipPath(customSeries.coordinateSystem, false, customSeries)
246+
? createClipPath(customSeries.coordinateSystem, false, customSeries, api.getDevicePixelRatio())
247247
: null;
248248
if (clipPath) {
249249
group.setClipPath(clipPath);

src/chart/helper/createClipPathFromCoordSys.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ function createGridClipPath(
3333
cartesian: Cartesian2D,
3434
hasAnimation: boolean,
3535
seriesModel: SeriesModelWithLineWidth,
36+
dpr: number,
3637
done?: () => void,
3738
during?: (percent: number, clipRect: graphic.Rect) => void
3839
) {
@@ -43,7 +44,8 @@ function createGridClipPath(
4344
let width = rect.width;
4445
let height = rect.height;
4546

46-
const lineWidth = seriesModel.get(['lineStyle', 'width']) || 2;
47+
const lineWidth = (seriesModel.get(['lineStyle', 'width']) || 2) * (dpr || 1);
48+
4749
// Expand the clip path a bit to avoid the border is clipped and looks thinner
4850
x -= lineWidth / 2;
4951
y -= lineWidth / 2;
@@ -146,6 +148,7 @@ function createClipPath(
146148
coordSys: CoordinateSystem,
147149
hasAnimation: boolean,
148150
seriesModel: SeriesModelWithLineWidth,
151+
dpr: number,
149152
done?: () => void,
150153
during?: (percent: number) => void
151154
) {
@@ -156,7 +159,7 @@ function createClipPath(
156159
return createPolarClipPath(coordSys as Polar, hasAnimation, seriesModel);
157160
}
158161
else if (coordSys.type === 'cartesian2d') {
159-
return createGridClipPath(coordSys as Cartesian2D, hasAnimation, seriesModel, done, during);
162+
return createGridClipPath(coordSys as Cartesian2D, hasAnimation, seriesModel, dpr, done, during);
160163
}
161164
return null;
162165
}
@@ -165,4 +168,4 @@ export {
165168
createGridClipPath,
166169
createPolarClipPath,
167170
createClipPath
168-
};
171+
};

src/chart/line/LineView.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,8 @@ function createLineClipPath(
507507
lineView: LineView,
508508
coordSys: Cartesian2D | Polar,
509509
hasAnimation: boolean,
510-
seriesModel: LineSeriesModel
510+
seriesModel: LineSeriesModel,
511+
dpr: number
511512
) {
512513
if (isCoordinateSystemType<Cartesian2D>(coordSys, 'cartesian2d')) {
513514
const endLabelModel = seriesModel.getModel('endLabel');
@@ -531,7 +532,7 @@ function createLineClipPath(
531532
: null;
532533

533534
const isHorizontal = coordSys.getBaseAxis().isHorizontal();
534-
const clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel, () => {
535+
const clipPath = createGridClipPath(coordSys, hasAnimation, seriesModel, dpr, () => {
535536
const endLabel = lineView._endLabel;
536537
if (endLabel && hasAnimation) {
537538
if (labelAnimationRecord.originalX != null) {
@@ -697,6 +698,7 @@ class LineView extends ChartView {
697698
this._clipShapeForSymbol = clipShapeForSymbol;
698699
const visualColor = getVisualGradient(data, coordSys, api)
699700
|| data.getVisual('style')[data.getVisual('drawType')];
701+
const dpr = api.getDevicePixelRatio();
700702
// Initialization animation or coordinate system changed
701703
if (
702704
!(polyline && prevCoordSys.type === coordSys.type && step === this._step)
@@ -742,7 +744,7 @@ class LineView extends ChartView {
742744
}
743745

744746
lineGroup.setClipPath(
745-
createLineClipPath(this, coordSys, true, seriesModel)
747+
createLineClipPath(this, coordSys, true, seriesModel, dpr)
746748
);
747749
}
748750
else {
@@ -766,14 +768,14 @@ class LineView extends ChartView {
766768
// Update clipPath
767769
const oldClipPath = lineGroup.getClipPath();
768770
if (oldClipPath) {
769-
const newClipPath = createLineClipPath(this, coordSys, false, seriesModel);
771+
const newClipPath = createLineClipPath(this, coordSys, false, seriesModel, dpr);
770772
graphic.initProps(oldClipPath, {
771773
shape: newClipPath.shape
772774
}, seriesModel);
773775
}
774776
else {
775777
lineGroup.setClipPath(
776-
createLineClipPath(this, coordSys, true, seriesModel)
778+
createLineClipPath(this, coordSys, true, seriesModel, dpr)
777779
);
778780
}
779781

src/chart/lines/LinesView.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class LinesView extends ChartView {
8787
lineDraw.updateData(data as SeriesData);
8888

8989
const clipPath = seriesModel.get('clip', true) && createClipPath(
90-
(seriesModel.coordinateSystem as Polar | Cartesian2D), false, seriesModel
90+
(seriesModel.coordinateSystem as Polar | Cartesian2D), false, seriesModel, api.getDevicePixelRatio()
9191
);
9292
if (clipPath) {
9393
this.group.setClipPath(clipPath);

test/clip-line-cap.html

Lines changed: 93 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)