Rwbi ramps - midi regions resize when tempo map changed.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user