Rwbi ramps - midi regions resize when tempo map changed.

This commit is contained in:
nick_m
2016-05-25 04:09:15 +10:00
parent 2a8104f2f8
commit 533e5c4069
4 changed files with 18 additions and 9 deletions

View File

@@ -140,7 +140,7 @@ class LIBARDOUR_API MidiRegion : public Region
void model_automation_state_changed (Evoral::Parameter const &);
void set_start_beats_from_start_frames ();
void update_after_tempo_map_change ();
void update_after_tempo_map_change (bool send_change = true);
std::set<Evoral::Parameter> _filtered_parameters; ///< parameters that we ask our source not to return when reading
PBD::ScopedConnection _model_connection;

View File

@@ -209,7 +209,7 @@ class LIBARDOUR_API Region
void set_position (framepos_t);
void set_initial_position (framepos_t);
void special_set_position (framepos_t);
virtual void update_after_tempo_map_change ();
virtual void update_after_tempo_map_change (bool send_change = true);
void nudge_position (frameoffset_t);
bool at_natural_position () const;

View File

@@ -196,14 +196,20 @@ MidiRegion::set_length_internal (framecnt_t len)
}
void
MidiRegion::update_after_tempo_map_change ()
MidiRegion::update_after_tempo_map_change (bool /* send */)
{
Region::update_after_tempo_map_change ();
Region::update_after_tempo_map_change (false);
/* _position has now been updated for the new tempo map */
_start = _position - _session.tempo_map().framepos_minus_beats (_position, _start_beats);
_length = _session.tempo_map().framepos_plus_beats (_position, _length_beats) - _position;
send_change (Properties::start);
PropertyChange s_and_l;
s_and_l.add (Properties::start);
s_and_l.add (Properties::length);
s_and_l.add (Properties::position);
send_change (s_and_l);
}
void

View File

@@ -546,21 +546,24 @@ Region::set_position_lock_style (PositionLockStyle ps)
}
void
Region::update_after_tempo_map_change ()
Region::update_after_tempo_map_change (bool send)
{
boost::shared_ptr<Playlist> pl (playlist());
if (!pl || _position_lock_style != MusicTime) {
return;
}
TempoMap& map (_session.tempo_map());
framepos_t pos = map.frame_at_beat (_beat);
const framepos_t pos = _session.tempo_map().frame_at_beat (_beat);
set_position_internal (pos, false);
/* do this even if the position is the same. this helps out
a GUI that has moved its representation already.
*/
send_change (Properties::position);
if (send) {
send_change (Properties::position);
}
}
void