mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-17 00:49:18 +02:00
TAChart: Add Marks.Margins property
git-svn-id: trunk@38567 -
This commit is contained in:
parent
b51fa0ecd9
commit
a7c38ab7ef
@ -605,6 +605,7 @@ begin
|
||||
inherited;
|
||||
Marks.SetOwner(FChart);
|
||||
Marks.Arrow.SetOwner(FChart);
|
||||
Marks.Margins.SetOwner(FChart);
|
||||
end;
|
||||
|
||||
procedure TChartSeries.AfterDraw;
|
||||
|
@ -25,18 +25,28 @@ uses
|
||||
TAChartUtils, TADrawUtils, TATypes;
|
||||
|
||||
const
|
||||
MARKS_MARGIN_X = 4;
|
||||
MARKS_MARGIN_Y = 2;
|
||||
DEF_LABEL_MARGIN_X = 4;
|
||||
DEF_LABEL_MARGIN_Y = 2;
|
||||
|
||||
type
|
||||
TChartMarksOverlapPolicy = (opIgnore, opHideNeighbour);
|
||||
|
||||
TChartLabelMargins = class(TChartMargins)
|
||||
published
|
||||
property Bottom default DEF_LABEL_MARGIN_Y;
|
||||
property Left default DEF_LABEL_MARGIN_X;
|
||||
property Right default DEF_LABEL_MARGIN_X;
|
||||
property Top default DEF_LABEL_MARGIN_Y;
|
||||
end;
|
||||
|
||||
TChartTextElement = class(TChartElement)
|
||||
strict private
|
||||
FClipped: Boolean;
|
||||
FMargins: TChartLabelMargins;
|
||||
FOverlapPolicy: TChartMarksOverlapPolicy;
|
||||
procedure SetAlignment(AValue: TAlignment);
|
||||
procedure SetClipped(AValue: Boolean);
|
||||
procedure SetMargins(AValue: TChartLabelMargins);
|
||||
procedure SetOverlapPolicy(AValue: TChartMarksOverlapPolicy);
|
||||
strict protected
|
||||
FAlignment: TAlignment;
|
||||
@ -54,6 +64,7 @@ type
|
||||
function GetLinkPen: TChartPen; virtual;
|
||||
public
|
||||
constructor Create(AOwner: TCustomChart);
|
||||
destructor Destroy; override;
|
||||
public
|
||||
procedure Assign(ASource: TPersistent); override;
|
||||
procedure DrawLabel(
|
||||
@ -70,6 +81,7 @@ type
|
||||
published
|
||||
property Alignment: TAlignment
|
||||
read FAlignment write SetAlignment;
|
||||
property Margins: TChartLabelMargins read FMargins write SetMargins;
|
||||
end;
|
||||
|
||||
TChartTitleFramePen = class(TChartPen)
|
||||
@ -256,9 +268,16 @@ constructor TChartTextElement.Create(AOwner: TCustomChart);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FClipped := true;
|
||||
FMargins := TChartLabelMargins.Create(AOwner);
|
||||
FOverlapPolicy := opIgnore;
|
||||
end;
|
||||
|
||||
destructor TChartTextElement.Destroy;
|
||||
begin
|
||||
FreeAndNil(FMargins);
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TChartTextElement.DrawLabel(
|
||||
ADrawer: IChartDrawer; const ADataPoint, ALabelCenter: TPoint;
|
||||
const AText: String; var APrevLabelPoly: TPointArray);
|
||||
@ -319,8 +338,7 @@ begin
|
||||
Result := ZeroRect;
|
||||
InflateRect(Result, ATextSize.X div 2, ATextSize.Y div 2);
|
||||
if IsMarginRequired then
|
||||
with ADrawer do
|
||||
InflateRect(Result, Scale(MARKS_MARGIN_X), Scale(MARKS_MARGIN_Y));
|
||||
Margins.ExpandRectScaled(ADrawer, Result);
|
||||
end;
|
||||
|
||||
function TChartTextElement.GetLabelAngle: Double;
|
||||
@ -368,6 +386,13 @@ begin
|
||||
StyleChanged(Self);
|
||||
end;
|
||||
|
||||
procedure TChartTextElement.SetMargins(AValue: TChartLabelMargins);
|
||||
begin
|
||||
if FMargins = AValue then exit;
|
||||
FMargins.Assign(AValue);
|
||||
StyleChanged(Self);
|
||||
end;
|
||||
|
||||
procedure TChartTextElement.SetOverlapPolicy(AValue: TChartMarksOverlapPolicy);
|
||||
begin
|
||||
if FOverlapPolicy = AValue then exit;
|
||||
|
@ -189,6 +189,7 @@ type
|
||||
procedure SetValue(AIndex: Integer; AValue: TChartDistance);
|
||||
public
|
||||
procedure Assign(Source: TPersistent); override;
|
||||
procedure ExpandRectScaled(ADrawer: IChartDrawer; var ARect: TRect);
|
||||
property Data: TRect read FData.FRect;
|
||||
published
|
||||
property Left: TChartDistance index 1 read GetValue write SetValue default DEF_MARGIN;
|
||||
@ -547,7 +548,14 @@ end;
|
||||
constructor TChartMargins.Create(AOwner: TCustomChart);
|
||||
begin
|
||||
inherited Create(AOwner);
|
||||
FData.FRect := Rect(DEF_MARGIN, DEF_MARGIN, DEF_MARGIN, DEF_MARGIN);
|
||||
SetPropDefaults(Self, ['Left', 'Top', 'Right', 'Bottom']);
|
||||
end;
|
||||
|
||||
procedure TChartMargins.ExpandRectScaled(
|
||||
ADrawer: IChartDrawer; var ARect: TRect);
|
||||
begin
|
||||
ARect.TopLeft -= Point(ADrawer.Scale(Left), ADrawer.Scale(Top));
|
||||
ARect.BottomRight += Point(ADrawer.Scale(Right), ADrawer.Scale(Bottom));
|
||||
end;
|
||||
|
||||
function TChartMargins.GetValue(AIndex: Integer): Integer;
|
||||
|
Loading…
Reference in New Issue
Block a user