mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-06 17:59:43 +01:00
TAChart: Add TPanDragTool. This is part of issue #16109
git-svn-id: trunk@24337 -
This commit is contained in:
parent
55e3c12e7d
commit
d059542372
@ -159,6 +159,7 @@ type
|
|||||||
FClipRect: TRect;
|
FClipRect: TRect;
|
||||||
FCurrentExtent: TDoubleRect;
|
FCurrentExtent: TDoubleRect;
|
||||||
FIsZoomed: Boolean;
|
FIsZoomed: Boolean;
|
||||||
|
FLogicalExtent: TDoubleRect;
|
||||||
FOffset: TDoublePoint; // Coordinates transformation
|
FOffset: TDoublePoint; // Coordinates transformation
|
||||||
FReticuleMode: TReticuleMode;
|
FReticuleMode: TReticuleMode;
|
||||||
FReticulePos: TPoint;
|
FReticulePos: TPoint;
|
||||||
@ -227,6 +228,7 @@ type
|
|||||||
procedure CopyToClipboardBitmap;
|
procedure CopyToClipboardBitmap;
|
||||||
procedure DeleteSeries(ASeries: TBasicChartSeries);
|
procedure DeleteSeries(ASeries: TBasicChartSeries);
|
||||||
procedure PaintOnCanvas(ACanvas: TCanvas; ARect: TRect);
|
procedure PaintOnCanvas(ACanvas: TCanvas; ARect: TRect);
|
||||||
|
procedure Pan(const ADelta: TPoint);
|
||||||
procedure SaveToBitmapFile(const AFileName: String); inline;
|
procedure SaveToBitmapFile(const AFileName: String); inline;
|
||||||
procedure SaveToFile(AClass: TRasterImageClass; const AFileName: String);
|
procedure SaveToFile(AClass: TRasterImageClass; const AFileName: String);
|
||||||
function SaveToImage(AClass: TRasterImageClass): TRasterImage;
|
function SaveToImage(AClass: TRasterImageClass): TRasterImage;
|
||||||
@ -463,6 +465,7 @@ begin
|
|||||||
|
|
||||||
if not FIsZoomed then
|
if not FIsZoomed then
|
||||||
UpdateExtent;
|
UpdateExtent;
|
||||||
|
FLogicalExtent := FCurrentExtent;
|
||||||
DrawTitleFoot(ACanvas);
|
DrawTitleFoot(ACanvas);
|
||||||
PrepareLegend(ACanvas, legendItems, legendRect);
|
PrepareLegend(ACanvas, legendItems, legendRect);
|
||||||
try
|
try
|
||||||
@ -478,6 +481,21 @@ begin
|
|||||||
Series[i].AfterDraw;
|
Series[i].AfterDraw;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TChart.Pan(const ADelta: TPoint);
|
||||||
|
var
|
||||||
|
d: TDoublePoint;
|
||||||
|
begin
|
||||||
|
d.X := ADelta.X / FScale.X;
|
||||||
|
d.Y := ADelta.Y / FScale.Y;
|
||||||
|
with FLogicalExtent do begin
|
||||||
|
a += d;
|
||||||
|
b += d;
|
||||||
|
end;
|
||||||
|
FIsZoomed := true;
|
||||||
|
FCurrentExtent := FLogicalExtent;
|
||||||
|
Invalidate;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TChart.PrepareLegend(
|
procedure TChart.PrepareLegend(
|
||||||
ACanvas: TCanvas; out ALegendItems: TChartLegendItems; out ARect: TRect);
|
ACanvas: TCanvas; out ALegendItems: TChartLegendItems; out ARect: TRect);
|
||||||
var
|
var
|
||||||
|
|||||||
@ -113,6 +113,18 @@ type
|
|||||||
read FZoomFactor write FZoomFactor stored ZoomFactorIsStored;
|
read FZoomFactor write FZoomFactor stored ZoomFactorIsStored;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{ TPanDragTool }
|
||||||
|
|
||||||
|
TPanDragTool = class(TChartTool)
|
||||||
|
private
|
||||||
|
FOrigin: TPoint;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
procedure MouseDown(APoint: TPoint); override;
|
||||||
|
procedure MouseMove(APoint: TPoint); override;
|
||||||
|
procedure MouseUp(APoint: TPoint); override;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TReticuleTool }
|
{ TReticuleTool }
|
||||||
|
|
||||||
TReticuleTool = class(TChartTool)
|
TReticuleTool = class(TChartTool)
|
||||||
@ -528,12 +540,38 @@ begin
|
|||||||
Result := FZoomFactor <> 1.0;
|
Result := FZoomFactor <> 1.0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
constructor TPanDragTool.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TPanDragTool }
|
||||||
|
|
||||||
|
procedure TPanDragTool.MouseDown(APoint: TPoint);
|
||||||
|
begin
|
||||||
|
Activate;
|
||||||
|
FOrigin := APoint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPanDragTool.MouseMove(APoint: TPoint);
|
||||||
|
begin
|
||||||
|
FChart.Pan(APoint - FOrigin);
|
||||||
|
FOrigin := APoint;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TPanDragTool.MouseUp(APoint: TPoint);
|
||||||
|
begin
|
||||||
|
Unused(APoint);
|
||||||
|
Deactivate;
|
||||||
|
end;
|
||||||
|
|
||||||
initialization
|
initialization
|
||||||
|
|
||||||
ToolsClassRegistry := TStringList.Create;
|
ToolsClassRegistry := TStringList.Create;
|
||||||
OnInitBuiltinTools := @InitBuitlinTools;
|
OnInitBuiltinTools := @InitBuitlinTools;
|
||||||
RegisterChartToolClass(TZoomDragTool, 'Zoom drag tool');
|
RegisterChartToolClass(TZoomDragTool, 'Zoom drag tool');
|
||||||
RegisterChartToolClass(TZoomClickTool, 'Zoom click tool');
|
RegisterChartToolClass(TZoomClickTool, 'Zoom click tool');
|
||||||
|
RegisterChartToolClass(TPanDragTool, 'Panning drag tool');
|
||||||
RegisterChartToolClass(TReticuleTool, 'Reticule tool');
|
RegisterChartToolClass(TReticuleTool, 'Reticule tool');
|
||||||
|
|
||||||
finalization
|
finalization
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user