mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-15 15:49:36 +02:00
One less delegating ctor of SnapManager, move code to TimeShiftHandle
This commit is contained in:
parent
aa4b808714
commit
dc9eaf6a3a
72
src/Snap.cpp
72
src/Snap.cpp
@ -69,65 +69,6 @@ SnapPointArray FindCandidates( const TrackList &tracks )
|
|||||||
}
|
}
|
||||||
return candidates;
|
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,
|
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()
|
SnapManager::~SnapManager()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -89,13 +89,6 @@ public:
|
|||||||
bool noTimeSnap = false,
|
bool noTimeSnap = false,
|
||||||
int pixelTolerance = kPixelTolerance);
|
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();
|
~SnapManager();
|
||||||
|
|
||||||
// The track may be NULL.
|
// The track may be NULL.
|
||||||
|
@ -350,6 +350,64 @@ void TimeShiftHandle::DoSlideHorizontal
|
|||||||
DoOffset( state, &capturedTrack, state.hSlideAmount );
|
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
|
UIHandle::Result TimeShiftHandle::Click
|
||||||
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
|
(const TrackPanelMouseEvent &evt, AudacityProject *pProject)
|
||||||
{
|
{
|
||||||
@ -415,12 +473,12 @@ UIHandle::Result TimeShiftHandle::Click
|
|||||||
mRect = rect;
|
mRect = rect;
|
||||||
mClipMoveState.mMouseClickX = event.m_x;
|
mClipMoveState.mMouseClickX = event.m_x;
|
||||||
mSnapManager =
|
mSnapManager =
|
||||||
std::make_shared<SnapManager>(*trackList.GetOwner(), trackList,
|
std::make_shared<SnapManager>(*trackList.GetOwner(),
|
||||||
viewInfo,
|
FindCandidates( trackList,
|
||||||
true, // don't snap to time
|
mClipMoveState.capturedClipArray, mClipMoveState.trackExclusions),
|
||||||
kPixelTolerance,
|
viewInfo,
|
||||||
&mClipMoveState.capturedClipArray,
|
true, // don't snap to time
|
||||||
&mClipMoveState.trackExclusions);
|
kPixelTolerance);
|
||||||
mClipMoveState.snapLeft = -1;
|
mClipMoveState.snapLeft = -1;
|
||||||
mClipMoveState.snapRight = -1;
|
mClipMoveState.snapRight = -1;
|
||||||
mSnapPreferRightEdge =
|
mSnapPreferRightEdge =
|
||||||
|
Loading…
x
Reference in New Issue
Block a user