summaryrefslogtreecommitdiffstats
path: root/src/track
diff options
context:
space:
mode:
authorUwe Klotz <uklotz@mixxx.org>2020-05-22 09:55:28 +0200
committerGitHub <noreply@github.com>2020-05-22 09:55:28 +0200
commit4a0daeb0ec2349150319875edf6b6b80f0322c9d (patch)
treeeb3c47478996956ce2ae207adf5ceeafa488e577 /src/track
parent24a2ff1e83cdf4e26d87e7b310faee3cceacf0f2 (diff)
parentd0dbbc4ee1ce804b7400f82f733c7edb9334a5fa (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.cpp13
-rw-r--r--src/track/cue.h1
-rw-r--r--src/track/track.cpp14
-rw-r--r--src/track/track.h2
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();