summaryrefslogtreecommitdiff
path: root/gtk2_ardour/automation_streamview.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-07-14 00:58:15 +0000
committerCarl Hetherington <carl@carlh.net>2010-07-14 00:58:15 +0000
commit593b421180290f46f39efcb21ed8192b624bbc73 (patch)
treef8a81aad5fae8683818103b192d3c53a26110728 /gtk2_ardour/automation_streamview.cc
parentb75977920e7cb02ae31bca0379dd3aa4d82f9cbc (diff)
A few fixes to interpolation of MIDI controller data. Don't interpolate
when writing these data back to a source, otherwise surprising new interpolated points appear in MIDI automation. Similarly don't interpolate when reading the model during MIDI stretch. Fix handling of interpolation state; controllers that have been set by the user to use a different interpolation style are noted in the <Source> tag of the session file and this state is sprayed around to MidiModel and the GUI as necessary. git-svn-id: svn://localhost/ardour2/branches/3.0@7409 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/automation_streamview.cc')
-rw-r--r--gtk2_ardour/automation_streamview.cc22
1 files changed, 18 insertions, 4 deletions
diff --git a/gtk2_ardour/automation_streamview.cc b/gtk2_ardour/automation_streamview.cc
index 006834c59d..146cdc7b89 100644
--- a/gtk2_ardour/automation_streamview.cc
+++ b/gtk2_ardour/automation_streamview.cc
@@ -237,14 +237,28 @@ AutomationStreamView::has_automation () const
return false;
}
+/** Our parent AutomationTimeAxisView calls this when the user requests a particular
+ * InterpolationStyle; tell the AutomationLists in our regions.
+ */
void
AutomationStreamView::set_interpolation (AutomationList::InterpolationStyle s)
{
- for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
+ for (list<RegionView*>::const_iterator i = region_views.begin(); i != region_views.end(); ++i) {
AutomationRegionView* arv = dynamic_cast<AutomationRegionView*> (*i);
assert (arv);
- if (arv->line()) {
- arv->line()->set_interpolation (s);
- }
+ arv->line()->the_list()->set_interpolation (s);
+ }
+}
+
+AutomationList::InterpolationStyle
+AutomationStreamView::interpolation () const
+{
+ if (region_views.empty()) {
+ return AutomationList::Linear;
}
+
+ AutomationRegionView* v = dynamic_cast<AutomationRegionView*> (region_views.front());
+ assert (v);
+
+ return v->line()->the_list()->interpolation ();
}