From 17294ab9ec2d0b826dce88930148fda0f5e978b3 Mon Sep 17 00:00:00 2001 From: nick_m Date: Mon, 14 Sep 2015 05:24:28 +1000 Subject: 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). --- gtk2_ardour/audio_region_view.cc | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'gtk2_ardour/audio_region_view.cc') 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* region_memento = 0; if (!audio_region()->envelope_active()) { XMLNode ®ion_before = audio_region()->get_state(); audio_region()->set_envelope_active(true); XMLNode ®ion_after = audio_region()->get_state(); - trackview.session()->add_command (new MementoCommand(*(audio_region().get()), ®ion_before, ®ion_after)); + region_memento = new MementoCommand(*(audio_region().get()), ®ion_before, ®ion_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 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(*audio_region()->envelope().get(), &before, &after)); - trackview.editor().commit_reversible_command (); + trackview.session()->add_command (new MementoCommand(*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 -- cgit v1.2.3