summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-04-15 21:04:44 +0000
committerCarl Hetherington <carl@carlh.net>2012-04-15 21:04:44 +0000
commit8367cacf150be852b9baf308caebe23603f36ff6 (patch)
tree688fbdb9ded2775baf1618f09ce1313fab040445 /libs/ardour
parent23973bae24b7f569e26c7f869a103aacbaf66ab2 (diff)
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
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/midi_region.h1
-rw-r--r--libs/ardour/ardour/region.h1
-rw-r--r--libs/ardour/midi_region.cc10
-rw-r--r--libs/ardour/region.cc12
-rw-r--r--libs/ardour/tempo.cc2
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
{