TAChart: Add FixedPoint and ZoomRatio properties to TZoomClickTool

git-svn-id: trunk@26952 -
This commit is contained in:
ask 2010-08-01 03:57:17 +00:00
parent e9632ff6d5
commit a23994a8aa

View File

@ -138,14 +138,20 @@ type
TZoomClickTool = class(TChartTool)
private
FFixedPoint: Boolean;
FZoomFactor: Double;
FZoomRatio: Double;
function ZoomFactorIsStored: boolean;
function ZoomRatioIsStored: boolean;
public
constructor Create(AOwner: TComponent); override;
procedure MouseDown(APoint: TPoint); override;
published
property FixedPoint: Boolean read FFixedPoint write FFixedPoint default false;
property ZoomFactor: Double
read FZoomFactor write FZoomFactor stored ZoomFactorIsStored;
property ZoomRatio: Double
read FZoomRatio write FZoomRatio stored ZoomRatioIsStored;
end;
TPanDirection = (pdLeft, pdUp, pdRight, pdDown);
@ -712,21 +718,27 @@ constructor TZoomClickTool.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FZoomFactor := 1.0;
FZoomRatio := 1.0;
end;
procedure TZoomClickTool.MouseDown(APoint: TPoint);
var
sz, center: TDoublePoint;
sz, center, ratio: TDoublePoint;
ext: TDoubleRect;
begin
if ZoomFactor <= 0 then exit;
ext := FChart.LogicalExtent;
sz := ext.b - ext.a;
sz.X /= ZoomFactor * 2;
sz.Y /= ZoomFactor * 2;
center := FChart.ImageToGraph(APoint);
ext.a := center - sz;
ext.b := center + sz;
sz := ext.b - ext.a;
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;
Handled;
end;
@ -736,6 +748,11 @@ begin
Result := FZoomFactor <> 1.0;
end;
function TZoomClickTool.ZoomRatioIsStored: boolean;
begin
Result := FZoomRatio <> 1.0;
end;
{ TPanDragTool }
constructor TPanDragTool.Create(AOwner: TComponent);