fix selectability of region-associated automation (i.e. MIDI)
The fix here is really just dropping the use of _offset when computing the session position of a control point. This was just an arithmetical error. However, session_sample_position() was redundant and just caused more work, so this method was removed, and only ::session_position() is now used. In addition, several closely related places now use C++11 (or later) "auto" syntax for iterating over containers, for cleaner looking code
This commit is contained in:
parent
9327027d98
commit
373a73cb51
@ -910,12 +910,12 @@ AutomationLine::get_selectables (timepos_t const & start, timepos_t const & end,
|
|||||||
double const bot_track = (1 - topfrac) * trackview.current_height ();
|
double const bot_track = (1 - topfrac) * trackview.current_height ();
|
||||||
double const top_track = (1 - botfrac) * trackview.current_height ();
|
double const top_track = (1 - botfrac) * trackview.current_height ();
|
||||||
|
|
||||||
for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
|
for (auto const & cp : control_points) {
|
||||||
|
|
||||||
timepos_t const session_samples_when = timepos_t (session_sample_position ((*i)->model()));
|
const timepos_t w = session_position ((*cp->model())->when);
|
||||||
|
|
||||||
if (session_samples_when >= start && session_samples_when <= end && (*i)->get_y() >= bot_track && (*i)->get_y() <= top_track) {
|
if (w >= start && w <= end && cp->get_y() >= bot_track && cp->get_y() <= top_track) {
|
||||||
results.push_back (*i);
|
results.push_back (cp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1024,6 +1024,7 @@ AutomationLine::reset_callback (const Evoral::ControlList& events)
|
|||||||
ty = _height - (ty * _height);
|
ty = _height - (ty * _height);
|
||||||
|
|
||||||
add_visible_control_point (vp, pi, px, ty, ai, np);
|
add_visible_control_point (vp, pi, px, ty, ai, np);
|
||||||
|
|
||||||
vp++;
|
vp++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1353,24 +1354,19 @@ AutomationLine::get_point_x_range () const
|
|||||||
{
|
{
|
||||||
pair<timepos_t, timepos_t> r (timepos_t::max (the_list()->time_domain()), timepos_t::zero (the_list()->time_domain()));
|
pair<timepos_t, timepos_t> r (timepos_t::max (the_list()->time_domain()), timepos_t::zero (the_list()->time_domain()));
|
||||||
|
|
||||||
for (AutomationList::const_iterator i = the_list()->begin(); i != the_list()->end(); ++i) {
|
for (auto const & cp : *the_list()) {
|
||||||
r.first = min (r.first, session_position (i));
|
const timepos_t w (session_position (cp->when));
|
||||||
r.second = max (r.second, session_position (i));
|
r.first = min (r.first, w);
|
||||||
|
r.second = max (r.second, w);
|
||||||
}
|
}
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
samplepos_t
|
|
||||||
AutomationLine::session_sample_position (AutomationList::const_iterator p) const
|
|
||||||
{
|
|
||||||
return (*p)->when.samples() + _offset.samples() + get_origin().samples();
|
|
||||||
}
|
|
||||||
|
|
||||||
timepos_t
|
timepos_t
|
||||||
AutomationLine::session_position (AutomationList::const_iterator p) const
|
AutomationLine::session_position (timepos_t const & when) const
|
||||||
{
|
{
|
||||||
return (*p)->when + _offset + get_origin();
|
return when + get_origin();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -161,8 +161,7 @@ public:
|
|||||||
Temporal::timepos_t offset () { return _offset; }
|
Temporal::timepos_t offset () { return _offset; }
|
||||||
void set_width (Temporal::timecnt_t const &);
|
void set_width (Temporal::timecnt_t const &);
|
||||||
|
|
||||||
samplepos_t session_sample_position (ARDOUR::AutomationList::const_iterator) const;
|
Temporal::timepos_t session_position (Temporal::timepos_t const &) const;
|
||||||
Temporal::timepos_t session_position (ARDOUR::AutomationList::const_iterator) const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
@ -284,8 +284,8 @@ TimeInfoBox::selection_changed ()
|
|||||||
} else {
|
} else {
|
||||||
s = timepos_t::max (selection.points.front()->line().the_list()->time_domain());
|
s = timepos_t::max (selection.points.front()->line().the_list()->time_domain());
|
||||||
e = timepos_t::zero (s.time_domain());
|
e = timepos_t::zero (s.time_domain());
|
||||||
for (PointSelection::iterator i = selection.points.begin(); i != selection.points.end(); ++i) {
|
for (auto const & pt : selection.points) {
|
||||||
timepos_t const p = (*i)->line().session_position ((*i)->model ());
|
const timepos_t p = pt->line().session_position ((*pt->model ())->when);
|
||||||
s = min (s, p);
|
s = min (s, p);
|
||||||
e = max (e, p);
|
e = max (e, p);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user