1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-16 16:10:06 +02:00

Bug 1132: Time shift should not snap to starting positions of moving labels

This commit is contained in:
Paul Licameli 2015-08-08 16:10:33 -04:00
parent 2091185b07
commit cfdbc35990
4 changed files with 22 additions and 5 deletions

View File

@ -30,6 +30,7 @@ static int CompareSnapPoints(SnapPoint *s1, SnapPoint *s2)
}
SnapManager::SnapManager(TrackList *tracks, TrackClipArray *exclusions,
const std::vector<Track*> *pLabelTrackExclusions,
const ZoomInfo &zoomInfo, int pixelTolerance, bool noTimeSnap)
: mConverter(NumericConverter::TIME)
, mPixelTolerance(std::max(0, pixelTolerance))
@ -61,9 +62,15 @@ SnapManager::SnapManager(TrackList *tracks, TrackClipArray *exclusions,
mSnapPoints->Add(new SnapPoint(0.0, NULL));
TrackListIterator iter(tracks);
Track *track = iter.First();
while (track) {
for (Track *track = iter.First(); track; track = iter.Next()) {
if (track->GetKind() == Track::Label) {
if (pLabelTrackExclusions) {
const std::vector<Track*>::const_iterator
begin = pLabelTrackExclusions->begin(),
end = pLabelTrackExclusions->end();
if (end != std::find(begin, end, track))
continue;
}
LabelTrack *labelTrack = (LabelTrack *)track;
for(i = 0; i < labelTrack->GetNumLabels(); i++) {
const LabelStruct *label = labelTrack->GetLabel(i);
@ -100,7 +107,6 @@ SnapManager::SnapManager(TrackList *tracks, TrackClipArray *exclusions,
CondListAdd(track->GetEndTime(), track);
}
#endif
track = iter.Next();
}
}

View File

@ -21,6 +21,7 @@
#include "widgets/NumericTextCtrl.h"
class LabelTrack;
class Track;
class WaveClip;
class TrackList;
@ -58,6 +59,7 @@ WX_DEFINE_SORTED_ARRAY(SnapPoint *, SnapPointArray);
class SnapManager {
public:
SnapManager(TrackList *tracks, TrackClipArray *exclusions,
const std::vector<Track*> *pLabelTrackExclusions,
const ZoomInfo &zoomInfo, int pixelTolerance, bool noTimeSnap = false);
~SnapManager();

View File

@ -2528,7 +2528,7 @@ void TrackPanel::SelectionHandleClick(wxMouseEvent & event,
if (mSnapManager)
delete mSnapManager;
mSnapManager = new SnapManager(mTracks, NULL,
mSnapManager = new SnapManager(mTracks, NULL, NULL,
*mViewInfo,
4); // pixel tolerance
@ -3895,6 +3895,8 @@ void TrackPanel::StartSlide(wxMouseEvent & event)
mHSlideAmount = 0.0;
mDidSlideVertically = false;
std::vector<Track*> trackExclusions;
Track *vt = FindTrack(event.m_x, event.m_y, false, false, &rect);
if (!vt)
return;
@ -3940,6 +3942,8 @@ void TrackPanel::StartSlide(wxMouseEvent & event)
for (Track *t = iter.First(); t; t = iter.Next()) {
if (t->GetSelected()) {
AddClipsToCaptured(t, true);
if (t->GetKind() != Track::Wave)
trackExclusions.push_back(t);
}
}
}
@ -3984,6 +3988,8 @@ void TrackPanel::StartSlide(wxMouseEvent & event)
AddClipsToCaptured(t,
mCapturedClipArray[i].clip->GetStartTime(),
mCapturedClipArray[i].clip->GetEndTime() );
if (t->GetKind() != Track::Wave)
trackExclusions.push_back(t);
}
}
#ifdef USE_MIDI
@ -3995,6 +4001,8 @@ void TrackPanel::StartSlide(wxMouseEvent & event)
for (Track *t = git.First(nt); t; t = git.Next())
{
AddClipsToCaptured(t, nt->GetStartTime(), nt->GetEndTime());
if (t->GetKind() != Track::Wave)
trackExclusions.push_back(t);
}
}
#endif
@ -4021,6 +4029,7 @@ void TrackPanel::StartSlide(wxMouseEvent & event)
delete mSnapManager;
mSnapManager = new SnapManager(mTracks,
&mCapturedClipArray,
&trackExclusions,
*mViewInfo,
4, // pixel tolerance
true); // don't snap to time

View File

@ -2290,7 +2290,7 @@ void AdornedRulerPanel::HandleSnapping()
// Create a new snap manager in case any snap-points have changed
delete mSnapManager;
}
mSnapManager = new SnapManager(mProject->GetTracks(), NULL,
mSnapManager = new SnapManager(mProject->GetTracks(), NULL, NULL,
*mViewInfo,
QUICK_PLAY_SNAP_PIXEL);
bool snappedPoint, snappedTime;