X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fardour%2Fcurve.h;h=433b00a270be09ac058d1e99619019ef902e9b8e;hb=6698f5f686bef82b0c9568558c83a3b9b3344700;hp=ede060e1cb361b9407f3777e6ee29b010e7dcc4f;hpb=868f557f2612903f72614a2b3a317c7a528188d1;p=ardour.git diff --git a/libs/ardour/ardour/curve.h b/libs/ardour/ardour/curve.h index ede060e1cb..433b00a270 100644 --- a/libs/ardour/ardour/curve.h +++ b/libs/ardour/ardour/curve.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2001-2003 Paul Davis + Copyright (C) 2001-2007 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -15,13 +15,13 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_curve_h__ #define __ardour_curve_h__ #include +#include #include #include #include @@ -31,52 +31,29 @@ namespace ARDOUR { -struct CurvePoint : public ControlEvent -{ - double coeff[4]; - - CurvePoint (double w, double v) - : ControlEvent (w, v) { - - coeff[0] = coeff[1] = coeff[2] = coeff[3] = 0.0; - } - - ~CurvePoint() {} -}; - -class Curve : public AutomationList +class Curve : public boost::noncopyable { public: - Curve (double min_yval, double max_yval, double defaultvalue, bool nostate = false); - ~Curve (); - Curve (const Curve& other); - Curve (const Curve& other, double start, double end); + Curve (const AutomationList& al); bool rt_safe_get_vector (double x0, double x1, float *arg, int32_t veclen); void get_vector (double x0, double x1, float *arg, int32_t veclen); - AutomationEventList::iterator closest_control_point_before (double xval); - AutomationEventList::iterator closest_control_point_after (double xval); - void solve (); - - protected: - ControlEvent* point_factory (double,double) const; - ControlEvent* point_factory (const ControlEvent&) const; - - Change restore_state (StateManager::State&); private: - AutomationList::iterator last_bound; - double unlocked_eval (double where); double multipoint_eval (double x); void _get_vector (double x0, double x1, float *arg, int32_t veclen); + void on_list_dirty() { _dirty = true; } + + bool _dirty; + const AutomationList& _list; }; -}; /* namespace ARDOUR */ +} // namespace ARDOUR extern "C" { void curve_get_vector_from_c (void *arg, double, double, float*, int32_t);