1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-08-02 17:09:26 +02:00

Sync lock adjustment for NoteTrack stretch...

... It applies only at button-up, not in a previewing fashion during the drag.

Realizing that preview is more work than I want to do right now.
This commit is contained in:
Paul Licameli 2017-05-12 17:41:57 -04:00
parent 54636c65fa
commit 646c66f78f
2 changed files with 34 additions and 1 deletions

View File

@ -1840,6 +1840,34 @@ void TrackPanel::HandleSelect(wxMouseEvent & event)
SelectionHandleClick(event, t, rect);
} else if (event.LeftUp() || event.RightUp()) {
mSnapManager.reset();
bool left;
if ( GetProject()->IsSyncLocked() &&
( ( left = mStretchState.mMode == stretchLeft ) ||
mStretchState.mMode == stretchRight ) ) {
auto pNt = static_cast< NoteTrack * >( mCapturedTrack );
SyncLockedTracksIterator syncIter( GetTracks() );
for ( auto track = syncIter.StartWith(pNt); track != nullptr;
track = syncIter.Next() ) {
if ( track != pNt ) {
if ( left ) {
auto origT0 = mStretchState.mOrigT0;
auto diff = mViewInfo->selectedRegion.t0() - origT0;
if ( diff > 0)
track->SyncLockAdjust( origT0 + diff, origT0 );
else
track->SyncLockAdjust( origT0, origT0 - diff );
track->Offset( diff );
}
else {
auto origT1 = mStretchState.mOrigT1;
auto diff = mViewInfo->selectedRegion.t1() - origT1;
track->SyncLockAdjust( origT1, origT1 + diff );
}
}
}
}
if ( mStretchState.mStretching ) {
MakeParentPushState(_("Stretch Note Track"), _("Stretch"),
UndoPush::CONSOLIDATE | UndoPush::AUTOSAVE);
@ -2792,8 +2820,10 @@ auto TrackPanel::ChooseStretchMode
if ( nt ) {
pState->mBeat0 =
nt->NearestBeatTime( viewInfo.selectedRegion.t0() );
pState->mOrigT0 = pState->mBeat0.first;
pState->mBeat1 =
nt->NearestBeatTime( viewInfo.selectedRegion.t1() );
pState->mOrigT1 = pState->mBeat1.first;
auto selStart = viewInfo.PositionToTime(event.m_x, rect.x);
pState->mBeatCenter = nt->NearestBeatTime( selStart );
@ -2843,8 +2873,8 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge,
return;
pNt->StretchRegion
( mStretchState.mBeat0, mStretchState.mBeat1, dur );
pNt->Offset( moveto - t0 );
mStretchState.mBeat0.first = moveto;
pNt->Offset( moveto - t0 );
mViewInfo->selectedRegion.setT0(moveto);
break;
}
@ -2854,6 +2884,7 @@ void TrackPanel::Stretch(int mouseXCoordinate, int trackLeftEdge,
return;
pNt->StretchRegion
( mStretchState.mBeat0, mStretchState.mBeat1, dur );
mViewInfo->selectedRegion.setT1(moveto);
mStretchState.mBeat1.first = moveto;
break;

View File

@ -331,6 +331,8 @@ class AUDACITY_DLL_API TrackPanel final : public OverlayPanel {
using QuantizedTimeAndBeat = std::pair< double, double >;
bool mStretching {}; // true between mouse down and mouse up
double mOrigT0 {};
double mOrigT1 {};
QuantizedTimeAndBeat mBeatCenter { 0, 0 };
QuantizedTimeAndBeat mBeat0 { 0, 0 };
QuantizedTimeAndBeat mBeat1 { 0, 0 };