mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-13 07:29:13 +02:00
TAChart: Use IChartDrawer to draw TFuncSeries and TColorMapSeries
git-svn-id: trunk@29637 -
This commit is contained in:
parent
43e58801a0
commit
f72f36bdd3
@ -19,8 +19,8 @@ type
|
||||
procedure SetPen(APen: TFPCustomPen);
|
||||
strict protected
|
||||
function GetFontAngle: Double; override;
|
||||
procedure SimpleTextOut(AX, AY: Integer; const AText: String); override;
|
||||
function SimpleTextExtent(const AText: String): TPoint; override;
|
||||
procedure SimpleTextOut(AX, AY: Integer; const AText: String); override;
|
||||
public
|
||||
constructor Create(ACanvas: TAggLCLCanvas);
|
||||
public
|
||||
@ -35,6 +35,8 @@ type
|
||||
function HasCanvas: Boolean;
|
||||
procedure Line(AX1, AY1, AX2, AY2: Integer);
|
||||
procedure Line(const AP1, AP2: TPoint);
|
||||
procedure LineTo(AX, AY: Integer); override;
|
||||
procedure MoveTo(AX, AY: Integer); override;
|
||||
procedure Polygon(
|
||||
const APoints: array of TPoint;
|
||||
AStartIndex: Integer = 0; ANumPts: Integer = -1); override;
|
||||
@ -127,6 +129,16 @@ begin
|
||||
FCanvas.Line(AP1, AP2);
|
||||
end;
|
||||
|
||||
procedure TAggPasDrawer.LineTo(AX, AY: Integer);
|
||||
begin
|
||||
FCanvas.LineTo(AX, AY);
|
||||
end;
|
||||
|
||||
procedure TAggPasDrawer.MoveTo(AX, AY: Integer);
|
||||
begin
|
||||
FCanvas.MoveTo(AX, AY);
|
||||
end;
|
||||
|
||||
procedure TAggPasDrawer.Polygon(
|
||||
const APoints: array of TPoint; AStartIndex, ANumPts: Integer);
|
||||
begin
|
||||
|
@ -80,6 +80,10 @@ type
|
||||
function HasCanvas: Boolean;
|
||||
procedure Line(AX1, AY1, AX2, AY2: Integer);
|
||||
procedure Line(const AP1, AP2: TPoint);
|
||||
procedure LineTo(AX, AY: Integer);
|
||||
procedure LineTo(const AP: TPoint);
|
||||
procedure MoveTo(AX, AY: Integer);
|
||||
procedure MoveTo(const AP: TPoint);
|
||||
procedure Polygon(
|
||||
const APoints: array of TPoint;
|
||||
AStartIndex: Integer = 0; ANumPts: Integer = -1);
|
||||
@ -119,6 +123,10 @@ type
|
||||
public
|
||||
procedure DrawLineDepth(AX1, AY1, AX2, AY2, ADepth: Integer);
|
||||
procedure DrawLineDepth(const AP1, AP2: TPoint; ADepth: Integer);
|
||||
procedure LineTo(AX, AY: Integer); virtual; abstract;
|
||||
procedure LineTo(const AP: TPoint);
|
||||
procedure MoveTo(AX, AY: Integer); virtual; abstract;
|
||||
procedure MoveTo(const AP: TPoint);
|
||||
procedure Polygon(
|
||||
const APoints: array of TPoint;
|
||||
AStartIndex: Integer = 0; ANumPts: Integer = -1); virtual; abstract;
|
||||
@ -152,6 +160,8 @@ type
|
||||
function HasCanvas: Boolean;
|
||||
procedure Line(AX1, AY1, AX2, AY2: Integer);
|
||||
procedure Line(const AP1, AP2: TPoint);
|
||||
procedure LineTo(AX, AY: Integer); override;
|
||||
procedure MoveTo(AX, AY: Integer); override;
|
||||
procedure Polygon(
|
||||
const APoints: array of TPoint;
|
||||
AStartIndex: Integer = 0; ANumPts: Integer = -1); override;
|
||||
@ -292,6 +302,16 @@ begin
|
||||
Polygon([AP1, AP1 + d, AP2 + d, AP2]);
|
||||
end;
|
||||
|
||||
procedure TFPCanvasDrawer.LineTo(const AP: TPoint);
|
||||
begin
|
||||
LineTo(AP.X, AP.Y)
|
||||
end;
|
||||
|
||||
procedure TFPCanvasDrawer.MoveTo(const AP: TPoint);
|
||||
begin
|
||||
MoveTo(AP.X, AP.Y)
|
||||
end;
|
||||
|
||||
function TFPCanvasDrawer.TextExtent(const AText: String): TPoint;
|
||||
var
|
||||
sl: TStrings;
|
||||
@ -393,6 +413,16 @@ begin
|
||||
FCanvas.Line(AP1, AP2);
|
||||
end;
|
||||
|
||||
procedure TCanvasDrawer.LineTo(AX, AY: Integer);
|
||||
begin
|
||||
FCanvas.LineTo(AX, AY);
|
||||
end;
|
||||
|
||||
procedure TCanvasDrawer.MoveTo(AX, AY: Integer);
|
||||
begin
|
||||
FCanvas.MoveTo(AX, AY);
|
||||
end;
|
||||
|
||||
procedure TCanvasDrawer.Polygon(
|
||||
const APoints: array of TPoint; AStartIndex, ANumPts: Integer);
|
||||
begin
|
||||
|
@ -24,7 +24,7 @@ interface
|
||||
|
||||
uses
|
||||
Classes, Graphics,
|
||||
TAChartUtils, TACustomSeries, TACustomSource, TALegend, TATypes;
|
||||
TAChartUtils, TACustomSeries, TACustomSource, TADrawUtils, TALegend, TATypes;
|
||||
|
||||
const
|
||||
DEF_COLORMAP_STEP = 4;
|
||||
@ -77,7 +77,7 @@ type
|
||||
constructor Create(AOwner: TComponent); override;
|
||||
destructor Destroy; override;
|
||||
|
||||
procedure Draw(ACanvas: TCanvas); override;
|
||||
procedure Draw(ADrawer: IChartDrawer); override;
|
||||
function IsEmpty: Boolean; override;
|
||||
public
|
||||
property DomainExclusions: TIntervalList read FDomainExclusions;
|
||||
@ -120,7 +120,7 @@ type
|
||||
|
||||
public
|
||||
function ColorByValue(AValue: Double): TColor;
|
||||
procedure Draw(ACanvas: TCanvas); override;
|
||||
procedure Draw(ADrawer: IChartDrawer); override;
|
||||
function IsEmpty: Boolean; override;
|
||||
published
|
||||
property AxisIndexX;
|
||||
@ -234,7 +234,7 @@ begin
|
||||
OnCalculate(AX, Result)
|
||||
end;
|
||||
|
||||
procedure TFuncSeries.Draw(ACanvas: TCanvas);
|
||||
procedure TFuncSeries.Draw(ADrawer: IChartDrawer);
|
||||
type
|
||||
TTransform = function (A: Double): Double of object;
|
||||
TMakeDoublePoint = function (AX, AY: Double): TDoublePoint;
|
||||
@ -256,7 +256,7 @@ var
|
||||
begin
|
||||
CalcAt(AXg, AXa, prev, prevInExtent);
|
||||
if prevInExtent then
|
||||
ACanvas.MoveTo(FChart.GraphToImage(prev));
|
||||
ADrawer.MoveTo(FChart.GraphToImage(prev));
|
||||
end;
|
||||
|
||||
procedure LineTo(AXg, AXa: Double);
|
||||
@ -267,10 +267,10 @@ var
|
||||
CalcAt(AXg, AXa, p, inExtent);
|
||||
t := p;
|
||||
if inExtent and prevInExtent then
|
||||
ACanvas.LineTo(FChart.GraphToImage(p))
|
||||
ADrawer.LineTo(FChart.GraphToImage(p))
|
||||
else if LineIntersectsRect(prev, t, r) then begin
|
||||
ACanvas.MoveTo(FChart.GraphToImage(prev));
|
||||
ACanvas.LineTo(FChart.GraphToImage(t));
|
||||
ADrawer.MoveTo(FChart.GraphToImage(prev));
|
||||
ADrawer.LineTo(FChart.GraphToImage(t));
|
||||
end;
|
||||
prevInExtent := inExtent;
|
||||
prev := p;
|
||||
@ -315,7 +315,7 @@ begin
|
||||
|
||||
MoveTo(xg, xa);
|
||||
|
||||
ACanvas.Pen.Assign(Pen);
|
||||
ADrawer.Pen := Pen;
|
||||
while xg < xmax do begin
|
||||
xg1 := xg + graphStep;
|
||||
xa1 := graphToAxisXr(xg1);
|
||||
@ -421,7 +421,7 @@ begin
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TColorMapSeries.Draw(ACanvas: TCanvas);
|
||||
procedure TColorMapSeries.Draw(ADrawer: IChartDrawer);
|
||||
var
|
||||
ext: TDoubleRect;
|
||||
bounds: TDoubleRect;
|
||||
@ -444,8 +444,8 @@ begin
|
||||
NormalizeRect(r);
|
||||
offset := ParentChart.GraphToImage(ZeroDoublePoint);
|
||||
|
||||
ACanvas.Brush := Brush;
|
||||
ACanvas.Pen.Style := psClear;
|
||||
ADrawer.Brush := Brush;
|
||||
ADrawer.SetPenParams(psClear, clTAColor);
|
||||
pt.Y := (r.Top div StepY - 1) * StepY + offset.Y mod StepY;
|
||||
while pt.Y <= r.Bottom do begin
|
||||
next.Y := pt.Y + StepY;
|
||||
@ -464,8 +464,8 @@ begin
|
||||
if not (csDesigning in ComponentState) then
|
||||
OnCalculate(gp.X, gp.Y, v);
|
||||
if ColorSource <> nil then
|
||||
ACanvas.Brush.Color := ColorByValue(v);
|
||||
ACanvas.Rectangle(
|
||||
ADrawer.BrushColor := ColorByValue(v);
|
||||
ADrawer.Rectangle(
|
||||
Max(pt.X, r.Left), Max(pt.Y, r.Top),
|
||||
Min(next.X, r.Right) + 1, Min(next.Y, r.Bottom) + 1);
|
||||
pt.X := next.X;
|
||||
|
Loading…
Reference in New Issue
Block a user