1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-04-30 07:39:42 +02:00

One less delegating ctor of SnapManager, move code to TimeShiftHandle

This commit is contained in:
Paul Licameli 2020-09-09 08:09:39 -04:00
parent aa4b808714
commit dc9eaf6a3a
3 changed files with 64 additions and 85 deletions

View File

@ -69,65 +69,6 @@ SnapPointArray FindCandidates( const TrackList &tracks )
}
return candidates;
}
SnapPointArray FindCandidates(
const TrackList &tracks,
const TrackClipArray *clipExclusions, const TrackArray *trackExclusions )
{
// Special case restricted candidates for time shift
SnapPointArray candidates;
auto trackRange =
tracks.Any()
- [&](const Track *pTrack){
return trackExclusions &&
make_iterator_range( *trackExclusions ).contains( pTrack );
};
trackRange.Visit(
[&](const LabelTrack *labelTrack) {
for (int i = 0, cnt = labelTrack->GetNumLabels(); i < cnt; ++i)
{
const LabelStruct *label = labelTrack->GetLabel(i);
const double t0 = label->getT0();
const double t1 = label->getT1();
candidates.emplace_back(t0, labelTrack);
if (t1 != t0)
candidates.emplace_back(t1, labelTrack);
}
},
[&](const WaveTrack *waveTrack) {
for (const auto &clip: waveTrack->GetClips())
{
if (clipExclusions)
{
bool skip = false;
for (size_t j = 0, cnt = clipExclusions->size(); j < cnt; ++j)
{
if ((*clipExclusions)[j].track == waveTrack &&
(*clipExclusions)[j].clip == clip.get())
{
skip = true;
break;
}
}
if (skip)
continue;
}
candidates.emplace_back(clip->GetStartTime(), waveTrack);
candidates.emplace_back(clip->GetEndTime(), waveTrack);
}
}
#ifdef USE_MIDI
,
[&](const NoteTrack *track) {
candidates.emplace_back(track->GetStartTime(), track);
candidates.emplace_back(track->GetEndTime(), track);
}
#endif
);
return candidates;
}
}
SnapManager::SnapManager(const AudacityProject &project,
@ -141,19 +82,6 @@ SnapManager::SnapManager(const AudacityProject &project,
{
}
SnapManager::SnapManager(const AudacityProject &project,
const TrackList &tracks,
const ZoomInfo &zoomInfo,
bool noTimeSnap,
int pixelTolerance,
const TrackClipArray *clipExclusions,
const TrackArray *trackExclusions)
: SnapManager{ project,
FindCandidates( tracks, clipExclusions, trackExclusions ),
zoomInfo, noTimeSnap, pixelTolerance }
{
}
SnapManager::~SnapManager()
{
}

View File

@ -89,13 +89,6 @@ public:
bool noTimeSnap = false,
int pixelTolerance = kPixelTolerance);
SnapManager(const AudacityProject &project,
const TrackList &tracks,
const ZoomInfo &zoomInfo,
bool noTimeSnap,
int pixelTolerance,
const TrackClipArray *clipExclusions = NULL,
const TrackArray *trackExclusions = NULL);
~SnapManager();
// The track may be NULL.

View File

@ -350,6 +350,64 @@ void TimeShiftHandle::DoSlideHorizontal
DoOffset( state, &capturedTrack, state.hSlideAmount );
}
#include "LabelTrack.h"
namespace {
SnapPointArray FindCandidates(
const TrackList &tracks,
const TrackClipArray &clipExclusions, const TrackArray &trackExclusions )
{
// Special case restricted candidates for time shift
SnapPointArray candidates;
auto trackRange =
tracks.Any()
- [&](const Track *pTrack){
return
make_iterator_range( trackExclusions ).contains( pTrack );
};
trackRange.Visit(
[&](const LabelTrack *labelTrack) {
for (const auto &label : labelTrack->GetLabels())
{
const double t0 = label.getT0();
const double t1 = label.getT1();
candidates.emplace_back(t0, labelTrack);
if (t1 != t0)
candidates.emplace_back(t1, labelTrack);
}
},
[&](const WaveTrack *waveTrack) {
for (const auto &clip: waveTrack->GetClips())
{
bool skip = false;
for (const auto &exclusion : clipExclusions)
{
if (exclusion.track == waveTrack &&
exclusion.clip == clip.get())
{
skip = true;
break;
}
}
if (skip)
continue;
candidates.emplace_back(clip->GetStartTime(), waveTrack);
candidates.emplace_back(clip->GetEndTime(), waveTrack);
}
}
#ifdef USE_MIDI
,
[&](const NoteTrack *track) {
candidates.emplace_back(track->GetStartTime(), track);
candidates.emplace_back(track->GetEndTime(), track);
}
#endif
);
return candidates;
}
}
UIHandle::Result TimeShiftHandle::Click
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
{
@ -415,12 +473,12 @@ UIHandle::Result TimeShiftHandle::Click
mRect = rect;
mClipMoveState.mMouseClickX = event.m_x;
mSnapManager =
std::make_shared<SnapManager>(*trackList.GetOwner(), trackList,
viewInfo,
true, // don't snap to time
kPixelTolerance,
&mClipMoveState.capturedClipArray,
&mClipMoveState.trackExclusions);
std::make_shared<SnapManager>(*trackList.GetOwner(),
FindCandidates( trackList,
mClipMoveState.capturedClipArray, mClipMoveState.trackExclusions),
viewInfo,
true, // don't snap to time
kPixelTolerance);
mClipMoveState.snapLeft = -1;
mClipMoveState.snapRight = -1;
mSnapPreferRightEdge =