- string _name;
- guint32 _height;
- uint32_t _line_color;
- ARDOUR::AutomationList& alist;
-
- bool _visible : 1;
- bool _vc_uses_gain_mapping : 1;
- bool terminal_points_can_slide : 1;
- bool update_pending : 1;
- bool no_draw : 1;
- bool points_visible : 1;
-
- Gnome::Canvas::Group& _parent_group;
- Gnome::Canvas::Group* group;
- Gnome::Canvas::Line* line; /* line */
- Gnome::Canvas::Points line_points; /* coordinates for canvas line */
- vector<ControlPoint*> control_points; /* visible control points */
-
- sigc::slot<bool,GdkEvent*,ControlPoint*> point_slot;
-
- struct ALPoint {
- double x;
- double y;
- ALPoint (double xx, double yy) : x(xx), y(yy) {}
+
+ 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;