Timeline: Fix backwards navigation by bar and beat.

Simplification of a patch submitted by Roy Vegard Ovesen. Closes #43.
pull/46/merge
Jonathan Moore Liles 2013-03-30 18:48:41 -07:00
parent 37b881b638
commit a6a15e2a2d
1 changed files with 25 additions and 18 deletions

View File

@ -886,19 +886,21 @@ Timeline::nearest_line ( nframes_t *frame, bool snap ) const
bool bool
Timeline::next_line ( nframes_t *frame, bool bar ) const 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 }; 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 ) if ( when > JACK_MAX_FRAMES - length )
return false; length = JACK_MAX_FRAMES - when;
else
{ render_tempomap( when, length, prev_next_line_cb, &n );
*frame = n.closest;
return true; *frame = n.closest;
}
return true;
} }
/** Set the value pointed to by /frame/ to the frame number of the of /** 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 bool
Timeline::prev_line ( nframes_t *frame, bool bar ) const 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 }; 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 ) if ( when > window )
return false; start = when - window;
else
{ render_tempomap( start, when, prev_next_line_cb, &n );
*frame = n.closest;
return true; *frame = n.closest;
}
return true;
} }