mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
update panGUI connections (panner-shell vs pannable vs panner)
This commit is contained in:
parent
c46e74012e
commit
6bebe1d886
6 changed files with 60 additions and 17 deletions
|
|
@ -89,9 +89,10 @@ MonoPanner::MonoPanner (boost::shared_ptr<ARDOUR::PannerShell> p)
|
||||||
have_font = true;
|
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));
|
ColorsChanged.connect (sigc::mem_fun (*this, &MonoPanner::color_handler));
|
||||||
|
|
||||||
set_tooltip ();
|
set_tooltip ();
|
||||||
|
|
@ -505,7 +506,17 @@ MonoPanner::bypass_handler ()
|
||||||
queue_draw ();
|
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 ()
|
MonoPanner::editor ()
|
||||||
{
|
{
|
||||||
return new MonoPannerEditor (this);
|
return new MonoPannerEditor (this);
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,8 @@ class MonoPanner : public PannerInterface
|
||||||
boost::shared_ptr<ARDOUR::PannerShell> _panner_shell;
|
boost::shared_ptr<ARDOUR::PannerShell> _panner_shell;
|
||||||
|
|
||||||
boost::shared_ptr<PBD::Controllable> position_control;
|
boost::shared_ptr<PBD::Controllable> position_control;
|
||||||
PBD::ScopedConnectionList connections;
|
PBD::ScopedConnectionList panvalue_connections;
|
||||||
|
PBD::ScopedConnectionList panshell_connections;
|
||||||
int drag_start_x;
|
int drag_start_x;
|
||||||
int last_drag_x;
|
int last_drag_x;
|
||||||
double accumulated_delta;
|
double accumulated_delta;
|
||||||
|
|
@ -89,6 +90,7 @@ class MonoPanner : public PannerInterface
|
||||||
static bool have_colors;
|
static bool have_colors;
|
||||||
void color_handler ();
|
void color_handler ();
|
||||||
void bypass_handler ();
|
void bypass_handler ();
|
||||||
|
void pannable_handler ();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __gtk_ardour_mono_panner_h__ */
|
#endif /* __gtk_ardour_mono_panner_h__ */
|
||||||
|
|
|
||||||
|
|
@ -76,9 +76,9 @@ Panner2d::Panner2d (boost::shared_ptr<PannerShell> p, int32_t h)
|
||||||
, last_width (0)
|
, last_width (0)
|
||||||
, have_elevation (false)
|
, 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;
|
drag_target = 0;
|
||||||
set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
|
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
|
void
|
||||||
Panner2d::handle_state_change ()
|
Panner2d::handle_state_change ()
|
||||||
{
|
{
|
||||||
panconnect.drop_connections();
|
panner_connections.drop_connections();
|
||||||
if (!panner_shell->panner()) {
|
if (!panner_shell->panner()) {
|
||||||
return;
|
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> params = panner_shell->panner()->what_can_be_automated();
|
||||||
set<Evoral::Parameter>::iterator p = params.find(PanElevationAutomation);
|
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));
|
bypass_button.signal_toggled().connect (sigc::mem_fun (*this, &Panner2dWindow::bypass_toggled));
|
||||||
width_spinner.signal_changed().connect (sigc::mem_fun (*this, &Panner2dWindow::width_changed));
|
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 (panshell_connections, invalidator (*this), boost::bind (&Panner2dWindow::set_bypassed, this), gui_context());
|
||||||
p->Changed.connect (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.set_spacing (6);
|
||||||
button_box.pack_start (bypass_button, false, false);
|
button_box.pack_start (bypass_button, false, false);
|
||||||
|
|
@ -896,6 +899,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
|
void
|
||||||
Panner2dWindow::set_bypassed ()
|
Panner2dWindow::set_bypassed ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -127,8 +127,8 @@ class Panner2d : public Gtk::DrawingArea
|
||||||
void handle_position_change ();
|
void handle_position_change ();
|
||||||
void label_signals ();
|
void label_signals ();
|
||||||
|
|
||||||
PBD::ScopedConnectionList connections;
|
PBD::ScopedConnectionList panshell_connections;
|
||||||
PBD::ScopedConnectionList panconnect;
|
PBD::ScopedConnectionList panner_connections;
|
||||||
|
|
||||||
/* cartesian coordinates in GTK units ; adjust to same but on a circle of radius 1.0
|
/* cartesian coordinates in GTK units ; adjust to same but on a circle of radius 1.0
|
||||||
and centered in the middle of our area
|
and centered in the middle of our area
|
||||||
|
|
@ -156,10 +156,12 @@ class Panner2dWindow : public ArdourWindow
|
||||||
Gtk::Adjustment width_adjustment;
|
Gtk::Adjustment width_adjustment;
|
||||||
Gtk::SpinButton width_spinner;
|
Gtk::SpinButton width_spinner;
|
||||||
|
|
||||||
PBD::ScopedConnectionList connections;
|
PBD::ScopedConnectionList panshell_connections;
|
||||||
|
PBD::ScopedConnectionList panvalue_connections;
|
||||||
void set_bypassed();
|
void set_bypassed();
|
||||||
void set_width();
|
void set_width();
|
||||||
|
|
||||||
|
void pannable_handler ();
|
||||||
void bypass_toggled ();
|
void bypass_toggled ();
|
||||||
void width_changed ();
|
void width_changed ();
|
||||||
bool on_key_press_event (GdkEventKey*);
|
bool on_key_press_event (GdkEventKey*);
|
||||||
|
|
|
||||||
|
|
@ -95,9 +95,10 @@ StereoPanner::StereoPanner (boost::shared_ptr<PannerShell> p)
|
||||||
have_font = true;
|
have_font = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
position_control->Changed.connect (connections, invalidator(*this), boost::bind (&StereoPanner::value_change, this), gui_context());
|
position_control->Changed.connect (panvalue_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());
|
width_control->Changed.connect (panvalue_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());
|
|
||||||
|
_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));
|
ColorsChanged.connect (sigc::mem_fun (*this, &StereoPanner::color_handler));
|
||||||
|
|
||||||
|
|
@ -693,6 +694,20 @@ StereoPanner::bypass_handler ()
|
||||||
queue_draw ();
|
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*
|
PannerEditor*
|
||||||
StereoPanner::editor ()
|
StereoPanner::editor ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,8 @@ class StereoPanner : public PannerInterface
|
||||||
|
|
||||||
boost::shared_ptr<PBD::Controllable> position_control;
|
boost::shared_ptr<PBD::Controllable> position_control;
|
||||||
boost::shared_ptr<PBD::Controllable> width_control;
|
boost::shared_ptr<PBD::Controllable> width_control;
|
||||||
PBD::ScopedConnectionList connections;
|
PBD::ScopedConnectionList panvalue_connections;
|
||||||
|
PBD::ScopedConnectionList panshell_connections;
|
||||||
bool dragging;
|
bool dragging;
|
||||||
bool dragging_position;
|
bool dragging_position;
|
||||||
bool dragging_left;
|
bool dragging_left;
|
||||||
|
|
@ -103,6 +104,7 @@ class StereoPanner : public PannerInterface
|
||||||
static bool have_colors;
|
static bool have_colors;
|
||||||
void color_handler ();
|
void color_handler ();
|
||||||
void bypass_handler ();
|
void bypass_handler ();
|
||||||
|
void pannable_handler ();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* __gtk_ardour_stereo_panner_h__ */
|
#endif /* __gtk_ardour_stereo_panner_h__ */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue