Fix "Crop Region to Range" -- second attempt.

This commit is contained in:
André Nusser 2015-12-03 18:45:47 +01:00 committed by Paul Davis
parent b07d86ac61
commit 0040ab5158

View File

@ -3256,9 +3256,10 @@ Editor::crop_region_to (framepos_t start, framepos_t end)
return; return;
} }
framepos_t the_start; framepos_t pos;
framepos_t the_end; framepos_t new_start;
framepos_t cnt; framepos_t new_end;
framecnt_t new_length;
bool in_command = false; bool in_command = false;
for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) { for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
@ -3279,21 +3280,22 @@ Editor::crop_region_to (framepos_t start, framepos_t end)
/* now adjust lengths */ /* now adjust lengths */
for (vector<boost::shared_ptr<Region> >::iterator i = regions.begin(); i != regions.end(); ++i) { for (vector<boost::shared_ptr<Region> >::iterator i = regions.begin(); i != regions.end(); ++i) {
the_start = max (start, (framepos_t) (*i)->position()); pos = (*i)->position();
if (max_framepos - the_start < (*i)->length()) { new_start = max (start, pos);
the_end = the_start + (*i)->length() - 1; if (max_framepos - pos > (*i)->length()) {
new_end = pos + (*i)->length() - 1;
} else { } else {
the_end = max_framepos; new_end = max_framepos;
} }
the_end = min (end, the_end); new_end = min (end, new_end);
cnt = the_end - the_start + 1; new_length = new_end - new_start + 1;
if(!in_command) { if(!in_command) {
begin_reversible_command (_("trim to selection")); begin_reversible_command (_("trim to selection"));
in_command = true; in_command = true;
} }
(*i)->clear_changes (); (*i)->clear_changes ();
(*i)->trim_to (the_start, cnt); (*i)->trim_to (new_start, new_length);
_session->add_command (new StatefulDiffCommand (*i)); _session->add_command (new StatefulDiffCommand (*i));
} }
} }