X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fregion_gain_line.cc;h=a31d31b76e057608ce48abeefdcb3efcbc39f136;hb=a8d62ce056fe260792d4e72bf8cf2fbff0e8b39b;hp=b010efc04c89e33ca00b770ab55858bbcac4570b;hpb=47c4929bc285da6d752e68aa5a32cf73f20b9f22;p=ardour.git diff --git a/gtk2_ardour/region_gain_line.cc b/gtk2_ardour/region_gain_line.cc index b010efc04c..a31d31b76e 100644 --- a/gtk2_ardour/region_gain_line.cc +++ b/gtk2_ardour/region_gain_line.cc @@ -1,23 +1,28 @@ /* - Copyright (C) 2000-2007 Paul Davis - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include "evoral/Curve.hpp" + * Copyright (C) 2005-2016 Paul Davis + * Copyright (C) 2005 Karsten Wiese + * Copyright (C) 2005 Taybin Rutkin + * Copyright (C) 2006-2014 David Robillard + * Copyright (C) 2008-2012 Carl Hetherington + * Copyright (C) 2014-2015 Nick Mainsbridge + * Copyright (C) 2014-2019 Robin Gareus + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "evoral/Curve.h" #include "pbd/memento_command.h" #include "pbd/stateful_diff_command.h" @@ -30,8 +35,9 @@ #include "time_axis_view.h" #include "editor.h" +#include "gui_thread.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace ARDOUR; @@ -44,11 +50,12 @@ AudioRegionGainLine::AudioRegionGainLine (const string & name, AudioRegionView& // If this isn't true something is horribly wrong, and we'll get catastrophic gain values assert(l->parameter().type() == EnvelopeAutomation); - _time_converter->set_origin_b (r.region()->position() - r.region()->start()); + _time_converter->set_origin_b (rv.region()->position()); + + r.region()->PropertyChanged.connect (_region_changed_connection, invalidator (*this), boost::bind (&AudioRegionGainLine::region_changed, this, _1), gui_context()); group->raise_to_top (); group->set_y_position (2); - set_uses_gain_mapping (true); terminal_points_can_slide = false; } @@ -57,7 +64,7 @@ AudioRegionGainLine::start_drag_single (ControlPoint* cp, double x, float fracti { AutomationLine::start_drag_single (cp, x, fraction); - // XXX Stateful need to capture automation curve data + // XXX Stateful need to capture automation curve data if (!rv.audio_region()->envelope_active()) { trackview.session()->add_command(new MementoCommand(*(rv.audio_region().get()), &rv.audio_region()->get_state(), 0)); @@ -69,19 +76,20 @@ AudioRegionGainLine::start_drag_single (ControlPoint* cp, double x, float fracti void AudioRegionGainLine::remove_point (ControlPoint& cp) { - trackview.editor().session()->begin_reversible_command (_("remove control point")); + trackview.editor().begin_reversible_command (_("remove control point")); XMLNode &before = alist->get_state(); if (!rv.audio_region()->envelope_active()) { - rv.audio_region()->clear_changes (); + rv.audio_region()->clear_changes (); rv.audio_region()->set_envelope_active(true); trackview.session()->add_command(new StatefulDiffCommand (rv.audio_region())); } + trackview.editor ().get_selection ().clear_points (); alist->erase (cp.model()); trackview.editor().session()->add_command (new MementoCommand(*alist.get(), &before, &alist->get_state())); - trackview.editor().session()->commit_reversible_command (); + trackview.editor().commit_reversible_command (); trackview.editor().session()->set_dirty (); } @@ -96,3 +104,23 @@ AudioRegionGainLine::end_drag (bool with_push, uint32_t final_index) AutomationLine::end_drag (with_push, final_index); } +void +AudioRegionGainLine::region_changed (const PropertyChange& what_changed) +{ + PropertyChange interesting_stuff; + + interesting_stuff.add (ARDOUR::Properties::start); + interesting_stuff.add (ARDOUR::Properties::position); + + if (what_changed.contains (interesting_stuff)) { + _time_converter->set_origin_b (rv.region()->position()); + } + + interesting_stuff.clear (); + interesting_stuff.add (ARDOUR::Properties::start); + interesting_stuff.add (ARDOUR::Properties::length); + + if (what_changed.contains (interesting_stuff)) { + reset (); + } +}