mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-07 21:58:20 +02:00
TAChart: Prioritize Chart.MinDataSpace when plot size is too small. Issue #34896. Patch by Marcin Wiazowski.
git-svn-id: trunk@60311 -
This commit is contained in:
parent
790027cd13
commit
33da110a2d
@ -252,7 +252,7 @@ type
|
|||||||
function CalcScale(ASign: Integer): Double;
|
function CalcScale(ASign: Integer): Double;
|
||||||
constructor Init(AAxis: TChartAxis; AImageLo, AImageHi: Integer;
|
constructor Init(AAxis: TChartAxis; AImageLo, AImageHi: Integer;
|
||||||
AMarginLo, AMarginHi, ARequiredMarginLo, ARequiredMarginHi, AMinDataSpace: Integer;
|
AMarginLo, AMarginHi, ARequiredMarginLo, ARequiredMarginHi, AMinDataSpace: Integer;
|
||||||
AHasMarksInMargin, AAxisIsVertical: Boolean; AMin, AMax: PDouble);
|
AAxisIsVertical: Boolean; AMin, AMax: PDouble);
|
||||||
procedure UpdateMinMax(AConv: TAxisConvFunc);
|
procedure UpdateMinMax(AConv: TAxisConvFunc);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1218,14 +1218,19 @@ end;
|
|||||||
procedure EnsureGuaranteedSpace(var AValue1, AValue2: Integer;
|
procedure EnsureGuaranteedSpace(var AValue1, AValue2: Integer;
|
||||||
AImage1, AImage2, AMargin1, AMargin2, AGuaranteed: Integer);
|
AImage1, AImage2, AMargin1, AMargin2, AGuaranteed: Integer);
|
||||||
var
|
var
|
||||||
|
HasMarksInMargin1, HasMarksInMargin2: Boolean;
|
||||||
delta1, delta2: Integer;
|
delta1, delta2: Integer;
|
||||||
begin
|
begin
|
||||||
if (AValue2 = AImage2 - AMargin2) then
|
HasMarksInMargin1 := (AValue1 = AImage1 + AMargin1);
|
||||||
|
HasMarksInMargin2 := (AValue2 = AImage2 - AMargin2);
|
||||||
|
|
||||||
|
if HasMarksInMargin2 and not HasMarksInMargin1 then
|
||||||
AValue1 := AValue2 - AGuaranteed
|
AValue1 := AValue2 - AGuaranteed
|
||||||
else
|
else
|
||||||
if (AValue1 = AImage1 + AMargin1) then
|
if HasMarksInMargin1 and not HasMarksInMargin2 then
|
||||||
AValue2 := AValue1 + AGuaranteed
|
AValue2 := AValue1 + AGuaranteed
|
||||||
else begin
|
else
|
||||||
|
begin
|
||||||
delta1 := AImage1 - AValue1;
|
delta1 := AImage1 - AValue1;
|
||||||
delta2 := AImage2 - AValue2;
|
delta2 := AImage2 - AValue2;
|
||||||
AValue1 := (AImage1 + AImage2 - AGuaranteed) div 2;
|
AValue1 := (AImage1 + AImage2 - AGuaranteed) div 2;
|
||||||
@ -1243,7 +1248,7 @@ end;
|
|||||||
|
|
||||||
constructor TAxisCoeffHelper.Init(AAxis: TChartAxis; AImageLo, AImageHi: Integer;
|
constructor TAxisCoeffHelper.Init(AAxis: TChartAxis; AImageLo, AImageHi: Integer;
|
||||||
AMarginLo, AMarginHi, ARequiredMarginLo, ARequiredMarginHi, AMinDataSpace: Integer;
|
AMarginLo, AMarginHi, ARequiredMarginLo, ARequiredMarginHi, AMinDataSpace: Integer;
|
||||||
AHasMarksInMargin, AAxisIsVertical: Boolean; AMin, AMax: PDouble);
|
AAxisIsVertical: Boolean; AMin, AMax: PDouble);
|
||||||
begin
|
begin
|
||||||
FAxisIsFlipped := (AAxis <> nil) and AAxis.IsFlipped;
|
FAxisIsFlipped := (AAxis <> nil) and AAxis.IsFlipped;
|
||||||
FImageLo := AImageLo;
|
FImageLo := AImageLo;
|
||||||
@ -1253,7 +1258,6 @@ begin
|
|||||||
FLo := FImageLo + AMarginLo;
|
FLo := FImageLo + AMarginLo;
|
||||||
FHi := FImageHi + AMarginHi;
|
FHi := FImageHi + AMarginHi;
|
||||||
|
|
||||||
if AHasMarksInMargin then begin
|
|
||||||
if AAxisIsVertical then begin
|
if AAxisIsVertical then begin
|
||||||
if (FHi + AMinDataSpace >= FLo) then
|
if (FHi + AMinDataSpace >= FLo) then
|
||||||
EnsureGuaranteedSpace(FHi, FLo, FImageHi, FImageLo,
|
EnsureGuaranteedSpace(FHi, FLo, FImageHi, FImageLo,
|
||||||
@ -1263,7 +1267,6 @@ begin
|
|||||||
EnsureGuaranteedSpace(FLo, FHi, FImageLo, FImageHi,
|
EnsureGuaranteedSpace(FLo, FHi, FImageLo, FImageHi,
|
||||||
ARequiredMarginLo, ARequiredMarginHi, AMinDataSpace);
|
ARequiredMarginLo, ARequiredMarginHi, AMinDataSpace);
|
||||||
end;
|
end;
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TAxisCoeffHelper.CalcScale(ASign: Integer): Double;
|
function TAxisCoeffHelper.CalcScale(ASign: Integer): Double;
|
||||||
|
@ -594,12 +594,10 @@ begin
|
|||||||
rX.Init(
|
rX.Init(
|
||||||
HorAxis, FClipRect.Left, FClipRect.Right, AMargin.Left, -AMargin.Right,
|
HorAxis, FClipRect.Left, FClipRect.Right, AMargin.Left, -AMargin.Right,
|
||||||
AChartMargins.Left, AChartMargins.Right, AMinDataSpace,
|
AChartMargins.Left, AChartMargins.Right, AMinDataSpace,
|
||||||
(AMargin.Left <> AChartMargins.Left) or (AMargin.Right <> AChartMargins.Right),
|
|
||||||
false, @FCurrentExtent.a.X, @FCurrentExtent.b.X);
|
false, @FCurrentExtent.a.X, @FCurrentExtent.b.X);
|
||||||
rY.Init(
|
rY.Init(
|
||||||
VertAxis, FClipRect.Bottom, FClipRect.Top, -AMargin.Bottom, AMargin.Top,
|
VertAxis, FClipRect.Bottom, FClipRect.Top, -AMargin.Bottom, AMargin.Top,
|
||||||
AChartMargins.Bottom, AChartMargins.Top, AMinDataSpace,
|
AChartMargins.Bottom, AChartMargins.Top, AMinDataSpace,
|
||||||
(AMargin.Top <> AChartMargins.Top) or (AMargin.Bottom <> AChartMargins.Bottom),
|
|
||||||
true, @FCurrentExtent.a.Y, @FCurrentExtent.b.Y);
|
true, @FCurrentExtent.a.Y, @FCurrentExtent.b.Y);
|
||||||
|
|
||||||
FScale.X := rX.CalcScale(1);
|
FScale.X := rX.CalcScale(1);
|
||||||
|
Loading…
Reference in New Issue
Block a user