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:
parent
54636c65fa
commit
646c66f78f
@ -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;
|
||||
|
@ -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 };
|
||||
|
Loading…
x
Reference in New Issue
Block a user