+ std::string _name;
+ guint32 _height;
+ uint32_t _line_color;
+
+ boost::shared_ptr<ARDOUR::AutomationList> alist;
+ Evoral::TimeConverter<double, ARDOUR::framepos_t>* _time_converter;
+ /** true if _time_converter belongs to us (ie we should delete it on destruction) */
+ bool _our_time_converter;
+
+ VisibleAspects _visible;
+
+ bool _uses_gain_mapping;
+ bool terminal_points_can_slide;
+ bool update_pending;
+ bool have_timeout;
+ bool no_draw;
+ bool _is_boolean;
+ /** true if we did a push at any point during the current drag */
+ bool did_push;
+
+ ArdourCanvas::Group& _parent_group;
+ ArdourCanvas::Group* group;
+ ArdourCanvas::PolyLine* line; /* line */
+ ArdourCanvas::Points line_points; /* coordinates for canvas line */
+ std::vector<ControlPoint*> control_points; /* visible control points */
+
+ class ContiguousControlPoints : public std::list<ControlPoint*> {
+ public:
+ ContiguousControlPoints (AutomationLine& al);
+ double clamp_dx (double dx);
+ void move (double dx, double dy);
+ void compute_x_bounds ();
+ private:
+ AutomationLine& line;
+ double before_x;
+ double after_x;
+ };
+
+ friend class ContiguousControlPoints;
+
+ typedef boost::shared_ptr<ContiguousControlPoints> CCP;
+ std::vector<CCP> contiguous_points;