mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-17 03:49:30 +01: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;
|
labelRect: TRect;
|
||||||
dummy: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0);
|
dummy: TRect = (Left: 0; Top: 0; Right: 0; Bottom: 0);
|
||||||
labelText: String;
|
labelText: String;
|
||||||
labelSize: TSize;
|
|
||||||
begin
|
begin
|
||||||
labelText := FormattedMark(AIndex);
|
labelText := FormattedMark(AIndex);
|
||||||
if labelText = '' then exit;
|
if labelText = '' then exit;
|
||||||
|
|
||||||
labelSize := ACanvas.TextExtent(labelText);
|
labelRect := Marks.MeasureLabel(ACanvas, labelText, ADown);
|
||||||
labelRect.Left := ADataPoint.X - labelSize.cx div 2;
|
OffsetRect(labelRect, ADataPoint.X, ADataPoint.Y);
|
||||||
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);
|
|
||||||
if
|
if
|
||||||
not IsRectEmpty(FPrevLabelRect) and
|
not IsRectEmpty(FPrevLabelRect) and
|
||||||
IntersectRect(dummy, labelRect, FPrevLabelRect)
|
IntersectRect(dummy, labelRect, FPrevLabelRect)
|
||||||
|
|||||||
@ -144,6 +144,8 @@ type
|
|||||||
procedure DrawLabel(
|
procedure DrawLabel(
|
||||||
ACanvas: TCanvas; const ALabelRect: TRect; const AText: String);
|
ACanvas: TCanvas; const ALabelRect: TRect; const AText: String);
|
||||||
function IsMarkLabelsVisible: Boolean;
|
function IsMarkLabelsVisible: Boolean;
|
||||||
|
function MeasureLabel(
|
||||||
|
ACanvas: TCanvas; const AText: String; ADown: Boolean): TRect;
|
||||||
published
|
published
|
||||||
// If false, labels may overlap axises and legend.
|
// If false, labels may overlap axises and legend.
|
||||||
property Clipped: Boolean read FClipped write SetClipped default true;
|
property Clipped: Boolean read FClipped write SetClipped default true;
|
||||||
@ -243,6 +245,9 @@ type
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
Types;
|
||||||
|
|
||||||
{ TChartPen }
|
{ TChartPen }
|
||||||
|
|
||||||
procedure TChartPen.Assign(Source: TPersistent);
|
procedure TChartPen.Assign(Source: TPersistent);
|
||||||
@ -439,6 +444,22 @@ begin
|
|||||||
Result := Visible and (Style <> smsNone) and (Format <> '');
|
Result := Visible and (Style <> smsNone) and (Format <> '');
|
||||||
end;
|
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);
|
procedure TChartMarks.SetClipped(const AValue: Boolean);
|
||||||
begin
|
begin
|
||||||
if FClipped = AValue then exit;
|
if FClipped = AValue then exit;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user