summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/mono_panner.cc17
-rw-r--r--gtk2_ardour/mono_panner.h4
-rw-r--r--gtk2_ardour/panner2d.cc23
-rw-r--r--gtk2_ardour/panner2d.h8
-rw-r--r--gtk2_ardour/stereo_panner.cc21
-rw-r--r--gtk2_ardour/stereo_panner.h4
6 files changed, 60 insertions, 17 deletions
diff --git a/gtk2_ardour/mono_panner.cc b/gtk2_ardour/mono_panner.cc
index 1559aacd99..d82d236b32 100644
--- a/gtk2_ardour/mono_panner.cc
+++ b/gtk2_ardour/mono_panner.cc
@@ -89,9 +89,10 @@ MonoPanner::MonoPanner (boost::shared_ptr<ARDOUR::PannerShell> p)
have_font = true;
}
- position_control->Changed.connect (connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context());
+ position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context());
- _panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&MonoPanner::bypass_handler, this), gui_context());
+ _panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&MonoPanner::bypass_handler, this), gui_context());
+ _panner_shell->PannableChanged.connect (panshell_connections, invalidator (*this), boost::bind (&MonoPanner::pannable_handler, this), gui_context());
ColorsChanged.connect (sigc::mem_fun (*this, &MonoPanner::color_handler));
set_tooltip ();
@@ -505,7 +506,17 @@ MonoPanner::bypass_handler ()
queue_draw ();
}
- PannerEditor*
+void
+MonoPanner::pannable_handler ()
+{
+ panvalue_connections.drop_connections();
+ position_control = _panner->pannable()->pan_azimuth_control;
+ position_binder.set_controllable(position_control);
+ position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&MonoPanner::value_change, this), gui_context());
+ queue_draw ();
+}
+
+PannerEditor*
MonoPanner::editor ()
{
return new MonoPannerEditor (this);
diff --git a/gtk2_ardour/mono_panner.h b/gtk2_ardour/mono_panner.h
index b79038bab7..4d5f1ffec0 100644
--- a/gtk2_ardour/mono_panner.h
+++ b/gtk2_ardour/mono_panner.h
@@ -60,7 +60,8 @@ class MonoPanner : public PannerInterface
boost::shared_ptr<ARDOUR::PannerShell> _panner_shell;
boost::shared_ptr<PBD::Controllable> position_control;
- PBD::ScopedConnectionList connections;
+ PBD::ScopedConnectionList panvalue_connections;
+ PBD::ScopedConnectionList panshell_connections;
int drag_start_x;
int last_drag_x;
double accumulated_delta;
@@ -89,6 +90,7 @@ class MonoPanner : public PannerInterface
static bool have_colors;
void color_handler ();
void bypass_handler ();
+ void pannable_handler ();
};
#endif /* __gtk_ardour_mono_panner_h__ */
diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc
index 826b86fc89..0f8b46aa56 100644
--- a/gtk2_ardour/panner2d.cc
+++ b/gtk2_ardour/panner2d.cc
@@ -76,9 +76,9 @@ Panner2d::Panner2d (boost::shared_ptr<PannerShell> p, int32_t h)
, last_width (0)
, have_elevation (false)
{
- panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context());
+ panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context());
- panner_shell->panner()->SignalPositionChanged.connect (panconnect, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
+ panner_shell->panner()->SignalPositionChanged.connect (panner_connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
drag_target = 0;
set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
@@ -200,12 +200,12 @@ Panner2d::add_speaker (const AngularVector& a)
void
Panner2d::handle_state_change ()
{
- panconnect.drop_connections();
+ panner_connections.drop_connections();
if (!panner_shell->panner()) {
return;
}
- panner_shell->panner()->SignalPositionChanged.connect (panconnect, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
+ panner_shell->panner()->SignalPositionChanged.connect (panner_connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
set<Evoral::Parameter> params = panner_shell->panner()->what_can_be_automated();
set<Evoral::Parameter>::iterator p = params.find(PanElevationAutomation);
@@ -833,8 +833,11 @@ Panner2dWindow::Panner2dWindow (boost::shared_ptr<PannerShell> p, int32_t h, uin
bypass_button.signal_toggled().connect (sigc::mem_fun (*this, &Panner2dWindow::bypass_toggled));
width_spinner.signal_changed().connect (sigc::mem_fun (*this, &Panner2dWindow::width_changed));
- p->pannable()->pan_width_control->Changed.connect (connections, invalidator(*this), boost::bind (&Panner2dWindow::set_width, this), gui_context());
- p->Changed.connect (connections, invalidator (*this), boost::bind (&Panner2dWindow::set_bypassed, this), gui_context());
+ p->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&Panner2dWindow::set_bypassed, this), gui_context());
+ /* needed for the width-spinbox in the main window */
+ p->PannableChanged.connect (panshell_connections, invalidator (*this), boost::bind (&Panner2dWindow::pannable_handler, this), gui_context());
+ p->pannable()->pan_width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&Panner2dWindow::set_width, this), gui_context());
+
button_box.set_spacing (6);
button_box.pack_start (bypass_button, false, false);
@@ -897,6 +900,14 @@ Panner2dWindow::width_changed ()
}
void
+Panner2dWindow::pannable_handler ()
+{
+ panvalue_connections.drop_connections();
+ widget.get_panner_shell()->pannable()->pan_width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&Panner2dWindow::set_width, this), gui_context());
+ set_width();
+}
+
+void
Panner2dWindow::set_bypassed ()
{
bool view = bypass_button.get_active ();
diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h
index 60534d04c6..fdd4748f8f 100644
--- a/gtk2_ardour/panner2d.h
+++ b/gtk2_ardour/panner2d.h
@@ -127,8 +127,8 @@ class Panner2d : public Gtk::DrawingArea
void handle_position_change ();
void label_signals ();
- PBD::ScopedConnectionList connections;
- PBD::ScopedConnectionList panconnect;
+ PBD::ScopedConnectionList panshell_connections;
+ PBD::ScopedConnectionList panner_connections;
/* cartesian coordinates in GTK units ; adjust to same but on a circle of radius 1.0
and centered in the middle of our area
@@ -156,10 +156,12 @@ class Panner2dWindow : public ArdourWindow
Gtk::Adjustment width_adjustment;
Gtk::SpinButton width_spinner;
- PBD::ScopedConnectionList connections;
+ PBD::ScopedConnectionList panshell_connections;
+ PBD::ScopedConnectionList panvalue_connections;
void set_bypassed();
void set_width();
+ void pannable_handler ();
void bypass_toggled ();
void width_changed ();
bool on_key_press_event (GdkEventKey*);
diff --git a/gtk2_ardour/stereo_panner.cc b/gtk2_ardour/stereo_panner.cc
index 36d25cba9d..d480c60529 100644
--- a/gtk2_ardour/stereo_panner.cc
+++ b/gtk2_ardour/stereo_panner.cc
@@ -95,9 +95,10 @@ StereoPanner::StereoPanner (boost::shared_ptr<PannerShell> p)
have_font = true;
}
- position_control->Changed.connect (connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context());
- width_control->Changed.connect (connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context());
- _panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&StereoPanner::bypass_handler, this), gui_context());
+ position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context());
+ width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context());
+
+ _panner_shell->Changed.connect (panshell_connections, invalidator (*this), boost::bind (&StereoPanner::bypass_handler, this), gui_context());
ColorsChanged.connect (sigc::mem_fun (*this, &StereoPanner::color_handler));
@@ -693,6 +694,20 @@ StereoPanner::bypass_handler ()
queue_draw ();
}
+void
+StereoPanner::pannable_handler ()
+{
+ panvalue_connections.drop_connections();
+ position_control = _panner->pannable()->pan_azimuth_control;
+ width_control = _panner->pannable()->pan_width_control;
+ position_binder.set_controllable(position_control);
+ width_binder.set_controllable(width_control);
+
+ position_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context());
+ width_control->Changed.connect (panvalue_connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context());
+ queue_draw ();
+}
+
PannerEditor*
StereoPanner::editor ()
{
diff --git a/gtk2_ardour/stereo_panner.h b/gtk2_ardour/stereo_panner.h
index 5ecf343ab1..8bab160d60 100644
--- a/gtk2_ardour/stereo_panner.h
+++ b/gtk2_ardour/stereo_panner.h
@@ -64,7 +64,8 @@ class StereoPanner : public PannerInterface
boost::shared_ptr<PBD::Controllable> position_control;
boost::shared_ptr<PBD::Controllable> width_control;
- PBD::ScopedConnectionList connections;
+ PBD::ScopedConnectionList panvalue_connections;
+ PBD::ScopedConnectionList panshell_connections;
bool dragging;
bool dragging_position;
bool dragging_left;
@@ -103,6 +104,7 @@ class StereoPanner : public PannerInterface
static bool have_colors;
void color_handler ();
void bypass_handler ();
+ void pannable_handler ();
};
#endif /* __gtk_ardour_stereo_panner_h__ */