summaryrefslogtreecommitdiff
path: root/gtk2_ardour/region_gain_line.cc
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
committerTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
commit209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch)
tree9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/region_gain_line.cc
parente4b9aed743fc765219ac775905a221c017c88fba (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.cc96
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();
+}