Fix ordering of set position / length when trimming the start of MIDI regions. Fixes most of the rest of #3789.
git-svn-id: svn://localhost/ardour2/branches/3.0@8967 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
d8657a4ab8
commit
9d540e6215
@ -920,13 +920,15 @@ Region::trim_to_internal (framepos_t position, framecnt_t length, void */*src*/)
|
||||
_start = new_start;
|
||||
what_changed.add (Properties::start);
|
||||
}
|
||||
if (_length != length) {
|
||||
if (!property_changes_suspended()) {
|
||||
_last_length = _length;
|
||||
}
|
||||
set_length_internal (length);
|
||||
what_changed.add (Properties::length);
|
||||
}
|
||||
|
||||
/* Set position before length, otherwise for MIDI regions this bad thing happens:
|
||||
* 1. we call set_length_internal; length in beats is computed using the region's current
|
||||
* (soon-to-be old) position
|
||||
* 2. we call set_position_internal; position is set and length in frames re-computed using
|
||||
* length in beats from (1) but at the new position, which is wrong if the region
|
||||
* straddles a tempo/meter change.
|
||||
*/
|
||||
|
||||
if (_position != position) {
|
||||
if (!property_changes_suspended()) {
|
||||
_last_position = _position;
|
||||
@ -934,6 +936,14 @@ Region::trim_to_internal (framepos_t position, framecnt_t length, void */*src*/)
|
||||
set_position_internal (position, true);
|
||||
what_changed.add (Properties::position);
|
||||
}
|
||||
|
||||
if (_length != length) {
|
||||
if (!property_changes_suspended()) {
|
||||
_last_length = _length;
|
||||
}
|
||||
set_length_internal (length);
|
||||
what_changed.add (Properties::length);
|
||||
}
|
||||
|
||||
_whole_file = false;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user