Timeline: Fix backwards navigation by bar and beat.

Simplification of a patch submitted by Roy Vegard Ovesen. Closes #43.
This commit is contained in:
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,20 +886,22 @@ 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 ( when > JACK_MAX_FRAMES - length )
length = JACK_MAX_FRAMES - when;
render_tempomap( when, length, prev_next_line_cb, &n );
if ( n.closest == (nframes_t)-1 )
return false;
else
{
*frame = n.closest;
return true;
}
}
/** Set the value pointed to by /frame/ to the frame number of the of
the nearest measure line to *less than* /when/. Returns true if
@ -907,20 +909,25 @@ 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 ( when > window )
start = when - window;
render_tempomap( start, when, prev_next_line_cb, &n );
if ( n.closest == JACK_MAX_FRAMES )
return false;
else
{
*frame = n.closest;
return true;
}
}