diff options
author | Uwe Klotz <uklotz@mixxx.org> | 2020-05-22 09:55:28 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-22 09:55:28 +0200 |
commit | 4a0daeb0ec2349150319875edf6b6b80f0322c9d (patch) | |
tree | eb3c47478996956ce2ae207adf5ceeafa488e577 /src/track | |
parent | 24a2ff1e83cdf4e26d87e7b310faee3cceacf0f2 (diff) | |
parent | d0dbbc4ee1ce804b7400f82f733c7edb9334a5fa (diff) |
Merge pull request #2737 from Be-ing/timing_shifts_ui
add ControlObjects for shifting cue points
Diffstat (limited to 'src/track')
-rw-r--r-- | src/track/cue.cpp | 13 | ||||
-rw-r--r-- | src/track/cue.h | 1 | ||||
-rw-r--r-- | src/track/track.cpp | 14 | ||||
-rw-r--r-- | src/track/track.h | 2 |
4 files changed, 30 insertions, 0 deletions
diff --git a/src/track/cue.cpp b/src/track/cue.cpp index b2d9233d34..96d0365f64 100644 --- a/src/track/cue.cpp +++ b/src/track/cue.cpp @@ -195,6 +195,19 @@ void Cue::setEndPosition(double samplePosition) { emit updated(); } +void Cue::shiftPositionFrames(double frameOffset) { + QMutexLocker lock(&m_mutex); + if (m_sampleStartPosition != kNoPosition) { + m_sampleStartPosition += frameOffset * mixxx::kEngineChannelCount; + } + if (m_sampleEndPosition != kNoPosition) { + m_sampleEndPosition += frameOffset * mixxx::kEngineChannelCount; + } + m_bDirty = true; + lock.unlock(); + emit updated(); +} + double Cue::getLength() const { QMutexLocker lock(&m_mutex); if (m_sampleEndPosition == Cue::kNoPosition) { diff --git a/src/track/cue.h b/src/track/cue.h index f6fe28ae72..d7c6d36f9a 100644 --- a/src/track/cue.h +++ b/src/track/cue.h @@ -48,6 +48,7 @@ class Cue : public QObject { double samplePosition = kNoPosition); void setEndPosition( double samplePosition = kNoPosition); + void shiftPositionFrames(double frameOffset); double getLength() const; diff --git a/src/track/track.cpp b/src/track/track.cpp index 24781b18df..1547a42985 100644 --- a/src/track/track.cpp +++ b/src/track/track.cpp @@ -759,6 +759,20 @@ void Track::setCuePoint(CuePosition cue) { emit cuesUpdated(); } +void Track::shiftCuePositionsMillis(double milliseconds) { + QMutexLocker lock(&m_qMutex); + + VERIFY_OR_DEBUG_ASSERT(m_streamInfo) { + return; + } + double frames = m_streamInfo->getSignalInfo().millis2frames(milliseconds); + for (const CuePointer& pCue : m_cuePoints) { + pCue->shiftPositionFrames(frames); + } + + markDirtyAndUnlock(&lock); +} + void Track::analysisFinished() { emit analyzed(); } diff --git a/src/track/track.h b/src/track/track.h index 7d7c0c6ba7..75524ee438 100644 --- a/src/track/track.h +++ b/src/track/track.h @@ -252,6 +252,8 @@ class Track : public QObject { CuePosition getCuePoint() const; // Set the track's main cue point void setCuePoint(CuePosition cue); + /// Shift all cues by a constant offset + void shiftCuePositionsMillis(double milliseconds); // Call when analysis is done. void analysisFinished(); |