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:
parent
2091185b07
commit
cfdbc35990
12
src/Snap.cpp
12
src/Snap.cpp
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user