mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-28 15:20:49 +02:00
TAChart: Paint series shadow to have a constant pixel distance to original position. Issue #35640, patch by Marcin Wiazowski.
git-svn-id: trunk@61304 -
This commit is contained in:
parent
81b06ad0e5
commit
c754e91aae
@ -232,6 +232,7 @@ type
|
|||||||
FExtentBroadcaster: TBroadcaster;
|
FExtentBroadcaster: TBroadcaster;
|
||||||
FIsZoomed: Boolean;
|
FIsZoomed: Boolean;
|
||||||
FOffset: TDoublePoint; // Coordinates transformation
|
FOffset: TDoublePoint; // Coordinates transformation
|
||||||
|
FOffsetInt: TPoint; // Coordinates transformation
|
||||||
FOnAfterPaint: TChartEvent;
|
FOnAfterPaint: TChartEvent;
|
||||||
FOnExtentChanged: TChartEvent;
|
FOnExtentChanged: TChartEvent;
|
||||||
FOnExtentChanging: TChartEvent;
|
FOnExtentChanging: TChartEvent;
|
||||||
@ -604,6 +605,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
FOffset.X := rX.CalcOffset(FScale.X);
|
FOffset.X := rX.CalcOffset(FScale.X);
|
||||||
FOffset.Y := rY.CalcOffset(FScale.Y);
|
FOffset.Y := rY.CalcOffset(FScale.Y);
|
||||||
|
FOffsetInt := Point(0, 0);
|
||||||
FScalingValid := True;
|
FScalingValid := True;
|
||||||
rX.UpdateMinMax(@XImageToGraph);
|
rX.UpdateMinMax(@XImageToGraph);
|
||||||
rY.UpdateMinMax(@YImageToGraph);
|
rY.UpdateMinMax(@YImageToGraph);
|
||||||
@ -788,8 +790,8 @@ procedure TChart.DisplaySeries(ADrawer: IChartDrawer);
|
|||||||
|
|
||||||
procedure OffsetDrawArea(ADX, ADY: Integer); inline;
|
procedure OffsetDrawArea(ADX, ADY: Integer); inline;
|
||||||
begin
|
begin
|
||||||
FOffset.X += ADX;
|
FOffsetInt.X += ADX;
|
||||||
FOffset.Y += ADY;
|
FOffsetInt.Y += ADY;
|
||||||
OffsetRect(FClipRect, ADX, ADY);
|
OffsetRect(FClipRect, ADX, ADY);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -1892,7 +1894,7 @@ begin
|
|||||||
if not FScalingValid then
|
if not FScalingValid then
|
||||||
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'XGraphToImage']);
|
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'XGraphToImage']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Result := ImgRoundChecked(FScale.X * AX + FOffset.X);
|
Result := ImgRoundChecked(FScale.X * AX + FOffset.X) + FOffsetInt.X;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TChart.XImageToGraph(AX: Integer): Double;
|
function TChart.XImageToGraph(AX: Integer): Double;
|
||||||
@ -1901,7 +1903,7 @@ begin
|
|||||||
if not FScalingValid then
|
if not FScalingValid then
|
||||||
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'XImageToGraph']);
|
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'XImageToGraph']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Result := (AX - FOffset.X) / FScale.X;
|
Result := ((AX - FOffsetInt.X) - FOffset.X) / FScale.X;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TChart.YGraphToImage(AY: Double): Integer;
|
function TChart.YGraphToImage(AY: Double): Integer;
|
||||||
@ -1910,7 +1912,7 @@ begin
|
|||||||
if not FScalingValid then
|
if not FScalingValid then
|
||||||
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'YGraphToImage']);
|
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'YGraphToImage']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Result := ImgRoundChecked(FScale.Y * AY + FOffset.Y);
|
Result := ImgRoundChecked(FScale.Y * AY + FOffset.Y) + FOffsetInt.Y;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TChart.YImageToGraph(AY: Integer): Double;
|
function TChart.YImageToGraph(AY: Integer): Double;
|
||||||
@ -1919,7 +1921,7 @@ begin
|
|||||||
if not FScalingValid then
|
if not FScalingValid then
|
||||||
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'YImageToGraph']);
|
raise EChartError.CreateFmt(SScalingNotInitialized, [NameOrClassName(self), 'YImageToGraph']);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
Result := (AY - FOffset.Y) / FScale.Y;
|
Result := ((AY - FOffsetInt.Y) - FOffset.Y) / FScale.Y;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TChart.RequestMultiPassScaling;
|
procedure TChart.RequestMultiPassScaling;
|
||||||
|
Loading…
Reference in New Issue
Block a user