diff --git a/components/tachart/taseries.pas b/components/tachart/taseries.pas index 7f89dae177..bf3025d87a 100644 --- a/components/tachart/taseries.pas +++ b/components/tachart/taseries.pas @@ -571,7 +571,6 @@ procedure TBasicPointSeries.DrawLabels(ACanvas: TCanvas); var labelRect: TRect; center: TPoint; - dummy: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0); sz: TSize; begin if AText = '' then exit; @@ -582,13 +581,7 @@ procedure TBasicPointSeries.DrawLabels(ACanvas: TCanvas); center.Y += OFFSETS[ADir].Y * (Marks.Distance + sz.cy div 2); with center do labelRect := BoundsSize(X - sz.cx div 2, Y - sz.cy div 2, sz); - if - (Marks.OverlapPolicy = opHideNeighbour) and - not IsRectEmpty(FPrevLabelRect) and - IntersectRect(dummy, labelRect, FPrevLabelRect) - then - exit; - FPrevLabelRect := labelRect; + if Marks.IsLabelHiddenDueToOverlap(FPrevLabelRect, labelRect) then exit; // Link between the label and the bar. ACanvas.Pen.Assign(Marks.LinkPen); diff --git a/components/tachart/tatypes.pas b/components/tachart/tatypes.pas index 1afeb945db..3642ab473b 100644 --- a/components/tachart/tatypes.pas +++ b/components/tachart/tatypes.pas @@ -142,6 +142,8 @@ type procedure DrawLabel( ACanvas: TCanvas; const ALabelRect: TRect; const AText: String); function IsMarkLabelsVisible: Boolean; + function IsLabelHiddenDueToOverlap( + var APrevLabelRect: TRect; const ALabelRect: TRect): Boolean; function MeasureLabel(ACanvas: TCanvas; const AText: String): TSize; public @@ -464,6 +466,19 @@ begin ACanvas.Clipping := true; end; +function TGenericChartMarks.IsLabelHiddenDueToOverlap( + var APrevLabelRect: TRect; const ALabelRect: TRect): Boolean; +var + dummy: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0); +begin + Result := + (OverlapPolicy = opHideNeighbour) and + not IsRectEmpty(APrevLabelRect) and + IntersectRect(dummy, ALabelRect, APrevLabelRect); + if not Result then + APrevLabelRect := ALabelRect; +end; + function TGenericChartMarks.IsMarginRequired: Boolean; begin Result :=