mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-03 03:40:21 +02:00
TAChart: Extract TChartMarks.MeasureLabel function.
+ Take label font into account while measuring mark labels. git-svn-id: trunk@24110 -
This commit is contained in:
parent
4f98042b2f
commit
d474f1e6a3
@ -560,19 +560,12 @@ var
|
||||
labelRect: TRect;
|
||||
dummy: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0);
|
||||
labelText: String;
|
||||
labelSize: TSize;
|
||||
begin
|
||||
labelText := FormattedMark(AIndex);
|
||||
if labelText = '' then exit;
|
||||
|
||||
labelSize := ACanvas.TextExtent(labelText);
|
||||
labelRect.Left := ADataPoint.X - labelSize.cx div 2;
|
||||
if ADown then
|
||||
labelRect.Top := ADataPoint.Y + Marks.Distance
|
||||
else
|
||||
labelRect.Top := ADataPoint.Y - Marks.Distance - labelSize.cy;
|
||||
labelRect.BottomRight := labelRect.TopLeft + labelSize;
|
||||
InflateRect(labelRect, MARKS_MARGIN_X, MARKS_MARGIN_Y);
|
||||
labelRect := Marks.MeasureLabel(ACanvas, labelText, ADown);
|
||||
OffsetRect(labelRect, ADataPoint.X, ADataPoint.Y);
|
||||
if
|
||||
not IsRectEmpty(FPrevLabelRect) and
|
||||
IntersectRect(dummy, labelRect, FPrevLabelRect)
|
||||
|
@ -144,6 +144,8 @@ type
|
||||
procedure DrawLabel(
|
||||
ACanvas: TCanvas; const ALabelRect: TRect; const AText: String);
|
||||
function IsMarkLabelsVisible: Boolean;
|
||||
function MeasureLabel(
|
||||
ACanvas: TCanvas; const AText: String; ADown: Boolean): TRect;
|
||||
published
|
||||
// If false, labels may overlap axises and legend.
|
||||
property Clipped: Boolean read FClipped write SetClipped default true;
|
||||
@ -243,6 +245,9 @@ type
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Types;
|
||||
|
||||
{ TChartPen }
|
||||
|
||||
procedure TChartPen.Assign(Source: TPersistent);
|
||||
@ -439,6 +444,22 @@ begin
|
||||
Result := Visible and (Style <> smsNone) and (Format <> '');
|
||||
end;
|
||||
|
||||
function TChartMarks.MeasureLabel(
|
||||
ACanvas: TCanvas; const AText: String; ADown: Boolean): TRect;
|
||||
var
|
||||
labelSize: TSize;
|
||||
begin
|
||||
ACanvas.Font.Assign(LabelFont);
|
||||
labelSize := ACanvas.TextExtent(AText);
|
||||
Result.Left := - labelSize.cx div 2;
|
||||
if ADown then
|
||||
Result.Top := Distance
|
||||
else
|
||||
Result.Top := - Distance - labelSize.cy;
|
||||
Result.BottomRight := Result.TopLeft + labelSize;
|
||||
InflateRect(Result, MARKS_MARGIN_X, MARKS_MARGIN_Y);
|
||||
end;
|
||||
|
||||
procedure TChartMarks.SetClipped(const AValue: Boolean);
|
||||
begin
|
||||
if FClipped = AValue then exit;
|
||||
|
Loading…
Reference in New Issue
Block a user