13
0

Implement reset() in panners, and use it from the GUI (fixes #4196).

git-svn-id: svn://localhost/ardour2/branches/3.0@10282 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2011-10-22 16:19:27 +00:00
parent 47d0b88830
commit 195c735181
11 changed files with 42 additions and 12 deletions

View File

@ -34,6 +34,7 @@
#include "ardour/panner.h"
#include "ardour/panner.h"
#include "ardour/pannable.h"
#include "ardour_ui.h"
#include "global_signals.h"
@ -55,8 +56,9 @@ static const int top_step = 2;
MonoPanner::ColorScheme MonoPanner::colors;
bool MonoPanner::have_colors = false;
MonoPanner::MonoPanner (boost::shared_ptr<PBD::Controllable> position)
: position_control (position)
MonoPanner::MonoPanner (boost::shared_ptr<ARDOUR::Panner> panner)
: _panner (panner)
, position_control (_panner->pannable()->pan_azimuth_control)
, dragging (false)
, drag_start_x (0)
, last_drag_x (0)
@ -64,7 +66,7 @@ MonoPanner::MonoPanner (boost::shared_ptr<PBD::Controllable> position)
, detented (false)
, drag_data_window (0)
, drag_data_label (0)
, position_binder (position)
, position_binder (position_control)
{
if (!have_colors) {
set_colors ();
@ -333,8 +335,7 @@ MonoPanner::on_button_release_event (GdkEventButton* ev)
}
if (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier)) {
/* reset to default */
position_control->set_value (0.5);
_panner->reset ();
} else {
StopGesture ();
}

View File

@ -34,7 +34,7 @@ namespace PBD {
class MonoPanner : public Gtk::DrawingArea
{
public:
MonoPanner (boost::shared_ptr<PBD::Controllable> pos);
MonoPanner (boost::shared_ptr<ARDOUR::Panner>);
~MonoPanner ();
boost::shared_ptr<PBD::Controllable> get_controllable() const { return position_control; }
@ -54,6 +54,7 @@ class MonoPanner : public Gtk::DrawingArea
bool on_leave_notify_event (GdkEventCrossing* ev);
private:
boost::shared_ptr<ARDOUR::Panner> _panner;
boost::shared_ptr<PBD::Controllable> position_control;
PBD::ScopedConnectionList connections;
bool dragging;

View File

@ -283,7 +283,7 @@ PannerUI::setup_pan ()
boost::shared_ptr<Pannable> pannable = _panner->pannable();
boost::shared_ptr<AutomationControl> ac = pannable->pan_azimuth_control;
mp = new MonoPanner (ac);
mp = new MonoPanner (_panner);
mp->StartGesture.connect (sigc::bind (sigc::mem_fun (*this, &PannerUI::start_touch),
boost::weak_ptr<AutomationControl> (ac)));

View File

@ -418,7 +418,7 @@ StereoPanner::on_button_release_event (GdkEventButton* ev)
return false;
}
bool dp = dragging_position;
bool const dp = dragging_position;
dragging = false;
dragging_position = false;
@ -432,9 +432,7 @@ StereoPanner::on_button_release_event (GdkEventButton* ev)
}
if (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier)) {
/* reset to default */
position_control->set_value (0.5);
width_control->set_value (1.0);
_panner->reset ();
} else {
if (dp) {
StopPositionGesture ();

View File

@ -81,7 +81,7 @@ public:
virtual PBD::AngularVector signal_position (uint32_t) const { return PBD::AngularVector(); }
virtual void reset() {}
virtual void reset () = 0;
void set_automation_state (AutoState);
AutoState automation_state() const;

View File

@ -373,3 +373,10 @@ Panner1in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
return _pannable->value_as_string (ac);
}
}
void
Panner1in2out::reset ()
{
set_position (0.5);
update ();
}

View File

@ -58,6 +58,8 @@ class Panner1in2out : public Panner
XMLNode& get_state ();
void reset ();
protected:
float left;
float right;

View File

@ -490,3 +490,11 @@ Panner2in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
return _pannable->value_as_string (ac);
}
}
void
Panner2in2out::reset ()
{
set_position (0.5);
set_width (1);
update ();
}

View File

@ -66,6 +66,8 @@ class Panner2in2out : public Panner
void update ();
void reset ();
protected:
float left[2];
float right[2];

View File

@ -473,3 +473,12 @@ VBAPanner::set_width (double w)
{
_pannable->pan_width_control->set_value (min (1.0, max (-1.0, w)));
}
void
VBAPanner::reset ()
{
set_position (0);
set_width (1);
update ();
}

View File

@ -63,6 +63,8 @@ public:
PBD::AngularVector signal_position (uint32_t n) const;
boost::shared_ptr<Speakers> get_speakers() const;
void reset ();
private:
struct Signal {
PBD::AngularVector direction;