From 8ee3fed524f6562cda9399688f58a4872bb9629b Mon Sep 17 00:00:00 2001 From: pissang Date: Sun, 22 Aug 2021 14:38:38 +0800 Subject: [PATCH] fix(bar): optimize label distance when using round cap --- src/chart/bar/BarView.ts | 8 +++-- src/label/sectorLabel.ts | 72 +++++++++++++++++++++++---------------- test/bar-polar-label.html | 5 ++- 3 files changed, 53 insertions(+), 32 deletions(-) diff --git a/src/chart/bar/BarView.ts b/src/chart/bar/BarView.ts index b948582bd7..faa4adb8dc 100644 --- a/src/chart/bar/BarView.ts +++ b/src/chart/bar/BarView.ts @@ -755,14 +755,18 @@ const elementCreator: { const ShapeClass = (!isRadial && roundCap) ? Sausage : Sector; const sector = new ShapeClass({ - shape: defaults({clockwise: clockwise}, layout), + shape: defaults({ + clockwise: clockwise + }, layout), z2: 1 }); sector.name = 'item'; const positionMap = createPolarPositionMapping(isRadial); - sector.calculateTextPosition = createSectorCalculateTextPosition(positionMap); + sector.calculateTextPosition = createSectorCalculateTextPosition(positionMap, { + isRoundCap: ShapeClass === Sausage + }); // Animation if (animationModel) { diff --git a/src/label/sectorLabel.ts b/src/label/sectorLabel.ts index ba75e03b20..6ed74d2b3a 100644 --- a/src/label/sectorLabel.ts +++ b/src/label/sectorLabel.ts @@ -24,8 +24,18 @@ export type SectorLike = { }; export function createSectorCalculateTextPosition( - positionMapping: (seriesLabelPosition: T) => SectorTextPosition + positionMapping: (seriesLabelPosition: T) => SectorTextPosition, + opts?: { + /** + * If has round cap on two ends. If so, label should have an extra offset + */ + isRoundCap?: boolean + } ): ElementCalculateTextPosition { + + opts = opts || {}; + const isRoundCap = opts.isRoundCap; + return function ( this: Sector, out: TextPositionCalculationResult, @@ -57,82 +67,86 @@ export function createSectorCalculateTextPosition