Add ScrollSegment checks.

Also took care of scaling TimeSignatureSegments too.
This commit is contained in:
Jason Felds
2011-05-26 17:38:31 -04:00
parent 2bb6349ade
commit 2d491fd0c0
+46
View File
@@ -1038,6 +1038,17 @@ void TimingData::ScaleRegion( float fScale, int iStartIndex, int iEndIndex, bool
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++ )
{
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;
}
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
if( bAdjustBPM )
{
@@ -1218,6 +1240,14 @@ void TimingData::InsertRows( int iStartRow, int iRowsToAdd )
continue;
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 )
{
@@ -1405,6 +1435,22 @@ void TimingData::DeleteRows( int iStartRow, int 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 );
}