Add some options for surfaces to jump in the timeline

* ::jump_by_beats()
* request transport to keep rolling after jump
This commit is contained in:
Johannes Mueller 2019-05-18 13:23:26 +02:00
parent 1173ca8d34
commit 89f39d14f2
2 changed files with 18 additions and 6 deletions

View file

@ -388,7 +388,7 @@ BasicUI::locate (samplepos_t where, bool roll_after_locate)
}
void
BasicUI::jump_by_seconds (double secs)
BasicUI::jump_by_seconds (double secs, bool with_roll)
{
samplepos_t current = session->transport_sample();
double s = (double) current / (double) session->nominal_sample_rate();
@ -399,11 +399,11 @@ BasicUI::jump_by_seconds (double secs)
}
s = s * session->nominal_sample_rate();
session->request_locate ( floor(s) );
session->request_locate (floor(s), with_roll);
}
void
BasicUI::jump_by_bars (double bars)
BasicUI::jump_by_bars (double bars, bool with_roll)
{
TempoMap& tmap (session->tempo_map());
Timecode::BBT_Time bbt (tmap.bbt_at_sample (session->transport_sample()));
@ -417,7 +417,18 @@ BasicUI::jump_by_bars (double bars)
any.type = AnyTime::BBT;
any.bbt.bars = bars;
session->request_locate ( session->convert_to_samples (any) );
session->request_locate (session->convert_to_samples (any), with_roll);
}
void
BasicUI::jump_by_beats (double beats, bool with_roll)
{
TempoMap& tmap (session->tempo_map ());
double qn_goal = tmap.quarter_note_at_sample (session->transport_sample ()) + beats;
if (qn_goal < 0.0) {
qn_goal = 0.0;
}
session->request_locate (tmap.sample_at_quarter_note (qn_goal), with_roll);
}
void