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

View File

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

View File

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

View File

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

View File

@ -81,7 +81,7 @@ public:
virtual PBD::AngularVector signal_position (uint32_t) const { return PBD::AngularVector(); } virtual PBD::AngularVector signal_position (uint32_t) const { return PBD::AngularVector(); }
virtual void reset() {} virtual void reset () = 0;
void set_automation_state (AutoState); void set_automation_state (AutoState);
AutoState automation_state() const; 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); 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 (); XMLNode& get_state ();
void reset ();
protected: protected:
float left; float left;
float right; float right;

View File

@ -490,3 +490,11 @@ Panner2in2out::value_as_string (boost::shared_ptr<AutomationControl> ac) const
return _pannable->value_as_string (ac); 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 update ();
void reset ();
protected: protected:
float left[2]; float left[2];
float right[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))); _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; PBD::AngularVector signal_position (uint32_t n) const;
boost::shared_ptr<Speakers> get_speakers() const; boost::shared_ptr<Speakers> get_speakers() const;
void reset ();
private: private:
struct Signal { struct Signal {
PBD::AngularVector direction; PBD::AngularVector direction;