mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-12-12 12:40:36 +01:00
TAChart: Add FixedPoint and ZoomRatio properties to TZoomClickTool
git-svn-id: trunk@26952 -
This commit is contained in:
parent
e9632ff6d5
commit
a23994a8aa
@ -138,14 +138,20 @@ type
|
|||||||
|
|
||||||
TZoomClickTool = class(TChartTool)
|
TZoomClickTool = class(TChartTool)
|
||||||
private
|
private
|
||||||
|
FFixedPoint: Boolean;
|
||||||
FZoomFactor: Double;
|
FZoomFactor: Double;
|
||||||
|
FZoomRatio: Double;
|
||||||
function ZoomFactorIsStored: boolean;
|
function ZoomFactorIsStored: boolean;
|
||||||
|
function ZoomRatioIsStored: boolean;
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
procedure MouseDown(APoint: TPoint); override;
|
procedure MouseDown(APoint: TPoint); override;
|
||||||
published
|
published
|
||||||
|
property FixedPoint: Boolean read FFixedPoint write FFixedPoint default false;
|
||||||
property ZoomFactor: Double
|
property ZoomFactor: Double
|
||||||
read FZoomFactor write FZoomFactor stored ZoomFactorIsStored;
|
read FZoomFactor write FZoomFactor stored ZoomFactorIsStored;
|
||||||
|
property ZoomRatio: Double
|
||||||
|
read FZoomRatio write FZoomRatio stored ZoomRatioIsStored;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TPanDirection = (pdLeft, pdUp, pdRight, pdDown);
|
TPanDirection = (pdLeft, pdUp, pdRight, pdDown);
|
||||||
@ -712,21 +718,27 @@ constructor TZoomClickTool.Create(AOwner: TComponent);
|
|||||||
begin
|
begin
|
||||||
inherited Create(AOwner);
|
inherited Create(AOwner);
|
||||||
FZoomFactor := 1.0;
|
FZoomFactor := 1.0;
|
||||||
|
FZoomRatio := 1.0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TZoomClickTool.MouseDown(APoint: TPoint);
|
procedure TZoomClickTool.MouseDown(APoint: TPoint);
|
||||||
var
|
var
|
||||||
sz, center: TDoublePoint;
|
sz, center, ratio: TDoublePoint;
|
||||||
ext: TDoubleRect;
|
ext: TDoubleRect;
|
||||||
begin
|
begin
|
||||||
if ZoomFactor <= 0 then exit;
|
if ZoomFactor <= 0 then exit;
|
||||||
ext := FChart.LogicalExtent;
|
ext := FChart.LogicalExtent;
|
||||||
sz := ext.b - ext.a;
|
|
||||||
sz.X /= ZoomFactor * 2;
|
|
||||||
sz.Y /= ZoomFactor * 2;
|
|
||||||
center := FChart.ImageToGraph(APoint);
|
center := FChart.ImageToGraph(APoint);
|
||||||
ext.a := center - sz;
|
sz := ext.b - ext.a;
|
||||||
ext.b := center + sz;
|
if FixedPoint then
|
||||||
|
with center - ext.a do
|
||||||
|
ratio := DoublePoint(X / sz.X, Y / sz.Y)
|
||||||
|
else
|
||||||
|
ratio := DoublePoint(0.5, 0.5);
|
||||||
|
ext.a.X := center.X - sz.X * ratio.X / ZoomFactor;
|
||||||
|
ext.a.Y := center.Y - sz.Y * ratio.Y / (ZoomFactor * ZoomRatio);
|
||||||
|
ext.b.X := center.X + sz.X * (1 - ratio.X) / ZoomFactor;
|
||||||
|
ext.b.Y := center.Y + sz.Y * (1 - ratio.Y) / (ZoomFactor * ZoomRatio);
|
||||||
FChart.LogicalExtent := ext;
|
FChart.LogicalExtent := ext;
|
||||||
Handled;
|
Handled;
|
||||||
end;
|
end;
|
||||||
@ -736,6 +748,11 @@ begin
|
|||||||
Result := FZoomFactor <> 1.0;
|
Result := FZoomFactor <> 1.0;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TZoomClickTool.ZoomRatioIsStored: boolean;
|
||||||
|
begin
|
||||||
|
Result := FZoomRatio <> 1.0;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TPanDragTool }
|
{ TPanDragTool }
|
||||||
|
|
||||||
constructor TPanDragTool.Create(AOwner: TComponent);
|
constructor TPanDragTool.Create(AOwner: TComponent);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user