summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/panner2d.cc31
-rw-r--r--gtk2_ardour/panner2d.h3
-rw-r--r--libs/panners/vbap/vbap.cc12
-rw-r--r--libs/panners/vbap/vbap.h3
4 files changed, 31 insertions, 18 deletions
diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc
index 5054a9ee37..56bf159ba9 100644
--- a/gtk2_ardour/panner2d.cc
+++ b/gtk2_ardour/panner2d.cc
@@ -29,6 +29,7 @@
#include "pbd/error.h"
#include "pbd/cartesian.h"
#include "ardour/panner.h"
+#include "ardour/pannable.h"
#include "ardour/speakers.h"
#include "panner2d.h"
@@ -63,8 +64,11 @@ Panner2d::Target::set_text (const char* txt)
Panner2d::Panner2d (boost::shared_ptr<Panner> p, int32_t h)
: panner (p), width (0), height (h)
{
- panner->StateChanged.connect (state_connection, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context());
- panner->Changed.connect (change_connection, invalidator (*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
+ panner->StateChanged.connect (connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context());
+ panner->Changed.connect (connections, invalidator (*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
+
+ panner->pannable()->pan_azimuth_control->Changed.connect (connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
+ panner->pannable()->pan_width_control->Changed.connect (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);
@@ -197,28 +201,25 @@ Panner2d::add_target (const AngularVector& a)
void
Panner2d::handle_state_change ()
{
- ENSURE_GUI_THREAD (*this, &Panner2d::handle_state_change)
-
queue_draw ();
}
void
Panner2d::handle_position_change ()
{
-#ifdef PANNER_HACKS
uint32_t n;
- ENSURE_GUI_THREAD (*this, &Panner2d::handle_position_change)
- for (n = 0; n < pucks.size(); ++n) {
- pucks[n]->position = panner->streampanner(n).get_position ();
- }
+ for (uint32_t i = 0; i < pucks.size(); ++i) {
+ pucks[i]->position = panner->signal_position (i);
+ }
+
+ vector<Speaker>& speakers (panner->get_speakers()->speakers());
for (n = 0; n < targets.size(); ++n) {
- targets[n]->position = panner->output(n).position;
+ targets[n]->position = speakers[n].angles();
}
queue_draw ();
-#endif
}
void
@@ -528,11 +529,9 @@ Panner2d::handle_motion (gint evx, gint evy, GdkModifierType state)
cp.angular (drag_target->position); /* sets drag target position */
-#ifdef PANNER_HACKS
- panner->streampanner (drag_index).set_position (drag_target->position);
-#endif
-
- queue_draw ();
+ double degree_fract = drag_target->position.azi / 360.0;
+
+ panner->set_position (degree_fract);
}
}
diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h
index 4c7bd1530c..9ace95cb50 100644
--- a/gtk2_ardour/panner2d.h
+++ b/gtk2_ardour/panner2d.h
@@ -130,8 +130,7 @@ class Panner2d : public Gtk::DrawingArea
void handle_state_change ();
void handle_position_change ();
- PBD::ScopedConnection state_connection;
- PBD::ScopedConnection change_connection;
+ PBD::ScopedConnectionList 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
diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc
index fc75ae7183..56af0edbe1 100644
--- a/libs/panners/vbap/vbap.cc
+++ b/libs/panners/vbap/vbap.cc
@@ -347,3 +347,15 @@ VBAPanner::get_speakers () const
{
return _speakers->parent();
}
+
+void
+VBAPanner::set_position (double p)
+{
+ _pannable->pan_azimuth_control->set_value (p);
+}
+
+void
+VBAPanner::set_width (double p)
+{
+ _pannable->pan_width_control->set_value (p);
+}
diff --git a/libs/panners/vbap/vbap.h b/libs/panners/vbap/vbap.h
index af3c1c0df2..7aa136ac78 100644
--- a/libs/panners/vbap/vbap.h
+++ b/libs/panners/vbap/vbap.h
@@ -44,6 +44,9 @@ public:
ChanCount in() const;
ChanCount out() const;
+ void set_position (double);
+ void set_width (double);
+
std::set<Evoral::Parameter> what_can_be_automated() const;
static Panner* factory (boost::shared_ptr<Pannable>, boost::shared_ptr<Speakers>);