diff options
author | David Robillard <d@drobilla.net> | 2009-02-19 19:42:25 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2009-02-19 19:42:25 +0000 |
commit | 75c15679bf1551dcb93d4fa62075517c66d3b222 (patch) | |
tree | 8a101d994120ee09c3560aebe99b7e565a137d1f /libs/ardour | |
parent | c006ff176250a01621437907652ef012789dba2f (diff) |
Only create a Curve for an AutomationList if we need it.
Fix crash on crossfade editor show (ticket 2442).
git-svn-id: svn://localhost/ardour2/branches/3.0@4641 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/automation_list.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 1 | ||||
-rw-r--r-- | libs/ardour/audio_track.cc | 2 | ||||
-rw-r--r-- | libs/ardour/audioregion.cc | 2 | ||||
-rw-r--r-- | libs/ardour/automation_list.cc | 28 | ||||
-rw-r--r-- | libs/ardour/panner.cc | 2 | ||||
-rw-r--r-- | libs/ardour/route.cc | 2 | ||||
-rw-r--r-- | libs/ardour/session_command.cc | 1 |
8 files changed, 36 insertions, 3 deletions
diff --git a/libs/ardour/ardour/automation_list.h b/libs/ardour/ardour/automation_list.h index 923967448c..7ede9f019a 100644 --- a/libs/ardour/ardour/automation_list.h +++ b/libs/ardour/ardour/automation_list.h @@ -85,6 +85,7 @@ class AutomationList : public PBD::StatefulDestructible, public Evoral::ControlL XMLNode& serialize_events (); private: + void create_curve_if_necessary (); int deserialize_events (const XMLNode&); void maybe_signal_changed (); diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 23155c7ab1..b42699d964 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -703,7 +703,6 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable sigc::signal<void> NamedSelectionRemoved; /* Curves and AutomationLists (TODO when they go away) */ - void add_curve(Evoral::Curve*); void add_automation_list(AutomationList*); /* fade curves */ diff --git a/libs/ardour/audio_track.cc b/libs/ardour/audio_track.cc index 104815b9dc..df648bc055 100644 --- a/libs/ardour/audio_track.cc +++ b/libs/ardour/audio_track.cc @@ -24,6 +24,8 @@ #include <pbd/error.h> #include <pbd/enumwriter.h> +#include <evoral/Curve.hpp> + #include <ardour/audio_track.h> #include <ardour/audio_diskstream.h> #include <ardour/session.h> diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc index 1559827b42..e48f2ae586 100644 --- a/libs/ardour/audioregion.cc +++ b/libs/ardour/audioregion.cc @@ -35,6 +35,8 @@ #include <pbd/enumwriter.h> #include <pbd/convert.h> +#include <evoral/Curve.hpp> + #include <ardour/audioregion.h> #include <ardour/session.h> #include <ardour/gain.h> diff --git a/libs/ardour/automation_list.cc b/libs/ardour/automation_list.cc index 0066e71c3c..7493df26ac 100644 --- a/libs/ardour/automation_list.cc +++ b/libs/ardour/automation_list.cc @@ -50,7 +50,6 @@ static void dumpit (const AutomationList& al, string prefix = "") } #endif -/* XXX: min_val max_val redundant? (param.min() param.max()) */ AutomationList::AutomationList (Evoral::Parameter id) : ControlList(id) { @@ -58,6 +57,8 @@ AutomationList::AutomationList (Evoral::Parameter id) _style = Absolute; _touching = false; + create_curve_if_necessary(); + assert(_parameter.type() != NullAutomation); AutomationListCreated(this); } @@ -69,6 +70,8 @@ AutomationList::AutomationList (const AutomationList& other) _state = other._state; _touching = other._touching; + create_curve_if_necessary(); + assert(_parameter.type() != NullAutomation); AutomationListCreated(this); } @@ -79,6 +82,8 @@ AutomationList::AutomationList (const AutomationList& other, double start, doubl _style = other._style; _state = other._state; _touching = other._touching; + + create_curve_if_necessary(); assert(_parameter.type() != NullAutomation); AutomationListCreated(this); @@ -96,8 +101,11 @@ AutomationList::AutomationList (const XMLNode& node, Evoral::Parameter id) set_state (node); - if (id) + if (id) { _parameter = id; + } + + create_curve_if_necessary(); assert(_parameter.type() != NullAutomation); AutomationListCreated(this); @@ -114,6 +122,22 @@ AutomationList::create(Evoral::Parameter id) return boost::shared_ptr<Evoral::ControlList>(new AutomationList(id)); } +void +AutomationList::create_curve_if_necessary() +{ + switch (_parameter.type()) { + case GainAutomation: + case PanAutomation: + case FadeInAutomation: + case FadeOutAutomation: + case EnvelopeAutomation: + create_curve(); + break; + default: + break; + } +} + bool AutomationList::operator== (const AutomationList& other) { diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc index b7dfd79068..0bd40d9e45 100644 --- a/libs/ardour/panner.cc +++ b/libs/ardour/panner.cc @@ -37,6 +37,8 @@ #include <pbd/xml++.h> #include <pbd/enumwriter.h> +#include <evoral/Curve.hpp> + #include <ardour/session.h> #include <ardour/panner.h> #include <ardour/utils.h> diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index ea2a472495..a80ceb70ef 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -27,6 +27,8 @@ #include <pbd/stacktrace.h> #include <pbd/memento_command.h> +#include <evoral/Curve.hpp> + #include <ardour/timestamps.h> #include <ardour/audioengine.h> #include <ardour/route.h> diff --git a/libs/ardour/session_command.cc b/libs/ardour/session_command.cc index bb51d51c43..bedbe7211f 100644 --- a/libs/ardour/session_command.cc +++ b/libs/ardour/session_command.cc @@ -35,6 +35,7 @@ #include <pbd/id.h> #include <pbd/statefuldestructible.h> #include <pbd/failed_constructor.h> +#include <evoral/Curve.hpp> using namespace PBD; using namespace ARDOUR; |