summaryrefslogtreecommitdiff
path: root/gtk2_ardour/audio_region_view.cc
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2015-09-14 05:24:28 +1000
committernick_m <mainsbridge@gmail.com>2015-10-20 00:53:27 +1100
commit17294ab9ec2d0b826dce88930148fda0f5e978b3 (patch)
treefbcca294ff1009370e3a12366b5fd8df17abee06 /gtk2_ardour/audio_region_view.cc
parent03df442d0e5878868a7bc945cf23371271e67c42 (diff)
Make control point selection more consistent.
- disallow simultaneous events via ControlList::editor_add () - clicking on an automation line selects the points that define it. - don't 'flash' a region selection when using mousedraw mode. - cp click selection resembles region selection. - region gain points respect snap modifier (a la automation points).
Diffstat (limited to 'gtk2_ardour/audio_region_view.cc')
-rw-r--r--gtk2_ardour/audio_region_view.cc27
1 files changed, 21 insertions, 6 deletions
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index 706611a81d..dd15529019 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -1334,25 +1334,40 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev, b
gain_line->view_to_model_coord (x, y);
+ trackview.editor ().snap_to_with_modifier (fx, ev);
+
/* XXX STATEFUL: can't convert to stateful diff until we
can represent automation data with it.
*/
- trackview.editor().begin_reversible_command (_("add gain control point"));
XMLNode &before = audio_region()->envelope()->get_state();
+ MementoCommand<AudioRegion>* region_memento = 0;
if (!audio_region()->envelope_active()) {
XMLNode &region_before = audio_region()->get_state();
audio_region()->set_envelope_active(true);
XMLNode &region_after = audio_region()->get_state();
- trackview.session()->add_command (new MementoCommand<AudioRegion>(*(audio_region().get()), &region_before, &region_after));
+ region_memento = new MementoCommand<AudioRegion>(*(audio_region().get()), &region_before, &region_after);
}
- audio_region()->envelope()->editor_add (fx, y, with_guard_points);
+ if (audio_region()->envelope()->editor_add (fx, y, with_guard_points)) {
+ XMLNode &after = audio_region()->envelope()->get_state();
+ std::list<Selectable*> results;
+
+ trackview.editor().begin_reversible_command (_("add gain control point"));
+
+ if (region_memento) {
+ trackview.session()->add_command (region_memento);
+ }
- XMLNode &after = audio_region()->envelope()->get_state();
- trackview.session()->add_command (new MementoCommand<AutomationList>(*audio_region()->envelope().get(), &before, &after));
- trackview.editor().commit_reversible_command ();
+ trackview.session()->add_command (new MementoCommand<AutomationList>(*audio_region()->envelope().get(), &before, &after));
+
+ gain_line->get_selectables (fx, fx, 0.0, 1.0, results);
+ trackview.editor ().get_selection ().set (results);
+
+ trackview.editor ().commit_reversible_command ();
+ trackview.session ()->set_dirty ();
+ }
}
void