diff --git a/timeline/src/Timeline.C b/timeline/src/Timeline.C index 99abcdf..6c26f36 100644 --- a/timeline/src/Timeline.C +++ b/timeline/src/Timeline.C @@ -886,19 +886,21 @@ Timeline::nearest_line ( nframes_t *frame, bool snap ) const bool Timeline::next_line ( nframes_t *frame, bool bar ) const { - nframes_t when = *frame + 1; + const nframes_t when = *frame + 1; nearest_line_arg n = { when, JACK_MAX_FRAMES, bar }; - render_tempomap( when, x_to_ts( w() ), prev_next_line_cb, &n ); + const nframes_t window = sample_rate() * 60; + nframes_t length = window; - if ( n.closest == (nframes_t)-1 ) - return false; - else - { - *frame = n.closest; - return true; - } + if ( when > JACK_MAX_FRAMES - length ) + length = JACK_MAX_FRAMES - when; + + render_tempomap( when, length, prev_next_line_cb, &n ); + + *frame = n.closest; + + return true; } /** Set the value pointed to by /frame/ to the frame number of the of @@ -907,19 +909,24 @@ Timeline::next_line ( nframes_t *frame, bool bar ) const bool Timeline::prev_line ( nframes_t *frame, bool bar ) const { - nframes_t when = *frame - 1; + if ( ! *frame ) + return false; + + const nframes_t when = *frame - 1; nearest_line_arg n = { when, 0, bar }; - render_tempomap( xoffset, when - xoffset, prev_next_line_cb, &n ); + const nframes_t window = sample_rate() * 60; + nframes_t start = 0; - if ( n.closest == JACK_MAX_FRAMES ) - return false; - else - { - *frame = n.closest; - return true; - } + if ( when > window ) + start = when - window; + + render_tempomap( start, when, prev_next_line_cb, &n ); + + *frame = n.closest; + + return true; }