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;
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;
}
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
}
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