temporal: when dragging tempo/meter, move in points list as well
We spliced the point back into the tempo and meter lists correctly, but failed to do the same thing for the same object's position in the points list.
This commit is contained in:
parent
7dadb1407b
commit
531db75a27
@ -1340,6 +1340,11 @@ TempoMap::move_meter (MeterPoint const & mp, timepos_t const & when, bool earlie
|
|||||||
|
|
||||||
const superclock_t old_sc = mp.sclock();
|
const superclock_t old_sc = mp.sclock();
|
||||||
|
|
||||||
|
/* reset position of this meter */
|
||||||
|
const_cast<MeterPoint*> (&mp)->set (sc, beats, bbt);
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
Meters::iterator current = _meters.end();
|
Meters::iterator current = _meters.end();
|
||||||
Meters::iterator insert_before = _meters.end();
|
Meters::iterator insert_before = _meters.end();
|
||||||
|
|
||||||
@ -1355,10 +1360,33 @@ TempoMap::move_meter (MeterPoint const & mp, timepos_t const & when, bool earlie
|
|||||||
/* existing meter must have been found */
|
/* existing meter must have been found */
|
||||||
assert (current != _meters.end());
|
assert (current != _meters.end());
|
||||||
|
|
||||||
/* reset position of this meter */
|
|
||||||
current->set (sc, beats, bbt);
|
|
||||||
/* reposition in list */
|
/* reposition in list */
|
||||||
_meters.splice (insert_before, _meters, current);
|
_meters.splice (insert_before, _meters, current);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
Points::iterator current = _points.end();
|
||||||
|
Points::iterator insert_before = _points.end();
|
||||||
|
|
||||||
|
for (Points::iterator m = _points.begin(); m != _points.end(); ++m) {
|
||||||
|
if (*m == mp) {
|
||||||
|
current = m;
|
||||||
|
}
|
||||||
|
if (insert_before == _points.end() && (m->sclock() > sc)) {
|
||||||
|
insert_before = m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* existing meter must have been found */
|
||||||
|
assert (current != _points.end());
|
||||||
|
|
||||||
|
/* reposition in list */
|
||||||
|
_points.splice (insert_before, _points, current);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* recompute 3 domain positions for everything after this */
|
/* recompute 3 domain positions for everything after this */
|
||||||
reset_starting_at (std::min (sc, old_sc));
|
reset_starting_at (std::min (sc, old_sc));
|
||||||
|
|
||||||
@ -1404,7 +1432,12 @@ TempoMap::move_tempo (TempoPoint const & tp, timepos_t const & when, bool push)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const superclock_t old_sc = tp.sclock();
|
const superclock_t old_sc = tp.sclock();
|
||||||
|
/* reset position of this tempo */
|
||||||
|
const_cast<TempoPoint*> (&tp)->set (sc, beats, bbt);
|
||||||
|
|
||||||
|
/* move to correct position in tempo list */
|
||||||
|
|
||||||
|
{
|
||||||
Tempos::iterator current = _tempos.end();
|
Tempos::iterator current = _tempos.end();
|
||||||
Tempos::iterator insert_before = _tempos.end();
|
Tempos::iterator insert_before = _tempos.end();
|
||||||
|
|
||||||
@ -1419,11 +1452,31 @@ TempoMap::move_tempo (TempoPoint const & tp, timepos_t const & when, bool push)
|
|||||||
|
|
||||||
/* existing tempo must have been found */
|
/* existing tempo must have been found */
|
||||||
assert (current != _tempos.end());
|
assert (current != _tempos.end());
|
||||||
|
|
||||||
/* reset position of this tempo */
|
|
||||||
current->set (sc, beats, bbt);
|
|
||||||
/* reposition in list */
|
/* reposition in list */
|
||||||
_tempos.splice (insert_before, _tempos, current);
|
_tempos.splice (insert_before, _tempos, current);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* move to correct position in points list */
|
||||||
|
|
||||||
|
{
|
||||||
|
Points::iterator current = _points.end();
|
||||||
|
Points::iterator insert_before = _points.end();
|
||||||
|
|
||||||
|
for (Points::iterator t = _points.begin(); t != _points.end(); ++t) {
|
||||||
|
if (*t == tp) {
|
||||||
|
current = t;
|
||||||
|
}
|
||||||
|
if (insert_before == _points.end() && (t->sclock() > sc)) {
|
||||||
|
insert_before = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* existing tempo must have been found */
|
||||||
|
assert (current != _points.end());
|
||||||
|
|
||||||
|
/* reposition in list */
|
||||||
|
_points.splice (insert_before, _points, current);
|
||||||
|
}
|
||||||
|
|
||||||
/* recompute 3 domain positions for everything after this */
|
/* recompute 3 domain positions for everything after this */
|
||||||
reset_starting_at (std::min (sc, old_sc));
|
reset_starting_at (std::min (sc, old_sc));
|
||||||
|
Loading…
Reference in New Issue
Block a user