X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fautomation_line.h;h=a05a7b918058b493def596db721c278c5f9d5d1c;hb=ad942b104a80c74c689e0c1b5c016d1870850830;hp=2704c13146f68060874edb744fa8c973887875eb;hpb=b99721ec3b59cf22a0bd1f6583401c6da7bb5d95;p=ardour.git diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index 2704c13146..a05a7b9180 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -59,7 +59,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible public: AutomationLine (const std::string& name, TimeAxisView&, ArdourCanvas::Group&, boost::shared_ptr, - const Evoral::TimeConverter* converter = 0); + const Evoral::TimeConverter* converter = 0); virtual ~AutomationLine (); void queue_reset (); @@ -68,9 +68,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible std::list point_selection_to_control_points (PointSelection const &); void set_selected_points (PointSelection&); - void get_selectables (ARDOUR::framepos_t start, ARDOUR::framepos_t end, - double botfrac, double topfrac, - std::list& results); + void get_selectables (ARDOUR::framepos_t, ARDOUR::framepos_t, double, double, std::list&); void get_inverted_selectables (Selection&, std::list& results); virtual void remove_point (ControlPoint&); @@ -84,6 +82,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible virtual void end_drag (); ControlPoint* nth (uint32_t); + ControlPoint const * nth (uint32_t) const; uint32_t npoints() const { return control_points.size(); } std::string name() const { return _name; } @@ -135,9 +134,19 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible virtual MementoCommandBinder* memento_command_binder (); - const Evoral::TimeConverter& time_converter () const { + const Evoral::TimeConverter& time_converter () const { return _time_converter; } + + std::pair get_point_x_range () const; + + void set_maximum_time (ARDOUR::framecnt_t); + ARDOUR::framecnt_t maximum_time () const { + return _maximum_time; + } + + void set_offset (ARDOUR::framecnt_t); + void set_width (ARDOUR::framecnt_t); protected: @@ -152,6 +161,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible bool terminal_points_can_slide : 1; bool update_pending : 1; bool no_draw : 1; + bool _is_boolean : 1; bool points_visible : 1; bool did_push; @@ -183,7 +193,6 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible void list_changed (); virtual bool event_handler (GdkEvent*); - virtual void add_model_point (ALPoints& tmp_points, double frame, double yfract); private: std::list _drag_points; ///< points we are dragging @@ -193,8 +202,12 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible double _drag_distance; ///< total x movement of the drag, in units double _last_drag_fraction; ///< last y position of the drag, as a fraction std::list _always_in_view; + /** offset from the start of the automation list to the start of the line, so that + * a +ve offset means that the 0 on the line is at _offset in the list + */ + ARDOUR::framecnt_t _offset; - const Evoral::TimeConverter& _time_converter; + const Evoral::TimeConverter& _time_converter; void reset_line_coords (ControlPoint&); void add_visible_control_point (uint32_t, uint32_t, double, double, ARDOUR::AutomationList::iterator, uint32_t); @@ -218,6 +231,9 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible void model_representation (ControlPoint&, ModelRepresentation&); PBD::ScopedConnectionList _list_connections; + + /** maximum time that a point on this line can be at, relative to the position of its region or start of its track */ + ARDOUR::framecnt_t _maximum_time; friend class AudioRegionGainLine; };