mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-15 12:02:41 +02:00
TAChart: Add TChartAxis.ZPosition property
git-svn-id: trunk@27743 -
This commit is contained in:
parent
08bb81fce3
commit
aebe485e4b
@ -141,6 +141,7 @@ type
|
||||
FTitle: TChartAxisTitle;
|
||||
FTransformations: TChartAxisTransformations;
|
||||
FVisible: Boolean;
|
||||
FZPosition: TChartDistance;
|
||||
|
||||
function GetTransform: TChartAxisTransformations;
|
||||
procedure SetAlignment(AValue: TChartAxisAlignment);
|
||||
@ -154,6 +155,7 @@ type
|
||||
procedure SetTitle(AValue: TChartAxisTitle);
|
||||
procedure SetTransformations(AValue: TChartAxisTransformations);
|
||||
procedure SetVisible(const AValue: Boolean);
|
||||
procedure SetZPosition(const AValue: TChartDistance);
|
||||
|
||||
procedure StyleChanged(ASender: TObject);
|
||||
protected
|
||||
@ -165,10 +167,10 @@ type
|
||||
procedure Assign(Source: TPersistent); override;
|
||||
procedure Draw(
|
||||
ACanvas: TCanvas; const AExtent: TDoubleRect;
|
||||
const ATransf: ICoordTransformer; var ARect: TRect);
|
||||
const ATransf: ICoordTransformer; const ARect: TRect);
|
||||
procedure DrawTitle(
|
||||
ACanvas: TCanvas; const ACenter: TPoint;
|
||||
const AMeasureData: TChartAxisMeasureData; var ARect: TRect);
|
||||
const AMeasureData: TChartAxisMeasureData; const ARect: TRect);
|
||||
function IsVertical: Boolean; inline;
|
||||
procedure Measure(
|
||||
ACanvas: TCanvas; const AExtent: TDoubleRect; AFirstPass: Boolean;
|
||||
@ -188,6 +190,7 @@ type
|
||||
property Transformations: TChartAxisTransformations
|
||||
read FTransformations write SetTransformations;
|
||||
property Visible: Boolean read FVisible write SetVisible default true;
|
||||
property ZPosition: TChartDistance read FZPosition write SetZPosition default 0;
|
||||
published
|
||||
property OnMarkToText: TChartAxisMarkToTextEvent
|
||||
read FOnMarkToText write SetOnMarkToText;
|
||||
@ -241,16 +244,16 @@ type
|
||||
FImageLo, FImageHi, FMarginLo, FMarginHi: Integer;
|
||||
FLo, FHi: Integer;
|
||||
FMin, FMax: PDouble;
|
||||
function CalcOffset(AScale: Double): Double;
|
||||
function CalcScale(ASign: Integer): Double;
|
||||
constructor Init(
|
||||
AAxis: TChartAxis; AImageLo, AImageHi, AMarginLo, AMarginHi: Integer;
|
||||
AMin, AMax: PDouble);
|
||||
function CalcScale(ASign: Integer): Double;
|
||||
function CalcOffset(AScale: Double): Double;
|
||||
procedure UpdateMinMax(AConv: TAxisConvFunc);
|
||||
end;
|
||||
|
||||
function SideByAlignment(
|
||||
var ARect: TRect; AAlignment: TChartAxisAlignment; ADelta: Integer): Integer;
|
||||
procedure SideByAlignment(
|
||||
var ARect: TRect; AAlignment: TChartAxisAlignment; ADelta: Integer);
|
||||
function TransformByAxis(
|
||||
AAxisList: TChartAxisList; AIndex: Integer): TChartAxisTransformations;
|
||||
|
||||
@ -267,12 +270,11 @@ type
|
||||
var
|
||||
VIdentityTransform: TChartAxisTransformations;
|
||||
|
||||
function SideByAlignment(
|
||||
var ARect: TRect; AAlignment: TChartAxisAlignment; ADelta: Integer): Integer;
|
||||
procedure SideByAlignment(
|
||||
var ARect: TRect; AAlignment: TChartAxisAlignment; ADelta: Integer);
|
||||
var
|
||||
a: TChartAxisMargins absolute ARect;
|
||||
begin
|
||||
Result := a[AAlignment];
|
||||
if AAlignment in [calLeft, calTop] then
|
||||
ADelta := -ADelta;
|
||||
a[AAlignment] += ADelta;
|
||||
@ -414,16 +416,23 @@ end;
|
||||
|
||||
procedure TChartAxis.Draw(
|
||||
ACanvas: TCanvas; const AExtent: TDoubleRect;
|
||||
const ATransf: ICoordTransformer; var ARect: TRect);
|
||||
const ATransf: ICoordTransformer; const ARect: TRect);
|
||||
|
||||
var
|
||||
prevLabelPoly: TPointArray = nil;
|
||||
zoffset: TPoint;
|
||||
|
||||
procedure LineZ(AP1, AP2: TPoint);
|
||||
begin
|
||||
ACanvas.Line(AP1 + zoffset, AP2 + zoffset);
|
||||
end;
|
||||
|
||||
procedure DrawLabelAndTick(
|
||||
const ALabelCenter: TPoint; const ATickRect: TRect; const AText: String);
|
||||
ALabelCenter: TPoint; const ATickRect: TRect; const AText: String);
|
||||
begin
|
||||
PrepareSimplePen(ACanvas, TickColor);
|
||||
ACanvas.Line(ATickRect);
|
||||
LineZ(ATickRect.TopLeft, ATickRect.BottomRight);
|
||||
ALabelCenter += zoffset;
|
||||
Marks.DrawLabel(ACanvas, ALabelCenter, ALabelCenter, AText, prevLabelPoly);
|
||||
end;
|
||||
|
||||
@ -436,9 +445,9 @@ var
|
||||
if Grid.Visible then begin
|
||||
ACanvas.Pen.Assign(Grid);
|
||||
ACanvas.Brush.Style := bsClear;
|
||||
ACanvas.Line(
|
||||
x, ATransf.YGraphToImage(AExtent.a.Y),
|
||||
x, ATransf.YGraphToImage(AExtent.b.Y));
|
||||
LineZ(
|
||||
Point(x, ATransf.YGraphToImage(AExtent.a.Y)),
|
||||
Point(x, ATransf.YGraphToImage(AExtent.b.Y)));
|
||||
end;
|
||||
|
||||
d := TickLength + Marks.CenterOffset(ACanvas, AText).cy;
|
||||
@ -457,9 +466,9 @@ var
|
||||
if Grid.Visible then begin
|
||||
ACanvas.Pen.Assign(Grid);
|
||||
ACanvas.Brush.Style := bsClear;
|
||||
ACanvas.Line(
|
||||
ATransf.XGraphToImage(AExtent.a.X), y,
|
||||
ATransf.XGraphToImage(AExtent.b.X), y);
|
||||
LineZ(
|
||||
Point(ATransf.XGraphToImage(AExtent.a.X), y),
|
||||
Point(ATransf.XGraphToImage(AExtent.b.X), y));
|
||||
end;
|
||||
|
||||
d := TickLength + Marks.CenterOffset(ACanvas, AText).cx;
|
||||
@ -472,10 +481,12 @@ var
|
||||
var
|
||||
i, coord: Integer;
|
||||
v: Double;
|
||||
a: TChartAxisMargins absolute ARect;
|
||||
begin
|
||||
if not Visible then exit;
|
||||
ACanvas.Font := Marks.LabelFont;
|
||||
coord := SideByAlignment(ARect, Alignment, 0);
|
||||
coord := a[Alignment];
|
||||
zoffset := Point(-ZPosition, ZPosition);
|
||||
for i := 0 to High(FMarkValues) do begin
|
||||
v := GetTransform.AxisToGraph(FMarkValues[i]);
|
||||
if IsVertical then
|
||||
@ -487,7 +498,7 @@ end;
|
||||
|
||||
procedure TChartAxis.DrawTitle(
|
||||
ACanvas: TCanvas; const ACenter: TPoint;
|
||||
const AMeasureData: TChartAxisMeasureData; var ARect: TRect);
|
||||
const AMeasureData: TChartAxisMeasureData; const ARect: TRect);
|
||||
var
|
||||
p: TPoint;
|
||||
dummy: TPointArray = nil;
|
||||
@ -502,6 +513,7 @@ begin
|
||||
calRight: p.X := ARect.Right + d;
|
||||
calBottom: p.Y := ARect.Bottom + d;
|
||||
end;
|
||||
p += Point(-ZPosition, ZPosition);
|
||||
Title.DrawLabel(ACanvas, p, p, Title.Caption, dummy);
|
||||
end;
|
||||
|
||||
@ -699,6 +711,13 @@ begin
|
||||
StyleChanged(Self);
|
||||
end;
|
||||
|
||||
procedure TChartAxis.SetZPosition(const AValue: TChartDistance);
|
||||
begin
|
||||
if FZPosition = AValue then exit;
|
||||
FZPosition := AValue;
|
||||
StyleChanged(Self);
|
||||
end;
|
||||
|
||||
procedure TChartAxis.StyleChanged(ASender: TObject);
|
||||
begin
|
||||
with Collection.Owner as TCustomChart do begin
|
||||
|
Loading…
Reference in New Issue
Block a user