13
0

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:
Carl Hetherington 2011-02-26 20:37:54 +00:00
parent d8657a4ab8
commit 9d540e6215

View File

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