summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-10-13 17:57:33 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-10-13 17:57:33 +0000
commit7cded3707fc76aa6d796cbc86b5fc60b3aa40a03 (patch)
tree192d2f0674e57a922bf4e8ff1bde5c004a567710 /libs/ardour
parent13dc17bb4e40e5bba8c537019af6676ae0b6fec5 (diff)
add new per-session MIDI-region-copy-is-fork: if set, all MIDI region copies will be independent from each other (via MIDIRegion::clone()); visible in Session properties editor under the Misc tab
git-svn-id: svn://localhost/ardour2/branches/3.0@10207 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/midi_region.h2
-rw-r--r--libs/ardour/ardour/session_configuration_vars.h1
-rw-r--r--libs/ardour/midi_region.cc2
-rw-r--r--libs/ardour/region_factory.cc6
4 files changed, 8 insertions, 3 deletions
diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h
index dc3f199b5b..50352cc760 100644
--- a/libs/ardour/ardour/midi_region.h
+++ b/libs/ardour/ardour/midi_region.h
@@ -63,7 +63,7 @@ class MidiRegion : public Region
~MidiRegion();
- boost::shared_ptr<MidiRegion> clone ();
+ boost::shared_ptr<MidiRegion> clone () const;
boost::shared_ptr<MidiSource> midi_source (uint32_t n=0) const;
diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h
index acefc92506..6a9d4a81e6 100644
--- a/libs/ardour/ardour/session_configuration_vars.h
+++ b/libs/ardour/ardour/session_configuration_vars.h
@@ -62,3 +62,4 @@ CONFIG_VARIABLE (InsertMergePolicy, insert_merge_policy, "insert-merge-policy",
CONFIG_VARIABLE (framecnt_t, timecode_offset, "timecode-offset", 0)
CONFIG_VARIABLE (bool, timecode_offset_negative, "timecode-offset-negative", true)
CONFIG_VARIABLE (bool, glue_new_markers_to_bars_and_beats, "glue-new-markers-to-bars-and-beats", false)
+CONFIG_VARIABLE (bool, midi_copy_is_fork, "midi-copy-is-fork", false)
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc
index ba926211a3..f67617da62 100644
--- a/libs/ardour/midi_region.cc
+++ b/libs/ardour/midi_region.cc
@@ -118,7 +118,7 @@ MidiRegion::~MidiRegion ()
/** Create a new MidiRegion that has its own version of some/all of the Source used by another.
*/
boost::shared_ptr<MidiRegion>
-MidiRegion::clone ()
+MidiRegion::clone () const
{
BeatsFramesConverter bfc (_session.tempo_map(), _position);
Evoral::MusicalTime const bbegin = bfc.from (_start);
diff --git a/libs/ardour/region_factory.cc b/libs/ardour/region_factory.cc
index 3ca33cac01..fb195dba4c 100644
--- a/libs/ardour/region_factory.cc
+++ b/libs/ardour/region_factory.cc
@@ -58,7 +58,11 @@ RegionFactory::create (boost::shared_ptr<const Region> region, bool announce)
} else if ((mr = boost::dynamic_pointer_cast<const MidiRegion>(region)) != 0) {
- ret = boost::shared_ptr<Region> (new MidiRegion (mr, 0));
+ if (mr->session().config.get_midi_copy_is_fork()) {
+ ret = mr->clone ();
+ } else {
+ ret = boost::shared_ptr<Region> (new MidiRegion (mr, 0));
+ }
} else {
fatal << _("programming error: RegionFactory::create() called with unknown Region type")