TAChart: fix SeriesColor to work uniformly for all kinds of series

patch by: Alexander Klenin
fixes issue #13184

git-svn-id: trunk@18709 -
This commit is contained in:
vincents 2009-02-16 15:43:42 +00:00
parent 677032c756
commit 06cd260566
3 changed files with 70 additions and 6 deletions

View File

@ -217,7 +217,7 @@ begin
FBar := TBarSeries.Create(Chart1);
Chart1.AddSerie(FBar);
FBar.Title := 'bars';
FBar.SeriesColor := clRed;
FBar.SeriesColor := clGreen;
end;
procedure TForm1.InitLine;

View File

@ -173,8 +173,6 @@ type
{ TBasicChartSeries }
TBasicChartSeries = class(TComponent)
private
FSeriesColor: TColor;
protected
ParentChart: TChart;
procedure DrawLegend(ACanvas: TCanvas; const ARect: TRect); virtual; abstract;
@ -189,10 +187,13 @@ type
ADistFunc: TPointDistFunc; const APoint: TPoint;
out AIndex: Integer; out AImg: TPoint; out AValue: TDoublePoint): Boolean;
virtual;
function GetSeriesColor: TColor; virtual; abstract;
procedure SetSeriesColor(const AValue: TColor); virtual; abstract;
public
function Count: Integer; virtual; abstract;
procedure DrawIfActive(ACanvas: TCanvas); virtual; abstract;
property SeriesColor: TColor read FSeriesColor write FSeriesColor default clTAColor;
property SeriesColor: TColor
read GetSeriesColor write SetSeriesColor default clTAColor;
end;
{ TChart }

View File

@ -167,6 +167,8 @@ type
procedure ExamineAllBarSeries(out ATotalNumber, AMyPos: Integer);
protected
procedure DrawLegend(ACanvas: TCanvas; const ARect: TRect); override;
function GetSeriesColor: TColor; override;
procedure SetSeriesColor(const AValue: TColor); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -195,6 +197,8 @@ type
function GetLegendCount: Integer; override;
function GetLegendWidth(ACanvas: TCanvas): Integer; override;
procedure AfterAdd; override;
function GetSeriesColor: TColor; override;
procedure SetSeriesColor(const AValue: TColor); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -223,6 +227,8 @@ type
procedure SetInvertedStairs(Value: Boolean);
protected
procedure DrawLegend(ACanvas: TCanvas; const ARect: TRect); override;
function GetSeriesColor: TColor; override;
procedure SetSeriesColor(const AValue: TColor); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -252,6 +258,7 @@ type
private
FPointer: TSeriesPointer;
FStyle: TPenStyle;
FSeriesColor: TColor;
XOfYGraphMin, XOfYGraphMax: Double; // X max value of points
FShowPoints: Boolean;
@ -266,6 +273,8 @@ type
ADistFunc: TPointDistFunc; const APoint: TPoint;
out AIndex: Integer; out AImg: TPoint; out AValue: TDoublePoint): Boolean;
override;
function GetSeriesColor: TColor; override;
procedure SetSeriesColor(const AValue: TColor); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -303,6 +312,8 @@ type
property Pointer: TSeriesPointer read FPointer write SetPointer;
end;
{ TLine }
TLine = class(TBasicLineSeries)
private
FStyle: TLineStyle;
@ -315,6 +326,9 @@ type
procedure SetPos(Value: Double);
procedure SetPen(Value: TPen);
procedure SetStyle(Value: TLineStyle);
protected
function GetSeriesColor: TColor; override;
procedure SetSeriesColor(const AValue: TColor); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
@ -668,6 +682,11 @@ begin
UpdateParentChart;
end;
procedure TSerie.SetSeriesColor(const AValue: TColor);
begin
FSeriesColor := AValue;
end;
procedure TSerie.Draw(ACanvas: TCanvas);
var
xi1, yi1, xi2, yi2: Integer;
@ -939,6 +958,11 @@ begin
end;
end;
function TSerie.GetSeriesColor: TColor;
begin
Result := FSeriesColor;
end;
procedure TSerie.SetColor(Index: Integer; AColor: TColor);
begin
PChartCoord(FCoordList.items[Index])^.Color := AColor;
@ -1052,7 +1076,12 @@ begin
UpdateParentChart;
end;
procedure TLine.Draw;
procedure TLine.SetSeriesColor(const AValue: TColor);
begin
FPen.Color := AValue;
end;
procedure TLine.Draw(ACanvas: TCanvas);
var
XMin, XMax, YMin, YMax: Integer;
begin
@ -1076,6 +1105,11 @@ begin
end;
end;
function TLine.GetSeriesColor: TColor;
begin
Result := FPen.Color;
end;
constructor TBarSeries.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
@ -1102,7 +1136,6 @@ end;
procedure TBarSeries.SetBarBrush(Value: TBrush);
begin
SeriesColor := Value.Color;
FBarBrush.Assign(Value);
end;
@ -1119,6 +1152,11 @@ begin
FBarWidthPercent := Value;
end;
procedure TBarSeries.SetSeriesColor(const AValue: TColor);
begin
FBarBrush.Color := AValue;
end;
function TBarSeries.AddXY(X, Y: Double; XLabel: String; Color: TColor): Longint;
begin
if Color = clTAColor then Color := SeriesColor;
@ -1248,6 +1286,11 @@ begin
Assert(AMyPos >= 0);
end;
function TBarSeries.GetSeriesColor: TColor;
begin
Result := FBarBrush.Color;
end;
constructor TPieSeries.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
@ -1273,6 +1316,11 @@ begin
FPiePen.Assign(Value);
end;
procedure TPieSeries.SetSeriesColor(const AValue: TColor);
begin
// SeriesColor is meaningless for PieSeries
end;
function TPieSeries.AddXY(X, Y: Double; XLabel: String; Color: TColor): Longint;
begin
if Color = clTAColor then Color := Colors[ColorIndex];
@ -1453,6 +1501,11 @@ begin
Result := Max(ACanvas.TextWidth(Format('%1.2g %s', [y, Text])), Result);
end;
function TPieSeries.GetSeriesColor: TColor;
begin
Result := clBlack; // SeriesColor is meaningless for PieSeries
end;
constructor TAreaSeries.Create(AOwner: TComponent);
begin
@ -1502,6 +1555,11 @@ begin
UpdateParentChart;
end;
procedure TAreaSeries.SetSeriesColor(const AValue: TColor);
begin
FAreaBrush.Color := AValue;
end;
procedure TAreaSeries.Draw(ACanvas: TCanvas);
var
i: Integer;
@ -1615,6 +1673,11 @@ begin
ACanvas.Rectangle(ARect);
end;
function TAreaSeries.GetSeriesColor: TColor;
begin
Result := FAreaBrush.Color;
end;
{ TBasicLineSeries }
procedure TBasicLineSeries.DrawLegend(ACanvas: TCanvas; const ARect: TRect);