diff options
author | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
---|---|---|
committer | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
commit | 209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch) | |
tree | 9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/region_gain_line.cc | |
parent | e4b9aed743fc765219ac775905a221c017c88fba (diff) |
Initial import of gtk2_ardour.
git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/region_gain_line.cc')
-rw-r--r-- | gtk2_ardour/region_gain_line.cc | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc new file mode 100644 index 0000000000..c3d81bbf8a --- /dev/null +++ b/gtk2_ardour/region_gain_line.cc @@ -0,0 +1,96 @@ +#include <ardour/curve.h> +#include <ardour/audioregion.h> + +#include "region_gain_line.h" +#include "regionview.h" +#include "utils.h" + +#include "time_axis_view.h" +#include "editor.h" + +#include <ardour/session.h> + + +#include "i18n.h" + + +using namespace std; +using namespace ARDOUR; + +AudioRegionGainLine::AudioRegionGainLine (string name, Session& s, AudioRegionView& r, GtkCanvasItem* parent, + Curve& c, + gint (*point_callback)(GtkCanvasItem*, GdkEvent*, gpointer), + gint (*line_callback)(GtkCanvasItem*, GdkEvent*, gpointer)) + : AutomationLine (name, r.get_time_axis_view(), parent, c, point_callback, line_callback), + session (s), + rv (r) +{ + gtk_canvas_item_raise_to_top (group); + set_verbose_cursor_uses_gain_mapping (true); + terminal_points_can_slide = false; +} + +void +AudioRegionGainLine::view_to_model_y (double& y) +{ + y = slider_position_to_gain (y); + y = max (0.0, y); + y = min (2.0, y); +} + +void +AudioRegionGainLine::model_to_view_y (double& y) +{ + y = gain_to_slider_position (y); +} + +void +AudioRegionGainLine::start_drag (ControlPoint* cp, float fraction) +{ + AutomationLine::start_drag(cp,fraction); + if (!rv.region.envelope_active()) { + trackview.session().add_undo( bind( slot(rv.region, &AudioRegion::set_envelope_active), false) ); + } +} + +// This is an extended copy from AutomationList +void +AudioRegionGainLine::remove_point (ControlPoint& cp) +{ + ModelRepresentation mr; + + model_representation (cp, mr); + + trackview.editor.current_session()->begin_reversible_command (_("remove control point")); + trackview.editor.current_session()->add_undo (get_memento()); + + if (!rv.region.envelope_active()) { + trackview.session().add_undo( bind( slot(rv.region, &AudioRegion::set_envelope_active), false) ); + trackview.session().add_redo( bind( slot(rv.region, &AudioRegion::set_envelope_active), true) ); + rv.region.set_envelope_active(true); + } + + alist.erase (mr.start, mr.end); + + trackview.editor.current_session()->add_redo_no_execute (get_memento()); + trackview.editor.current_session()->commit_reversible_command (); + trackview.editor.current_session()->set_dirty (); +} + +void +AudioRegionGainLine::end_drag (ControlPoint* cp) +{ + if (!rv.region.envelope_active()) { + trackview.session().add_redo( bind( slot(rv.region, &AudioRegion::set_envelope_active), true) ); + rv.region.set_envelope_active(true); + } + AutomationLine::end_drag(cp); +} + + +// This is a copy from AutomationList +UndoAction +AudioRegionGainLine::get_memento () +{ + return alist.get_memento(); +} |