TAChart: Separate measure and draw phases for TChartTitle

git-svn-id: trunk@38890 -
This commit is contained in:
ask 2012-09-29 05:27:18 +00:00
parent 4443b9ae3f
commit e75056a790
2 changed files with 29 additions and 19 deletions

View File

@ -746,10 +746,6 @@ var
begin
Prepare;
ADrawer.DrawingBegin(ARect);
ADrawer.SetAntialiasingMode(AntialiasingMode);
Clear(ADrawer, ARect);
FClipRect := ARect;
with MarginsExternal do begin
FClipRect.Left += Left;
@ -759,8 +755,8 @@ begin
end;
with ClipRect do begin;
FTitle.Draw(ADrawer, 1, Left, Right, Top);
FFoot.Draw(ADrawer, -1, Left, Right, Bottom);
FTitle.Measure(ADrawer, 1, Left, Right, Top);
FFoot.Measure(ADrawer, -1, Left, Right, Bottom);
end;
ldd.FItems := nil;
@ -768,6 +764,12 @@ begin
ldd := PrepareLegend(ADrawer, FClipRect);
try
PrepareAxis(ADrawer);
ADrawer.DrawingBegin(ARect);
ADrawer.SetAntialiasingMode(AntialiasingMode);
Clear(ADrawer, ARect);
FTitle.Draw(ADrawer);
FFoot.Draw(ADrawer);
DrawBackWall(ADrawer);
DisplaySeries(ADrawer);
if Legend.Visible then

View File

@ -119,6 +119,7 @@ type
TChartTitle = class(TChartTextElement)
strict private
FBrush: TBrush;
FCenter: TPoint;
FFont: TFont;
FFrame: TChartTitleFramePen;
FMargin: TChartDistance;
@ -138,7 +139,8 @@ type
destructor Destroy; override;
public
procedure Assign(ASource: TPersistent); override;
procedure Draw(
procedure Draw(ADrawer: IChartDrawer);
procedure Measure(
ADrawer: IChartDrawer; ADir, ALeft, ARight: Integer; var AY: Integer);
published
property Alignment default taCenter;
@ -510,22 +512,12 @@ begin
inherited;
end;
procedure TChartTitle.Draw(
ADrawer: IChartDrawer; ADir, ALeft, ARight: Integer; var AY: Integer);
procedure TChartTitle.Draw(ADrawer: IChartDrawer);
var
p, ptSize: TPoint;
dummy: TPointArray = nil;
begin
if not Visible or (Text.Count = 0) then exit;
ptSize := MeasureLabel(ADrawer, Text.Text);
case Alignment of
taLeftJustify: p.X := ALeft + ptSize.X div 2;
taRightJustify: p.X := ARight - ptSize.X div 2;
taCenter: p.X := (ALeft + ARight) div 2;
end;
p.Y := AY + ADir * ptSize.Y div 2;
DrawLabel(ADrawer, p, p, Text.Text, dummy);
AY += ADir * (ptSize.Y + Margin);
DrawLabel(ADrawer, FCenter, FCenter, Text.Text, dummy);
end;
function TChartTitle.GetFrame: TChartPen;
@ -543,6 +535,22 @@ begin
Result := Font;
end;
procedure TChartTitle.Measure(ADrawer: IChartDrawer;
ADir, ALeft, ARight: Integer; var AY: Integer);
var
ptSize: TPoint;
begin
if not Visible or (Text.Count = 0) then exit;
ptSize := MeasureLabel(ADrawer, Text.Text);
case Alignment of
taLeftJustify: FCenter.X := ALeft + ptSize.X div 2;
taRightJustify: FCenter.X := ARight - ptSize.X div 2;
taCenter: FCenter.X := (ALeft + ARight) div 2;
end;
FCenter.Y := AY + ADir * ptSize.Y div 2;
AY += ADir * (ptSize.Y + Margin);
end;
procedure TChartTitle.SetBrush(AValue: TBrush);
begin
FBrush.Assign(AValue);