TAChart: Add GUI connector for AggPas drawing back-end

git-svn-id: trunk@40181 -
This commit is contained in:
ask 2013-02-04 16:24:17 +00:00
parent 28dff08465
commit a4c553db95
5 changed files with 129 additions and 9 deletions

1
.gitattributes vendored
View File

@ -2935,6 +2935,7 @@ components/tachart/README.txt svneol=native#text/plain
components/tachart/aggpas/tachartaggpas.lpk svneol=native#text/pascal
components/tachart/aggpas/tachartaggpas.pas svneol=native#text/pascal
components/tachart/aggpas/tadraweraggpas.pas svneol=native#text/pascal
components/tachart/aggpas/taguiconnectoraggpas.pas svneol=native#text/pascal
components/tachart/demo/3d/main.lfm svneol=native#text/plain
components/tachart/demo/3d/main.pas svneol=native#text/plain
components/tachart/demo/3d/zdemo.lpi svneol=native#text/plain

View File

@ -1,11 +1,12 @@
<?xml version="1.0"?>
<CONFIG>
<Package Version="3">
<Package Version="4">
<PathDelim Value="\"/>
<Name Value="TAChartAggPas"/>
<AddToProjectUsesSection Value="True"/>
<Author Value="Alexander Klenin"/>
<CompilerOptions>
<Version Value="10"/>
<Version Value="11"/>
<PathDelim Value="\"/>
<SearchPaths>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)\$(LCLWidgetType)"/>
@ -19,11 +20,16 @@
</CompilerOptions>
<Description Value="AggPas drawing back-end for TAChart"/>
<Version Major="1"/>
<Files Count="1">
<Files Count="2">
<Item1>
<Filename Value="tadraweraggpas.pas"/>
<UnitName Value="TADrawerAggPas"/>
</Item1>
<Item2>
<Filename Value="taguiconnectoraggpas.pas"/>
<HasRegisterProc Value="True"/>
<UnitName Value="TAGUIConnectorAggPas"/>
</Item2>
</Files>
<Type Value="RunAndDesignTime"/>
<RequiredPkgs Count="3">

View File

@ -2,19 +2,20 @@
This source is only used to compile and install the package.
}
unit TAChartAggPas;
unit TAChartAggPas;
interface
uses
TADrawerAggPas, LazarusPackageIntf;
TADrawerAggPas, TAGUIConnectorAggPas, LazarusPackageIntf;
implementation
procedure Register;
procedure Register;
begin
end;
RegisterUnit('TAGUIConnectorAggPas', @TAGUIConnectorAggPas.Register);
end;
initialization
RegisterPackage('TAChartAggPas', @Register);
RegisterPackage('TAChartAggPas', @Register);
end.

View File

@ -28,12 +28,12 @@ type
TAggPasDrawer = class(TBasicDrawer, IChartDrawer)
strict private
FCanvas: TAggLCLCanvas;
function ApplyTransparency(AColor: TFPColor): TFPColor;
procedure SetBrush(ABrush: TFPCustomBrush);
procedure SetFont(AFont: TFPCustomFont);
procedure SetPen(APen: TFPCustomPen);
strict protected
FCanvas: TAggLCLCanvas;
function GetFontAngle: Double; override;
function SimpleTextExtent(const AText: String): TPoint; override;
procedure SimpleTextOut(AX, AY: Integer; const AText: String); override;

View File

@ -0,0 +1,112 @@
{
*****************************************************************************
* *
* See the file COPYING.modifiedLGPL.txt, included in this distribution, *
* for details about the copyright. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* *
*****************************************************************************
Authors: Alexander Klenin
}
unit TAGUIConnectorAggPas;
{$H+}
interface
uses
Classes,
TAGUIConnector;
type
TChartGUIConnectorAggPas = class(TChartGUIConnector)
public
procedure CreateDrawer(var AData: TChartGUIConnectorData); override;
procedure SetBounds(var AData: TChartGUIConnectorData); override;
procedure Display(var AData: TChartGUIConnectorData); override;
end;
procedure Register;
implementation
uses
Agg_LCL, Graphics, SysUtils, TAChartUtils, TADrawerAggPas, TADrawerCanvas,
TAGeometry;
type
TAggPasOwnerDrawer = class(TAggPasDrawer)
strict protected
FBitmap: TBitmap;
public
constructor Create(ACanvas: TAggLCLCanvas);
destructor Destroy; override;
procedure SetSize(ASize: TPoint);
procedure PaintOnCanvas(ACanvas: TCanvas; const ARect: TRect);
end;
procedure Register;
begin
RegisterComponents(CHART_COMPONENT_IDE_PAGE, [TChartGUIConnectorAggPas]);
end;
{ TChartGUIConnectorAggPas }
procedure TChartGUIConnectorAggPas.CreateDrawer(
var AData: TChartGUIConnectorData);
begin
AData.FDrawer := TAggPasOwnerDrawer.Create(TAggLCLCanvas.Create);
AData.FDrawer.DoGetFontOrientation := @CanvasGetFontOrientationFunc;
end;
procedure TChartGUIConnectorAggPas.Display(var AData: TChartGUIConnectorData);
begin
(AData.FDrawer as TAggPasOwnerDrawer).PaintOnCanvas(
AData.FCanvas, AData.FBounds);
end;
procedure TChartGUIConnectorAggPas.SetBounds(var AData: TChartGUIConnectorData);
begin
AData.FDrawerBounds.TopLeft := Point(0, 0);
AData.FDrawerBounds.BottomRight :=
AData.FBounds.BottomRight - AData.FBounds.TopLeft;
(AData.FDrawer as TAggPasOwnerDrawer).SetSize(
AData.FDrawerBounds.BottomRight);
end;
{ TAggPasOwnerDrawer }
constructor TAggPasOwnerDrawer.Create(ACanvas: TAggLCLCanvas);
begin
inherited Create(ACanvas);
FBitmap := TBitmap.Create;
end;
destructor TAggPasOwnerDrawer.Destroy;
begin
inherited;
FreeAndNil(FBitmap);
FreeAndNil(FCanvas);
end;
procedure TAggPasOwnerDrawer.PaintOnCanvas(
ACanvas: TCanvas; const ARect: TRect);
begin
FBitmap.LoadFromIntfImage(FCanvas.Image.IntfImg);
ACanvas.Draw(ARect.Left, ARect.Top, FBitmap);
end;
procedure TAggPasOwnerDrawer.SetSize(ASize: TPoint);
begin
FBitmap.SetSize(ASize.X, ASize.Y);
FCanvas.Width := ASize.X;
FCanvas.Height := ASize.Y;
end;
end.