TAChart: If Chart.Extent.Use{X/Y}{Min/Max} is set, use corresponding boundary unconditionally.

Previously it was not used if some series expanded beyond it.
This fixes issue #13681.

git-svn-id: trunk@20095 -
This commit is contained in:
ask 2009-05-21 08:37:16 +00:00
parent 05c0578025
commit 453a046de9

View File

@ -1296,68 +1296,29 @@ procedure TChart.UpdateExtent;
procedure SetBounds(
var ALo, AHi: Double; AMin, AMax: Double; AUseMin, AUseMax: Boolean);
procedure SetLo(AValue: Double);
begin
ALo := IfThen(AUseMin and (AValue < AMin), AMin, AValue);
end;
procedure SetHi(AValue: Double);
begin
AHi := IfThen(AUseMax and (AValue > AMax), AMax, AValue);
end;
const
PERCENT = 0.01;
DEFAULT_WIDTH = 2.0;
var
ext: Double;
begin
if (ALo = Infinity) and (AHi = NegInfinity) then begin
// No boundaries, try to use extent
if not AUseMin and not AUseMax then begin
// Nothing we can do, give up
ALo := -1;
AHi := 1;
end
else if AUseMin then begin
ALo := AMin;
AHi := IfThen(AUseMax, AMax, ALo + 1);
end
else begin // Only AUseMax is true
AHi := AMax;
ALo := AHi - 1;
if AUseMin then ALo := AMin;
if AUseMax then AHi := AMax;
case Ord(ALo = Infinity) * 2 + Ord(AHi = NegInfinity) of
0: begin // Both high and low boundary defined
if ALo > AHi then Exchange(ALo, AHi);
// Expand view slightly to avoid puttind data points on the chart edge.
ext := ExpandPercentage * PERCENT * Max(AHi - ALo, 1);
SetLo(ALo - ext);
SetHi(AHi + ext);
end;
1: AHi := ALo + DEFAULT_WIDTH;
2: ALo := AHi - DEFAULT_WIDTH;
3: begin // No boundaries defined, take some arbitrary values
ALo := -DEFAULT_WIDTH / 2;
AHi := DEFAULT_WIDTH / 2;
end;
end
else if ALo = Infinity then begin
SetHi(AHi);
if AUseMin then begin
ALo := AMin;
if ALo >= AHi then SetHi(ALo + 1);
end
else
ALo := AHi - 1;
end
else if AHi = NegInfinity then begin
SetLo(ALo);
if AUseMax then begin
AHi := AMax;
if ALo >= AHi then SetLo(AHi - 1);
end
else
AHi := ALo + 1;
end
else begin
// Both high and low boundary defined
SetLo(ALo);
if ALo >= AHi then SetHi(ALo + 1);
SetHi(AHi);
if ALo >= AHi then SetLo(AHi - 1);
// Expand view slightly to avoid puttind data points on the chart edge.
ext := ExpandPercentage * PERCENT * (AHi - ALo);
SetLo(ALo - ext);
SetHi(AHi + ext);
end;
end;
var