Add ScrollSegment checks.
Also took care of scaling TimeSignatureSegments too.
This commit is contained in:
@@ -1038,6 +1038,17 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool
|
|||||||
m_StopSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
|
m_StopSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < m_vTimeSignatureSegments.size(); i++ )
|
||||||
|
{
|
||||||
|
const int iSegStartRow = m_vTimeSignatureSegments[i].m_iStartRow;
|
||||||
|
if( iSegStartRow < iStartIndex )
|
||||||
|
continue;
|
||||||
|
else if( iSegStartRow > iEndIndex )
|
||||||
|
m_vTimeSignatureSegments[i].m_iStartRow += lrintf((iEndIndex - iStartIndex) * (fScale - 1));
|
||||||
|
else
|
||||||
|
m_vTimeSignatureSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
|
||||||
|
}
|
||||||
|
|
||||||
for( unsigned i = 0; i < m_WarpSegments.size(); i++ )
|
for( unsigned i = 0; i < m_WarpSegments.size(); i++ )
|
||||||
{
|
{
|
||||||
const int iSegStartRow = m_WarpSegments[i].m_iStartRow;
|
const int iSegStartRow = m_WarpSegments[i].m_iStartRow;
|
||||||
@@ -1120,6 +1131,17 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool
|
|||||||
m_FakeSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
|
m_FakeSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
|
||||||
|
{
|
||||||
|
const int iSegStartRow = m_ScrollSegments[i].m_iStartRow;
|
||||||
|
if( iSegStartRow < iStartIndex )
|
||||||
|
continue;
|
||||||
|
else if( iSegStartRow > iEndIndex )
|
||||||
|
m_ScrollSegments[i].m_iStartRow += lrintf((iEndIndex - iStartIndex) * (fScale - 1));
|
||||||
|
else
|
||||||
|
m_ScrollSegments[i].m_iStartRow = lrintf((iSegStartRow - iStartIndex) * fScale) + iStartIndex;
|
||||||
|
}
|
||||||
|
|
||||||
// adjust BPM changes to preserve timing
|
// adjust BPM changes to preserve timing
|
||||||
if( bAdjustBPM )
|
if( bAdjustBPM )
|
||||||
{
|
{
|
||||||
@@ -1219,6 +1241,14 @@ void TimingData::InsertRows( int iStartRow, int iRowsToAdd )
|
|||||||
fake.m_iStartRow += iRowsToAdd;
|
fake.m_iStartRow += iRowsToAdd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
|
||||||
|
{
|
||||||
|
ScrollSegment &scrl = m_ScrollSegments[i];
|
||||||
|
if( scrl.m_iStartRow < iStartRow )
|
||||||
|
continue;
|
||||||
|
scrl.m_iStartRow += iRowsToAdd;
|
||||||
|
}
|
||||||
|
|
||||||
if( iStartRow == 0 )
|
if( iStartRow == 0 )
|
||||||
{
|
{
|
||||||
/* If we're shifting up at the beginning, we just shifted up the first
|
/* If we're shifting up at the beginning, we just shifted up the first
|
||||||
@@ -1406,6 +1436,22 @@ void TimingData::DeleteRows( int iStartRow, int iRowsToDelete )
|
|||||||
fake.m_iStartRow -= iRowsToDelete;
|
fake.m_iStartRow -= iRowsToDelete;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for( unsigned i = 0; i < m_ScrollSegments.size(); i++ )
|
||||||
|
{
|
||||||
|
ScrollSegment &scrl = m_ScrollSegments[i];
|
||||||
|
|
||||||
|
if( scrl.m_iStartRow < iStartRow )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if( scrl.m_iStartRow < iStartRow+iRowsToDelete )
|
||||||
|
{
|
||||||
|
m_ScrollSegments.erase( m_ScrollSegments.begin()+i, m_ScrollSegments.begin()+i+1 );
|
||||||
|
--i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
scrl.m_iStartRow -= iRowsToDelete;
|
||||||
|
}
|
||||||
|
|
||||||
this->SetBPMAtRow( iStartRow, fNewBPM );
|
this->SetBPMAtRow( iStartRow, fNewBPM );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user