diff --git a/src/NoteField.cpp b/src/NoteField.cpp index 8b9684d2d1..29a08e081a 100644 --- a/src/NoteField.cpp +++ b/src/NoteField.cpp @@ -832,7 +832,7 @@ void NoteField::DrawPrimitives() //LOG->Trace( "start = %f.1, end = %f.1", fFirstBeatToDraw-fSongBeat, fLastBeatToDraw-fSongBeat ); //LOG->Trace( "Drawing elements %d through %d", iFirstRowToDraw, iLastRowToDraw ); -#define IS_ON_SCREEN( fBeat ) IsOnScreen( fBeat, 0, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels ) +#define IS_ON_SCREEN( fBeat ) ( fFirstBeatToDraw <= (fBeat) && (fBeat) <= fLastBeatToDraw && IsOnScreen( fBeat, 0, iDrawDistanceAfterTargetsPixels, iDrawDistanceBeforeTargetsPixels ) ) // Draw board if( SHOW_BOARD ) diff --git a/src/TimingData.cpp b/src/TimingData.cpp index 8e1672e580..0abe04e4ff 100644 --- a/src/TimingData.cpp +++ b/src/TimingData.cpp @@ -1002,11 +1002,19 @@ float TimingData::GetElapsedTimeFromBeatNoOffset( float fBeat ) const float TimingData::GetDisplayedBeat( float fBeat ) const { - unsigned index = GetScrollSegmentIndexAtBeat(fBeat); - float fOutBeat = ( fBeat - NoteRowToBeat(m_ScrollSegments[index].m_iStartRow) ) * m_ScrollSegments[index].m_fPercent; - for( unsigned i = 0; i < index; i ++ ) + vector::const_iterator it = m_ScrollSegments.begin(), end = m_ScrollSegments.end(); + float fOutBeat = 0.0; + for( ; it != end; it++ ) { - fOutBeat += ( NoteRowToBeat(m_ScrollSegments[i + 1].m_iStartRow) - NoteRowToBeat(m_ScrollSegments[i].m_iStartRow) ) * m_ScrollSegments[i].m_fPercent; + if( it+1 == end || BeatToNoteRow(fBeat) <= (it+1)->m_iStartRow ) + { + fOutBeat += ( fBeat - NoteRowToBeat((it)->m_iStartRow) ) * (it)->m_fPercent; + break; + } + else + { + fOutBeat += ( NoteRowToBeat((it+1)->m_iStartRow) - NoteRowToBeat((it)->m_iStartRow) ) * (it)->m_fPercent; + } } return fOutBeat; }