Compare commits

...

2 Commits

Author SHA1 Message Date
Robin Gareus 991ab1f8f8 Handle tempo-map changes in sync from the calling thread
This is required to collect relevent undo/redo information, notably
automation-data changes from Playlist::update_after_tempo_map_change and
DiskReader::playlist_ranges_moved.

The realtime thread should not move regions to begin with, and debug
builds woudl also assert since no undo operation was started.
2022-10-23 23:24:12 +02:00
Robin Gareus c437d6f886 Commit TempoChange undo operation after map update
Tempo Map updates can change a region's position/length, in which case
region-automation may follow the region, and DiskReader:: playlist_ranges_moved
will save additional undo information.

These MementoCommand(s) need to be included in the undo operation.
2022-10-23 23:21:08 +02:00
6 changed files with 19 additions and 20 deletions

View File

@ -1662,9 +1662,9 @@ Editor::toggle_tempo_type ()
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("change tempo type"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
}
}
@ -1696,9 +1696,9 @@ Editor::toggle_tempo_continues ()
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("change tempo clamp"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
}
void
@ -1729,9 +1729,9 @@ Editor::ramp_to_next_tempo ()
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("changed tempo ramp"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
}
void

View File

@ -7462,9 +7462,9 @@ Editor::define_one_bar (timepos_t const & start, timepos_t const & end)
XMLNode& after (tmap->get_state());
_session->add_command (new Temporal::TempoCommand (_("set tempo from range"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
}
void

View File

@ -490,9 +490,8 @@ Editor::mouse_add_new_tempo_event (timepos_t pos)
map->set_tempo (map->tempo_at (pos), pos);
XMLNode &after = map->get_state();
_session->add_command (new Temporal::TempoCommand (_("add tempo"), &before, &after));
commit_reversible_command ();
TempoMap::update (map);
commit_reversible_command ();
}
//map.dump (cerr);
@ -533,9 +532,9 @@ Editor::mouse_add_new_meter_event (timepos_t pos)
map->set_meter (Meter (bpb, note_type), pos);
_session->add_command (new Temporal::TempoCommand (_("add time signature"), &before, &map->get_state()));
commit_reversible_command ();
TempoMap::update (map);
commit_reversible_command ();
//map.dump (cerr);
}
@ -579,9 +578,9 @@ Editor::mouse_add_bbt_marker_event (timepos_t pos)
map->set_bartime (bbt, marker_dialog.position(), name);
_session->add_command (new Temporal::TempoCommand (_("add BBT marker"), &before, &map->get_state()));
commit_reversible_command ();
TempoMap::update (map);
commit_reversible_command ();
}
@ -657,9 +656,9 @@ Editor::edit_meter_section (Temporal::MeterPoint& section)
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("edit time signature"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
}
void
@ -693,9 +692,9 @@ Editor::edit_bbt (MusicTimePoint& point)
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("edit tempo"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
}
void
@ -730,9 +729,9 @@ Editor::edit_tempo_section (TempoPoint& section)
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("edit tempo"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
}
void
@ -762,9 +761,9 @@ Editor::real_remove_bbt_marker (MusicTimePoint const * point)
tmap->remove_bartime (*point);
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("remove BBT marker"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
return FALSE;
}
@ -778,10 +777,8 @@ Editor::real_remove_tempo_marker (TempoPoint const * section)
tmap->remove_tempo (*section);
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("remove tempo change"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
return FALSE;
}
@ -815,9 +812,8 @@ Editor::real_remove_meter_marker (Temporal::MeterPoint const * section)
tmap->remove_meter (*section);
XMLNode &after = tmap->get_state();
_session->add_command (new Temporal::TempoCommand (_("remove time signature change"), &before, &after));
commit_reversible_command ();
TempoMap::update (tmap);
commit_reversible_command ();
return FALSE;
}

View File

@ -292,9 +292,6 @@ AudioEngine::process_callback (pframes_t nframes)
Temporal::TempoMap::WritableSharedPtr current_map = Temporal::TempoMap::read ();
if (current_map != Temporal::TempoMap::use()) {
Temporal::TempoMap::set (current_map);
if (_session) {
_session->tempo_map_changed ();
}
}
/* This is for JACK, where the latency callback arrives in sync with

View File

@ -502,6 +502,8 @@ Session::Session (AudioEngine &eng,
IOPluginsChanged.connect_same_thread (*this, boost::bind (&Session::resort_io_plugs, this));
TempoMap::MapChanged.connect_same_thread (*this, boost::bind (&Session::tempo_map_changed, this));
emit_thread_start ();
auto_connect_thread_start ();

View File

@ -13,7 +13,11 @@ function factory () return function ()
tm:set_tempo (Temporal.Tempo (140, 120, 4), Temporal.timepos_t (0))
tm:set_tempo (Temporal.Tempo (120, 80, 4), Temporal.timepos_t.from_ticks (Temporal.ticks_per_beat * 4))
tm:set_tempo (Temporal.Tempo (80, 80, 4), Temporal.timepos_t.from_ticks (Temporal.ticks_per_beat * 4))
Session:begin_reversible_command ("Change Tempo Map")
Temporal.TempoMap.update (tm)
if not Session:abort_empty_reversible_command () then
Session:commit_reversible_command (nil)
end
tm = nil
-- Abort Edit example