From 8367cacf150be852b9baf308caebe23603f36ff6 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Sun, 15 Apr 2012 21:04:44 +0000 Subject: [PATCH] Update MidiRegion::_start_beats on trimming the front of a MIDI region; reset _start_beats with _start on MidiRegion::fix_negative_start(). May help with #4736. git-svn-id: svn://localhost/ardour2/branches/3.0@11984 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/midi_region.h | 1 + libs/ardour/ardour/region.h | 1 + libs/ardour/midi_region.cc | 10 +++++++++- libs/ardour/region.cc | 12 +++++++++--- libs/ardour/tempo.cc | 2 +- 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index ba7c2972f3..2fe56f015f 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -132,6 +132,7 @@ class MidiRegion : public Region void set_position_internal (framepos_t pos, bool allow_bbt_recompute); void set_length_internal (framecnt_t len); + void set_start_internal (framecnt_t); void update_length_beats (); void model_changed (); diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h index c698d2fdc2..a238ff9038 100644 --- a/libs/ardour/ardour/region.h +++ b/libs/ardour/ardour/region.h @@ -325,6 +325,7 @@ class Region void post_set (const PBD::PropertyChange&); virtual void set_position_internal (framepos_t pos, bool allow_bbt_recompute); virtual void set_length_internal (framecnt_t); + virtual void set_start_internal (framecnt_t); DataType _type; diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc index 092915cefb..c61185fe3a 100644 --- a/libs/ardour/midi_region.cc +++ b/libs/ardour/midi_region.cc @@ -153,7 +153,7 @@ void MidiRegion::post_set (const PropertyChange& pc) { Region::post_set (pc); - + if (pc.contains (Properties::length) && !pc.contains (Properties::length_beats)) { update_length_beats (); } else if (pc.contains (Properties::start) && !pc.contains (Properties::start_beats)) { @@ -424,6 +424,7 @@ MidiRegion::fix_negative_start () model()->insert_silence_at_start (c.from (-_start)); _start = 0; + _start_beats = 0; } /** Transpose the notes in this region by a given number of semitones */ @@ -433,3 +434,10 @@ MidiRegion::transpose (int semitones) BeatsFramesConverter c (_session.tempo_map(), _start); model()->transpose (c.from (_start), c.from (_start + _length), semitones); } + +void +MidiRegion::set_start_internal (framecnt_t s) +{ + Region::set_start_internal (s); + set_start_beats_from_start_frames (); +} diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 66c0b84ae9..99906665d7 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -686,7 +686,7 @@ Region::set_start (framepos_t pos) return; } - _start = pos; + set_start_internal (pos); _whole_file = false; first_edit (); invalidate_transients (); @@ -701,6 +701,7 @@ Region::trim_start (framepos_t new_position) if (locked() || position_locked()) { return; } + framepos_t new_start; frameoffset_t const start_shift = new_position - _position; @@ -732,7 +733,7 @@ Region::trim_start (framepos_t new_position) return; } - _start = new_start; + set_start_internal (new_start); _whole_file = false; first_edit (); @@ -888,7 +889,7 @@ Region::trim_to_internal (framepos_t position, framecnt_t length) PropertyChange what_changed; if (_start != new_start) { - _start = new_start; + set_start_internal (new_start); what_changed.add (Properties::start); } @@ -1648,3 +1649,8 @@ Region::post_set (const PropertyChange& pc) } } +void +Region::set_start_internal (framecnt_t s) +{ + _start = s; +} diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index c8fd5f14cb..89427f57b9 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -1889,7 +1889,7 @@ TempoMap::framepos_plus_beats (framepos_t pos, Evoral::MusicalTime beats) const return pos; } -/** Subtract some (fractional) beats to a frame position, and return the result in frames */ +/** Subtract some (fractional) beats from a frame position, and return the result in frames */ framepos_t TempoMap::framepos_minus_beats (framepos_t pos, Evoral::MusicalTime beats) const { -- 2.30.2