diff options
author | Be <be@mixxx.org> | 2020-05-07 07:07:43 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-07 07:07:43 -0500 |
commit | d5be6d44272763cfdc1b19c4a8e5099df11b82dc (patch) | |
tree | 3a8ccd4b96adac93303144ead7b3b497837dca02 /src | |
parent | 8f7f352fa41e696fd80b8216670be817a1187e1e (diff) | |
parent | 7541fe5f2cb07c6a39cc0e188938dddb36c70715 (diff) |
Merge pull request #2678 from Holzhaus/save-most-recent-loop
Fix load/save of most recent loop
Diffstat (limited to 'src')
-rw-r--r-- | src/mixer/basetrackplayer.cpp | 32 |
1 files changed, 23 insertions, 9 deletions
diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp index 4ce79db24c..7cf563c464 100644 --- a/src/mixer/basetrackplayer.cpp +++ b/src/mixer/basetrackplayer.cpp @@ -218,16 +218,29 @@ void BaseTrackPlayerImpl::loadTrack(TrackPointer pTrack) { if (!m_pChannelToCloneFrom) { const QList<CuePointer> trackCues(m_pLoadedTrack->getCuePoints()); QListIterator<CuePointer> it(trackCues); + CuePointer pLoopCue; + // Restore loop from the first loop cue with minimum hotcue number. + // For the volatile "most recent loop" the hotcue number will be -1. + // If no such loop exists, restore a saved loop cue. while (it.hasNext()) { CuePointer pCue(it.next()); - if (pCue->getType() == mixxx::CueType::Loop) { - double loopStart = pCue->getPosition(); - double loopEnd = loopStart + pCue->getLength(); - if (loopStart != kNoTrigger && loopEnd != kNoTrigger && loopStart <= loopEnd) { - m_pLoopInPoint->set(loopStart); - m_pLoopOutPoint->set(loopEnd); - break; - } + if (pCue->getType() != mixxx::CueType::Loop) { + continue; + } + + if (pLoopCue && pLoopCue->getHotCue() <= pCue->getHotCue()) { + continue; + } + + pLoopCue = pCue; + } + + if (pLoopCue) { + double loopStart = pLoopCue->getPosition(); + double loopEnd = loopStart + pLoopCue->getLength(); + if (loopStart != kNoTrigger && loopEnd != kNoTrigger && loopStart <= loopEnd) { + m_pLoopInPoint->set(loopStart); + m_pLoopOutPoint->set(loopEnd); } } } else { @@ -258,8 +271,9 @@ TrackPointer BaseTrackPlayerImpl::unloadTrack() { QListIterator<CuePointer> it(cuePoints); while (it.hasNext()) { CuePointer pCue(it.next()); - if (pCue->getType() == mixxx::CueType::Loop) { + if (pCue->getType() == mixxx::CueType::Loop && pCue->getHotCue() == Cue::kNoHotCue) { pLoopCue = pCue; + break; } } if (!pLoopCue) { |