From 6edfc21f02cac490d7af5c31836883a41dd10cba Mon Sep 17 00:00:00 2001 From: ask Date: Sun, 13 Feb 2011 15:57:46 +0000 Subject: [PATCH] TAChart: Use IChartDrawer to draw chart back wall git-svn-id: trunk@29529 - --- components/tachart/tadrawutils.pas | 21 ++++++++++++++++++--- components/tachart/tagraph.pas | 26 +++++++++++++------------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/components/tachart/tadrawutils.pas b/components/tachart/tadrawutils.pas index 8bd22a86b5..ea7115e9d6 100644 --- a/components/tachart/tadrawutils.pas +++ b/components/tachart/tadrawutils.pas @@ -63,10 +63,12 @@ type AX1, AY1, AX2, AY2: Integer; AStartAngle16Deg, AAngleLength16Deg: Integer); procedure Rectangle(const ARect: TRect); + procedure Rectangle(AX1, AY1, AX2, AY2: Integer); procedure SetBrush(APen: TFPCustomBrush); - procedure SetBrushParams(AStyle: TBrushStyle; AColor: TChartColor); + procedure SetBrushParams(AStyle: TFPBrushStyle; AColor: TChartColor); procedure SetFont(AValue: TFPCustomFont); procedure SetPen(APen: TFPCustomPen); + procedure SetPenParams(AStyle: TFPPenStyle; AColor: TChartColor); function TextExtent(const AText: String): TPoint; function TextExtent(AText: TStrings): TPoint; function TextOut: TChartTextOut; @@ -117,7 +119,9 @@ type AX1, AY1, AX2, AY2: Integer; AStartAngle16Deg, AAngleLength16Deg: Integer); procedure Rectangle(const ARect: TRect); - procedure SetBrushParams(AStyle: TBrushStyle; AColor: TChartColor); + procedure Rectangle(AX1, AY1, AX2, AY2: Integer); + procedure SetPenParams(AStyle: TFPPenStyle; AColor: TChartColor); + procedure SetBrushParams(AStyle: TFPBrushStyle; AColor: TChartColor); function TextExtent(const AText: String): TPoint; function TextExtent(AText: TStrings): TPoint; function TextOut: TChartTextOut; @@ -345,6 +349,11 @@ begin AX1, AY1, AX2, AY2, AStartAngle16Deg, AAngleLength16Deg); end; +procedure TCanvasDrawer.Rectangle(AX1, AY1, AX2, AY2: Integer); +begin + FCanvas.Rectangle(AX1, AY1, AX2, AY2); +end; + procedure TCanvasDrawer.Rectangle(const ARect: TRect); begin FCanvas.Rectangle(ARect); @@ -356,7 +365,7 @@ begin end; procedure TCanvasDrawer.SetBrushParams( - AStyle: TBrushStyle; AColor: TChartColor); + AStyle: TFPBrushStyle; AColor: TChartColor); begin FCanvas.Brush.Style := AStyle; FCanvas.Brush.Color := AColor; @@ -372,6 +381,12 @@ begin FCanvas.Pen.Assign(APen); end; +procedure TCanvasDrawer.SetPenParams(AStyle: TFPPenStyle; AColor: TChartColor); +begin + FCanvas.Pen.Style := AStyle; + FCanvas.Pen.Color := AColor; +end; + function TCanvasDrawer.TextExtent(const AText: String): TPoint; begin Result := MultiLineTextExtent(FCanvas, AText); diff --git a/components/tachart/tagraph.pas b/components/tachart/tagraph.pas index 8b52788a1d..d0b7bdc614 100644 --- a/components/tachart/tagraph.pas +++ b/components/tachart/tagraph.pas @@ -217,7 +217,7 @@ type protected procedure Clear(ADrawer: IChartDrawer; const ARect: TRect); procedure DisplaySeries(ADrawer: IChartDrawer); - procedure DrawBackWall(ACanvas: TCanvas); + procedure DrawBackWall(ADrawer: IChartDrawer); procedure MouseDown( Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; procedure MouseMove(Shift: TShiftState; X, Y: Integer); override; @@ -656,7 +656,7 @@ begin PrepareLegend(ADrawer, legendItems, FClipRect, legendRect); try PrepareAxis(ADrawer.Canvas); - DrawBackWall(ADrawer.Canvas); + DrawBackWall(ADrawer); DisplaySeries(ADrawer); if Legend.Visible then Legend.Draw(ADrawer, legendItems, legendRect); @@ -669,30 +669,30 @@ begin Series[i].AfterDraw; end; -procedure TChart.DrawBackWall(ACanvas: TCanvas); +procedure TChart.DrawBackWall(ADrawer: IChartDrawer); var defaultDrawing: Boolean = true; begin - if Assigned(OnBeforeDrawBackWall) then - OnBeforeDrawBackWall(Self, ACanvas, FClipRect, defaultDrawing); + if ADrawer.HasCanvas and Assigned(OnBeforeDrawBackWall) then + OnBeforeDrawBackWall(Self, ADrawer.Canvas, FClipRect, defaultDrawing); if defaultDrawing then - with ACanvas do begin + with ADrawer do begin if FFrame.Visible then - Pen.Assign(FFrame) + Pen := FFrame else - Pen.Style := psClear; - Brush.Color := BackColor; + SetPenParams(psClear, clTAColor); + SetBrushParams(bsSolid, BackColor); with FClipRect do Rectangle(Left, Top, Right + 1, Bottom + 1); end; - if Assigned(OnAfterDrawBackWall) then - OnAfterDrawBackWall(Self, ACanvas, FClipRect); + if ADrawer.HasCanvas and Assigned(OnAfterDrawBackWall) then + OnAfterDrawBackWall(Self, ADrawer.Canvas, FClipRect); // Z axis if (Depth > 0) and FFrame.Visible then begin - ACanvas.Pen.Assign(FFrame); + ADrawer.Pen := FFrame; with FClipRect do - ACanvas.Line(Left, Bottom, Left - Depth, Bottom + Depth); + ADrawer.Line(Left, Bottom, Left - Depth, Bottom + Depth); end; end;