1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-11-16 06:03:49 +01:00

Iterate over the pending tracks for drawing

This commit is contained in:
Paul Licameli
2018-01-10 16:02:51 -05:00
parent 7d57a17ff4
commit ce5a67a9e9
7 changed files with 141 additions and 37 deletions

View File

@@ -1846,8 +1846,17 @@ void TrackPanel::DrawTracks(wxDC * dc)
TrackPanelDrawingContext context{ *dc, Target(), mLastMouseState };
// The track artist actually draws the stuff inside each track
auto first = GetProject()->GetFirstVisible();
mTrackArtist->DrawTracks(context, GetTracks(), first.get(),
auto project = GetProject();
// Make a function that reproduces the range, because, quirkily, the range
// can't be copied and iterated twice. Fix that later.
auto range = [&]{
return make_iterator_range(
PendingTrackIterator{ project->GetTracks(),
std::make_shared<VisibleTrackIterator>( project ) },
PendingTrackIterator{}
);
};
mTrackArtist->DrawTracks(context, range,
region, tracksRect, clip,
mViewInfo->selectedRegion, *mViewInfo,
envelopeFlag, bigPointsFlag, sliderFlag);
@@ -1869,8 +1878,13 @@ void TrackPanel::DrawEverythingElse(TrackPanelDrawingContext &context,
wxRect trackRect = clip;
trackRect.height = 0; // for drawing background in no tracks case.
VisibleTrackIterator iter(GetProject());
for (Track *t = iter.First(); t; t = iter.Next()) {
auto project = GetProject();
PendingTrackIterator
begin{ project->GetTracks(),
std::make_shared<VisibleTrackIterator>( project ) },
end;
for (const auto &track : make_iterator_range(begin, end)) {
auto t = track.get();
trackRect.y = t->GetY() - mViewInfo->vpos;
trackRect.height = t->GetHeight();