TAChart: allow series to include margins.

git-svn-id: trunk@18871 -
This commit is contained in:
ask 2009-03-02 15:21:26 +00:00
parent f940156a21
commit ca17997c57

View File

@ -171,6 +171,7 @@ type
function GetLegendCount: Integer; virtual; abstract; function GetLegendCount: Integer; virtual; abstract;
function GetLegendWidth(ACanvas: TCanvas): Integer; virtual; abstract; function GetLegendWidth(ACanvas: TCanvas): Integer; virtual; abstract;
function IsInLegend: Boolean; virtual; abstract; function IsInLegend: Boolean; virtual; abstract;
procedure UpdateMargins(ACanvas: TCanvas; var AMargins: TRect); virtual;
procedure UpdateBounds( procedure UpdateBounds(
var ANumPoints: Integer; var AXMin, AYMin, AXMax, AYMax: Double); var ANumPoints: Integer; var AXMin, AYMin, AXMax, AYMax: Double);
virtual; abstract; virtual; abstract;
@ -265,7 +266,8 @@ type
FAxisVisible: Boolean; FAxisVisible: Boolean;
procedure CalculateTransformationCoeffs; function GetMargins(ACanvas: TCanvas): TRect;
procedure CalculateTransformationCoeffs(const AMargin: TRect);
procedure PrepareXorPen; procedure PrepareXorPen;
procedure SetAutoUpdateXMin(Value: Boolean); procedure SetAutoUpdateXMin(Value: Boolean);
procedure SetAutoUpdateXMax(Value: Boolean); procedure SetAutoUpdateXMax(Value: Boolean);
@ -853,13 +855,13 @@ begin
Canvas.Pen.Width := 1; Canvas.Pen.Width := 1;
end; end;
procedure TChart.CalculateTransformationCoeffs; procedure TChart.CalculateTransformationCoeffs(const AMargin: TRect);
var var
lo, hi: Integer; lo, hi: Integer;
begin begin
if FXGraphMax <> FXGraphMin then begin if FXGraphMax <> FXGraphMin then begin
lo := XImageMin; lo := XImageMin + AMargin.Left;
hi := XImageMax; hi := XImageMax - AMargin.Right;
if BottomAxis.Inverted then if BottomAxis.Inverted then
Exchange(lo, hi); Exchange(lo, hi);
FScale.X := (hi - lo) / (FXGraphMax - FXGraphMin); FScale.X := (hi - lo) / (FXGraphMax - FXGraphMin);
@ -870,8 +872,8 @@ begin
FOffset.X := 0; FOffset.X := 0;
end; end;
if FYGraphMax <> FYGraphMin then begin if FYGraphMax <> FYGraphMin then begin
lo := YImageMin; lo := YImageMin - AMargin.Bottom;
hi := YImageMax; hi := YImageMax + AMargin.Top;
if LeftAxis.Inverted then if LeftAxis.Inverted then
Exchange(lo, hi); Exchange(lo, hi);
FScale.Y := (hi - lo) / (FYGraphMax - FYGraphMin); FScale.Y := (hi - lo) / (FYGraphMax - FYGraphMin);
@ -1086,7 +1088,7 @@ begin
XImageMax := ARect.Right - 10 - GetLegendWidth(ACanvas); XImageMax := ARect.Right - 10 - GetLegendWidth(ACanvas);
end; end;
CalculateTransformationCoeffs; CalculateTransformationCoeffs(GetMargins(ACanvas));
end; end;
// Background // Background
@ -1273,6 +1275,15 @@ begin
Result += 20 + 10; Result += 20 + 10;
end; end;
function TChart.GetMargins(ACanvas: TCanvas): TRect;
var
i: Integer;
begin
Result := Rect(0, 0, 0, 0);
for i := 0 to SeriesCount - 1 do
Series[i].UpdateMargins(ACanvas, Result);
end;
procedure TChart.SetGraphBrush(Value: TBrush); procedure TChart.SetGraphBrush(Value: TBrush);
begin begin
FGraphBrush.Assign(Value); FGraphBrush.Assign(Value);
@ -1394,7 +1405,8 @@ begin
if FAutoUpdateYMax then FYGraphMax := 0; if FAutoUpdateYMax then FYGraphMax := 0;
end; end;
end; end;
CalculateTransformationCoeffs;
CalculateTransformationCoeffs(GetMargins(ACanvas));
Clean(ACanvas, ARect); Clean(ACanvas, ARect);
DrawAxis(ACanvas, ARect); DrawAxis(ACanvas, ARect);
DisplaySeries(ACanvas); DisplaySeries(ACanvas);
@ -1837,6 +1849,12 @@ begin
(AParent as TChart).AddSeries(Self); (AParent as TChart).AddSeries(Self);
end; end;
procedure TBasicChartSeries.UpdateMargins(
ACanvas: TCanvas; var AMargins: TRect);
begin
// nothing
end;
procedure Register; procedure Register;
var var
i: Integer; i: Integer;