diff --git a/components/tachart/tadraweraggpas.pas b/components/tachart/tadraweraggpas.pas index d088b42f79..6edb40e00e 100644 --- a/components/tachart/tadraweraggpas.pas +++ b/components/tachart/tadraweraggpas.pas @@ -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 diff --git a/components/tachart/tadrawutils.pas b/components/tachart/tadrawutils.pas index a74bba8356..867393e066 100644 --- a/components/tachart/tadrawutils.pas +++ b/components/tachart/tadrawutils.pas @@ -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 diff --git a/components/tachart/tafuncseries.pas b/components/tachart/tafuncseries.pas index 2b19097d7f..c0be67aae8 100644 --- a/components/tachart/tafuncseries.pas +++ b/components/tachart/tafuncseries.pas @@ -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;