Fix incorrect positioning of tempo line subdivisions if first meter is non-zero
Commit cebefe6 assumed that frame 0 was the music origin.
Silly me.
This commit is contained in:
@@ -4518,7 +4518,7 @@ Editor::set_samples_per_pixel (framecnt_t spp)
|
||||
samples_per_pixel = spp;
|
||||
|
||||
if (tempo_lines) {
|
||||
tempo_lines->tempo_map_changed();
|
||||
tempo_lines->tempo_map_changed(_session->tempo_map().music_origin());
|
||||
}
|
||||
|
||||
bool const showing_time_selection = selection->time.length() > 0;
|
||||
|
||||
@@ -181,7 +181,7 @@ Editor::tempo_map_changed (const PropertyChange& /*ignored*/)
|
||||
ENSURE_GUI_THREAD (*this, &Editor::tempo_map_changed, ignored);
|
||||
|
||||
if (tempo_lines) {
|
||||
tempo_lines->tempo_map_changed();
|
||||
tempo_lines->tempo_map_changed(_session->tempo_map().music_origin());
|
||||
}
|
||||
|
||||
compute_bbt_ruler_scale (leftmost_frame, leftmost_frame + current_page_samples());
|
||||
@@ -204,7 +204,7 @@ Editor::tempometric_position_changed (const PropertyChange& /*ignored*/)
|
||||
ENSURE_GUI_THREAD (*this, &Editor::tempo_map_changed);
|
||||
|
||||
if (tempo_lines) {
|
||||
tempo_lines->tempo_map_changed();
|
||||
tempo_lines->tempo_map_changed(_session->tempo_map().music_origin());
|
||||
}
|
||||
|
||||
TempoSection* prev_ts = 0;
|
||||
@@ -394,7 +394,7 @@ Editor::draw_measures (std::vector<ARDOUR::TempoMap::BBTPoint>& grid)
|
||||
}
|
||||
|
||||
if (tempo_lines == 0) {
|
||||
tempo_lines = new TempoLines (time_line_group, ArdourCanvas::LineSet::Vertical, new BeatsFramesConverter (_session->tempo_map(), 0));
|
||||
tempo_lines = new TempoLines (time_line_group, ArdourCanvas::LineSet::Vertical, new BeatsFramesConverter (_session->tempo_map(), _session->tempo_map().music_origin()));
|
||||
}
|
||||
|
||||
const unsigned divisions = get_grid_beat_divisions(leftmost_frame);
|
||||
|
||||
@@ -43,9 +43,10 @@ TempoLines::~TempoLines ()
|
||||
}
|
||||
|
||||
void
|
||||
TempoLines::tempo_map_changed()
|
||||
TempoLines::tempo_map_changed (framepos_t new_origin)
|
||||
{
|
||||
lines.clear ();
|
||||
_bfc->set_origin_b (new_origin);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -79,7 +80,7 @@ TempoLines::draw_ticks (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
|
||||
/* draw line with alpha corresponding to coarsest level */
|
||||
const uint8_t a = max(8, (int)rint(UINT_RGBA_A(base) / (0.8 * log2(level))));
|
||||
const uint32_t c = UINT_RGBA_CHANGE_A(base, a);
|
||||
const framepos_t f = _bfc->to (Evoral::Beats (grid.begin()->qn + (l / (double) divisions)));
|
||||
const framepos_t f = _bfc->to (Evoral::Beats (grid.begin()->qn + (l / (double) divisions))) + _bfc->origin_b();
|
||||
|
||||
if (f > leftmost_frame) {
|
||||
lines.add (PublicEditor::instance().sample_to_pixel_unrounded (f), 1.0, c);
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
TempoLines (ArdourCanvas::Container* group, double screen_height, ARDOUR::BeatsFramesConverter* bfc);
|
||||
~TempoLines ();
|
||||
|
||||
void tempo_map_changed();
|
||||
void tempo_map_changed(framepos_t new_origin);
|
||||
|
||||
void draw (std::vector<ARDOUR::TempoMap::BBTPoint>& grid,
|
||||
unsigned divisions,
|
||||
|
||||
Reference in New Issue
Block a user