My turn at fixing this TimeSignature issue.
This commit is contained in:
+10
-4
@@ -118,19 +118,25 @@ void TimingData::SetTimeSignatureAtRow( int iRow, int iNumerator, int iDenominat
|
|||||||
break; // We found our segment.
|
break; // We found our segment.
|
||||||
}
|
}
|
||||||
|
|
||||||
if( i == m_vTimeSignatureSegments.size() ) // there is no TimeSignature Segment at the current beat
|
if ( i == m_vTimeSignatureSegments.size() || m_vTimeSignatureSegments[i].m_iStartRow != iRow )
|
||||||
{
|
{
|
||||||
|
// No specific segmeent here: place one if it differs.
|
||||||
|
if( i == 0 ||
|
||||||
|
( m_vTimeSignatureSegments[i-1].m_iNumerator != iNumerator
|
||||||
|
|| m_vTimeSignatureSegments[i-1].m_iDenominator != iDenominator ) )
|
||||||
AddTimeSignatureSegment( TimeSignatureSegment(iRow, iNumerator, iDenominator) );
|
AddTimeSignatureSegment( TimeSignatureSegment(iRow, iNumerator, iDenominator) );
|
||||||
}
|
}
|
||||||
else // TimeSignatureSegment being modified is m_vTimeSignatureSegments[i]
|
else // TimeSignatureSegment being modified is m_vTimeSignatureSegments[i]
|
||||||
{
|
{
|
||||||
if( iNumerator > 0 && iDenominator > 0 )
|
if( i > 0 && m_vTimeSignatureSegments[i-1].m_iNumerator == iNumerator
|
||||||
|
&& m_vTimeSignatureSegments[i-1].m_iDenominator == iDenominator )
|
||||||
|
m_vTimeSignatureSegments.erase( m_vTimeSignatureSegments.begin()+i,
|
||||||
|
m_vTimeSignatureSegments.begin()+i+1 );
|
||||||
|
else
|
||||||
{
|
{
|
||||||
m_vTimeSignatureSegments[i].m_iNumerator = iNumerator;
|
m_vTimeSignatureSegments[i].m_iNumerator = iNumerator;
|
||||||
m_vTimeSignatureSegments[i].m_iDenominator = iDenominator;
|
m_vTimeSignatureSegments[i].m_iDenominator = iDenominator;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
m_vTimeSignatureSegments.erase( m_vTimeSignatureSegments.begin()+i, m_vTimeSignatureSegments.begin()+i+1 );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user