TAChart: Refactor TChart.DisplaySeries to use for-in loop

git-svn-id: trunk@40047 -
This commit is contained in:
ask 2013-01-30 05:14:51 +00:00
parent ce11068e10
commit 89b0f202b0

View File

@ -684,39 +684,39 @@ procedure TChart.DisplaySeries(ADrawer: IChartDrawer);
end; end;
var var
i, d, axisIndex: Integer; axisIndex: Integer;
seriesInZOrder: TFPList; seriesInZOrder: TChartSeriesList;
s: TBasicChartSeries;
begin begin
d := Depth;
axisIndex := 0; axisIndex := 0;
if SeriesCount > 0 then begin if SeriesCount > 0 then begin
seriesInZOrder := TFPList.Create; seriesInZOrder := TChartSeriesList.Create;
try try
seriesInZOrder.Assign(FSeries.FList); seriesInZOrder.List.Assign(FSeries.List);
seriesInZOrder.Sort(@CompareZPosition); seriesInZOrder.List.Sort(@CompareZPosition);
for i := 0 to SeriesCount - 1 do for s in seriesInZOrder do begin
with TBasicChartSeries(seriesInZOrder[i]) do begin if not s.Active then continue;
if not Active then continue;
// Interleave axises with series according to ZPosition. // Interleave axises with series according to ZPosition.
if AxisVisible then if AxisVisible then
AxisList.Draw(ZPosition, axisIndex); AxisList.Draw(s.ZPosition, axisIndex);
OffsetDrawArea(Min(ZPosition, d), Min(Depth, d)); OffsetDrawArea(Min(s.ZPosition, Depth), Min(s.Depth, Depth));
ADrawer.ClippingStart(ClipRectWithoutFrame(ZPosition)); ADrawer.ClippingStart(ClipRectWithoutFrame(s.ZPosition));
try try
try try
ADrawer.SetTransparency(Transparency); ADrawer.SetTransparency(s.Transparency);
Draw(ADrawer); s.Draw(ADrawer);
except except
Active := false; s.Active := false;
raise; raise;
end; end;
finally finally
OffsetDrawArea(-Min(ZPosition, d), -Min(Depth, d)); OffsetDrawArea(-Min(s.ZPosition, Depth), -Min(s.Depth, Depth));
ADrawer.ClippingStop; ADrawer.ClippingStop;
end; end;
end; end;
finally finally
seriesInZOrder.List.Clear; // Avoid freeing series.
seriesInZOrder.Free; seriesInZOrder.Free;
ADrawer.SetTransparency(0); ADrawer.SetTransparency(0);
end; end;