| @@ -416,6 +416,9 @@ Timeline::render_tempomap( nframes_t start, nframes_t length, measure_line_callb | |||||
| /* FIXME: don't we need to sort so that Time_Points always preceed Tempo_Points? */ | /* FIXME: don't we need to sort so that Time_Points always preceed Tempo_Points? */ | ||||
| if ( ! _tempomap.size() ) | |||||
| return pos; | |||||
| for ( list <const Sequence_Widget *>::const_iterator i = _tempomap.begin(); | for ( list <const Sequence_Widget *>::const_iterator i = _tempomap.begin(); | ||||
| i != _tempomap.end(); ++i ) | i != _tempomap.end(); ++i ) | ||||
| { | { | ||||
| @@ -448,7 +451,6 @@ Timeline::render_tempomap( nframes_t start, nframes_t length, measure_line_callb | |||||
| next = (*n)->start() - ( ( (*n)->start() - (*i)->start() ) % frames_per_beat ); | next = (*n)->start() - ( ( (*n)->start() - (*i)->start() ) % frames_per_beat ); | ||||
| } | } | ||||
| for ( ; f < next; ++bbt.beat, f += frames_per_beat ) | for ( ; f < next; ++bbt.beat, f += frames_per_beat ) | ||||
| { | { | ||||
| @@ -465,18 +467,19 @@ Timeline::render_tempomap( nframes_t start, nframes_t length, measure_line_callb | |||||
| cb( f, bbt, arg ); | cb( f, bbt, arg ); | ||||
| } | } | ||||
| if ( f + frames_per_beat >= end ) | |||||
| /* ugliness to avoid failing out at -1 */ | |||||
| if ( end >= frames_per_beat ) | |||||
| { | |||||
| if ( f >= end - frames_per_beat ) | |||||
| goto done; | |||||
| } | |||||
| else if ( f + frames_per_beat >= end ) | |||||
| goto done; | goto done; | ||||
| } | } | ||||
| } | } | ||||
| done: | done: | ||||
| if ( ! f ) | |||||
| /* no points? */ | |||||
| return pos; | |||||
| pos.frame = f; | pos.frame = f; | ||||
| pos.tempo = bpm; | pos.tempo = bpm; | ||||
| pos.beats_per_bar = sig.beats_per_bar; | pos.beats_per_bar = sig.beats_per_bar; | ||||